@clickhouse_ru

Страница 478 из 723
Alexander
30.03.2018
11:24:53
в доках написано, что запросы типа ALTER TABLE ATTACH реплицируются

Anton
30.03.2018
11:25:24
А данные в detach являлись результатом предыдущей репликации?

Wolf
30.03.2018
11:25:35
а как они у вас могут быть разными ?

Alexander
30.03.2018
11:27:05
нет, это были данные из ранее не реплицируемой таблицы

Google
Anton
30.03.2018
11:27:28
А, понятно

Alexander
30.03.2018
11:28:49
а как они у вас могут быть разными ?
я их подключал локально на одной машине, потом отключал. Кх их переименовал, а я не сразу обратил внимание

чуть позже проверю свои докадки на другой таблице

Dima
30.03.2018
12:05:47
Привет После обновления до 54370 возникла проблема. При подобном запросе: SELECT uniq(session_id), field FROM table WHERE date = today()-1 AND (session_id, timestamp) in (SELECT session_id, timestmp FROM table) AND field = 0 GROUP BY field Выводит ноль строк, при том, что без "AND field=0" есть в выводе строки с field = 0. Кто подскажет как пофиксить без костылей в запросе?

Tima
30.03.2018
12:23:46
Dima
30.03.2018
12:26:12
Странное поведение, попробуйте добавить алиасы для таблиц, чтобы получилось примерно так SELECT uniq(t1.session_id), t1.field FROM table AS t1 ... (SELECT t2.session_id ... FROM table AS t2) ... Может какая колизиця имён столбцов
Не помогает. Да и не должно было бы, так как при одинарной вставке все работает: SELECT uniq(session_id), field FROM table WHERE date = today()-1 AND (session_id) in (SELECT session_id FROM table) AND field = 0 GROUP BY field

Tima
30.03.2018
12:26:39
Что такое одинарная вставка?

Dima
30.03.2018
12:27:19
Я имел ввиду фильтр по одному значению, а не по паре значений. Неправильно выразился.

Vasilij
30.03.2018
12:34:35
Вставил в ReplicatedMergeTree таблицу небольшую пачку записей (500), с использованием кворума, данные сразу оказались на двух других репликах. Потом вручную из клиента одной из реплик удалил партицию с ними (без использования кворума, и без изменения дефолтного replication_alter_partitions_sync), таблица стала пустой. Проверил - на остальных репликах ALTER ... DROP PARTITION ... доехал и отработал. Однако, при попыте чтения из этой, первой, реплики (c select_sequential_consistency=1), кидается исключение: Replica doesn't have part .... which was successfully written to other replicas. Send query to another replica or disable 'select_sequential_consistency' Не знает ли кто, где я налажал, и как лечить такое? Помогло в итоге только дропнуть всю таблицу и создать заново, но что было бы, если бы она была не пуста?

Tima
30.03.2018
12:37:02
Я имел ввиду фильтр по одному значению, а не по паре значений. Неправильно выразился.
А зачем вообще делать такое "(session_id, timestamp) in (SELECT session_id, timestmp FROM table)"? в этом подзапросе ещё что-то есть?

Dima
30.03.2018
12:38:04
А зачем вообще делать такое "(session_id, timestamp) in (SELECT session_id, timestmp FROM table)"? в этом подзапросе ещё что-то есть?
Да, это схема запроса, По факту, там еще аггрегация в под запросе и фильтры. Но они не влияют на проблему. Сама схема ломается

Tima
30.03.2018
12:41:13
issue на GitHub заведите
+1. Какое-то очень страное поведение

Google
Dima
30.03.2018
12:46:18
вот воспроизведение баги CREATE TABLE trololo ( date Date, timestamp DateTime, a String, b Int32 ) ENGINE = MergeTree(date, (date, timestamp), 8192); INSERT INTO trololo VALUES ('2018-03-28', '2018-03-28 18:09:31', '5ee21b937bd45fb31', 1); SELECT * FROM trololo WHERE (a, timestamp) IN ( SELECT a, timestamp FROM trololo ) ┌───────date─┬───────────timestamp─┬─a─────────────────┬─b─┐ │ 2018-03-28 │ 2018-03-28 18:09:31 │ 5ee21b937bd45fb31 │ 1 │ └────────────┴─────────────────────┴───────────────────┴───┘ 1 rows in set. Elapsed: 0.005 sec. SELECT * FROM trololo WHERE ((a, timestamp) IN ( SELECT a, timestamp FROM trololo )) AND (b = 1) Ok. 0 rows in set. Elapsed: 0.006 sec.

Окей, спасибо

Konstantin
30.03.2018
13:01:36
Окей, спасибо
а на какой версии у вас этот запрос работал нормально?

Dima
30.03.2018
13:02:54
54245

Denis
30.03.2018
13:03:41
Явная бага и в 1.1.54371 тоже workaround SELECT * FROM trololo WHERE concat(a, toString(timestamp)) IN ( SELECT concat(a, toString(timestamp)) FROM trololo ) причем проблема на TinyLog не воспроизводится, наверное только с *MergeTree из-за новой функциональности in (select) умеет использовать индекс. добавил https://github.com/yandex/ClickHouse/issues/2147

Konstantin
30.03.2018
13:09:33
54245
на 54362 такое же поведение

Kirill
30.03.2018
14:29:05
"Пятничное" вдруг кому-нибудь интересно https://www.youtube.com/watch?v=2SUBRE6wGiA&list=PLSE8ODhjZXjY0GMWN4X8FIkYNfiu8_Wl9 , а так в CMU Database Group вообще очень много полезного

Vyacheslav
30.03.2018
14:33:58
influx не работоспособен в принципе

он просто гробит данные, не выполняет правильно запросы

не надо его вообще трогать, он говно

Kirill
30.03.2018
14:37:12
Ну, у нас InfluxDB работает достаточно неплохо, не в этом суть, там совсем о другом

Vyacheslav
30.03.2018
14:38:08
у меня все работает (с) типичный программист

а у меня через полгода инфлюкс падает и не стартует. часть данных при этом оказывается проебана (после того как с помощью какой-то матери его все же удается запустить)

Андрей Михайлович
30.03.2018
14:43:36
Господа, как можно в нашем обществе столь крепко выражаться? Извольте сдерживаться, сударь!

Pavel Tyavin
30.03.2018
14:54:00
Да, это есть в планах.
есть подвижки?

Roman
30.03.2018
14:54:24
Подскажите как сделать перешардирование с добавлением нового шарда!

Mike
30.03.2018
15:20:28
Подскажите как сделать перешардирование с добавлением нового шарда!
Проще всего создать новую дитрибутед таблицу с дополнительным шардом и данные перелить, в последних версиях вроде появилась отдельная утилита для копирования данных

Kirill
30.03.2018
15:37:25
Подскажите как сделать перешардирование с добавлением нового шарда!
Есть утилита https://clickhouse.yandex/docs/en/single/#clickhouse-copier-util, можно ей попробовать

а у меня через полгода инфлюкс падает и не стартует. часть данных при этом оказывается проебана (после того как с помощью какой-то матери его все же удается запустить)
Уронить и сломать всё можно, возможно вы выбрали не тот инструмент под свои задачи. Насколько я помню вы давно на InfluxDB жалуетесь, что в замен используете?

Google
Vyacheslav
30.03.2018
15:39:50
кликхаус, это кажется очевидно

sha-bang
30.03.2018
16:52:50
Приветстую

Не подскажете где можно взять rpm zookeeper версии 3.4.11?

под Centos7

Alexey
30.03.2018
17:07:13
есть подвижки?
По EXPLAIN/ANALYZE никаких подвижек, делаем другие задачи.

sha-bang
30.03.2018
18:08:12
а зачем 3.4.11?
на других серверах эта версия

чтобы одинаковые версии были

Wolf
30.03.2018
18:08:33
Ну логично было бы поднимать их на одной оси

sha-bang
30.03.2018
18:09:01
я тут нашел вроде инструкцию https://github.com/skottler/zookeeper-rpms

буду пробовать

Wolf
30.03.2018
18:09:47
ну суппортить свои пакеты очень геморно, на одних серверах само обновится, на других надо самому собирать

Alexander
30.03.2018
18:11:16
rpm репозиториев с 3.4.11 не встречал, везде 3.4.6 и ниже

попробуйте сами собрать, или поискать готовый rpm

sha-bang
30.03.2018
18:19:30
оГа, хорошо. Спасибо

Dmitriy
30.03.2018
18:22:30
Подскажите, пожалуйста, где можно смотреть change log’и по версиям CH

prll
30.03.2018
18:27:18
https://github.com/yandex/ClickHouse/blob/master/CHANGELOG_RU.md

Dmitriy
30.03.2018
18:28:30
Благодарю:)

?
30.03.2018
18:40:02
подскажите бест практики в такой ситуации: есть что-то типа своей метрики/логов, где пишется подобное: IP, UserID (хеш от IP+UserAgent+пары параметров), ViewID - уникален для каждого нового запроса (просмотра страницы) пример таблицы 127.0.0.1 | 123 | 546546 127.0.0.1 | 123 | 678678 127.0.0.1 | 123 | 890890 127.0.0.2 | 234 | 112112 127.0.0.2 | 234 | 333444 127.0.0.2 | 345 | 999777 (другой пользователь с того же IP) 127.0.0.2 | 345 | 888333 мне надо считать различную статистику причем как по ип, так и по пользователям и по просмотрам. возможно ли обойтись как-то движком MergeTree? или лучше другой движок? как вообще с этим лучше всего работать? есть что дополнительно почитать?

Google
Wolf
30.03.2018
18:46:32
дату еще добавить и будет ок )

?
30.03.2018
18:50:12
ну вот если мне нужно выбрать UserAgent только по уникальным UserID это как будет выглядеть?

Wolf
30.03.2018
18:54:38
Так у них наверно юзерагент одинаковый чем гроуп бай не устраивает?

strange
30.03.2018
18:56:33
Так-то да

?
30.03.2018
18:59:02
щас попробую тестовые запросы погонять, спасибо

Vasiliy
30.03.2018
20:19:31
Всем доброй ночи )

CREATE MATERIALIZED VIEW requests_graph ENGINE = MergeTree(request_date, (request_time, request_uri), 8192) AS SELECT request_date, toStartOfHour(request_time) as request_time, request_uri, AVG(response_time) AS average_response_time, MIN(response_time) AS min_response_time, MAX(response_time) AS max_response_time, COUNT(*) as request_count FROM requests GROUP BY request_uri, request_time, request_date;

Почему при вставке в requests, SELECT * FROM requests_graph показывает вовсе не AVG/MIN/MAX а одинаковые response_time?

Причем requests_graph должен сильно компактным получиться с объединением по часам, вроде как

Но если посмотреть на его размер - он вдвое больше requests o_O

Или подождать, он потом когда-нибудь домержит? )

Denis
30.03.2018
20:42:59
Всем доброй ночи )
ОК. У нас обед. По моему вам надо использовать AggregatingMergeTree В вашем варианте новая строка вставляется в MV на каждый инсерт(новую строку) в requests.

Vasiliy
30.03.2018
20:45:42
Пробую, с AggregatingMergeTree точно так же

Понятно, что SELECT из такой MV должен быть с группировкой тоже, чтоб домержил, но смущает то что у него размер большой и пока не показывал смерженный результат с обычным SELECT

OPTIMIZE тоже не меняет поведения

Denis
30.03.2018
21:04:54
AggregatingMergeTree ....выполняет объединение состояний агрегатных функций, хранимых в таблице, для строчек с одинаковым значением первичного ключа. т.е. как минимум ключ должен быть toStartOfHour.... AggregatingMergeTree(request_date, ( request_date, toStartOfHour(request_time), request_uri)

Alex
30.03.2018
21:07:01
Вам в AggregatingMergeTree нужно хранить не результаты агрегатных функций, а их состояния. То есть например не avg(response_time), а avgState(response_time). И доагрегировать с помощью avgMerge(state).

Ну и первичный ключ правильно подобрать, как выше советуют.

Denis
30.03.2018
21:08:49
кстати хороший пример (очень понятный, по крайней мере мне), надо его запилить и добавить в документацию

Google
Vasiliy
30.03.2018
21:09:14
request_time там есть в ключах, с этим все хорошо ) я понял почему не работал SELECT

как только загрузил реальные данные, в миллион строк все стало мержиться и аггрегироваться )

Denis
30.03.2018
21:10:36
про ключ request_time != toStartOfHour(request_time)

Vasiliy
30.03.2018
21:10:59
toStartOfHour(request_time) AS request_time

там вот так же )

Denis
30.03.2018
22:03:55
а ну как-то так должно быть gist.github.com/den-crane/6eff375752a236a456e1b3dc2ca7db62

Alexey
31.03.2018
13:47:26
Коллеги, что-то потерялся я... Как по документации понять, где определяются те или иные параметры/конфиги и можно ли их устанавливать налету глобально для всего сервера

интересуют параметры вроде input_format_allow_errors_num

Petr
31.03.2018
18:23:12
Привет, а select ы тоже как и insert лучше пачками делать или по одному нормально?

Alex
31.03.2018
18:24:39
селекты пачками? это как?

Petr
31.03.2018
18:29:57
ну да не пачками, массивом или по одному

Wolf
31.03.2018
18:31:57
Это сомнительно

Daniel
31.03.2018
18:39:23
Привет, а select ы тоже как и insert лучше пачками делать или по одному нормально?
Если стоит задача меньше грузить железо, то пачками, если быстрее получать данные - то как только появится что-то к запросу...

Кстати Wolf изучали ли роли нод Observers в Zookeeper? Подходят ли они как-то к использованию с CH?

Wolf
31.03.2018
18:41:53
Ещё нет, выше писали что вроде как да

Страница 478 из 723