@clickhouse_ru

Страница 592 из 723
Denis
18.07.2018
14:08:35
как-то странно делать батчер для буфера. тогда уж сразу в таблицу сливать. вообще, неожиданное ограничение на вставку по 1 строке в буфер. логично было предположить, что он для того и нужен

Aliaksandr
18.07.2018
14:10:24
а к нему самому надо пул соединений держать?
ему пофиг - можно на каждый запрос новое соединение открывать, а можно пул держать - скорость работы от этого не изменится. Он сам держит пул соединений к кликхаусу

Google
Denis
18.07.2018
14:10:58
для клиента изменится - он же будет время на открытие соединений тратить

Aliaksandr
18.07.2018
14:11:53
если клиент не по gprs, то это время будет не заметно на фоне времени выполнения запроса в кликхаусе :)

Dmitry
18.07.2018
14:14:44
А кто формирует блоки "3 до 300 строк"? Может там стоит сделать батчинг до 1к и не использовать Buffer вообще? Я выработал правило для КХ (и не только) - делай как можно проще. Если написано в доке что лучше не использовать Buffer, а батчить на стороне приложения - делаю так
Вот мы эту статистику собрали, чтобы понять, писать нам нормальный батчинг или нет. Поняли, что писать, теперь вопрос - по сколько в кучку их собирать. Что касается вопроса "кто". У нас есть обработчики статистических событий. Они забирают за раз максимум 1000 этих событий, разбивают по типам, обрабатывают кучку каждого типа. Какого-то типа может оказаться из тысячи - три. Вот и вставится три строки в одном инсёрте. А ещё 1000 событий может и не быть, обработчик заберёт всего 50, ну и инсёрты окажутся ещё мельче. Полубатчинг, в общем.

1к для буфера тоже сильно много, попробуйте сделать простой батчер на клиенте
Справедливости для, 1к это на все буферы вместе, которых у нас штук ~7 что ли, лень смотреть. Так а всё же, по сколько строк за раз имеет смысл вставлять в буфер, чтобы "всё по красоте было"? :)

Tima
18.07.2018
14:19:08
Вот мы эту статистику собрали, чтобы понять, писать нам нормальный батчинг или нет. Поняли, что писать, теперь вопрос - по сколько в кучку их собирать. Что касается вопроса "кто". У нас есть обработчики статистических событий. Они забирают за раз максимум 1000 этих событий, разбивают по типам, обрабатывают кучку каждого типа. Какого-то типа может оказаться из тысячи - три. Вот и вставится три строки в одном инсёрте. А ещё 1000 событий может и не быть, обработчик заберёт всего 50, ну и инсёрты окажутся ещё мельче. Полубатчинг, в общем.
По моему опыту, боятся что в КХ вставится меньше 1к - не нужно. Главное чтобы оно старалось вставлять больше 1к (или больше если нужно). В вашем случае можно сделать так: буферизировать каждый тип сообщения в отдельной очереди (хоть Раббит, хоть где), тогда можно гибко указывать с какой частотой выбирать каждый из типов. Т.е. если "Какого-то типа может оказаться из тысячи - три" тогда делайте батчин из очереди раз в час (или сколько нужно чтобы накопилось примерно 1к)

Dmitry
18.07.2018
14:22:10
Ага, спасибо! Раз в час нам маловато, сделаем что-то типа "сбрасывать данные, если их 1000 строк, или раз в 15 минут")

Denis
18.07.2018
14:27:17
а разные типы событий в одну таблицу пишете? если да, то кидайте их после обработки обратно в очередь, а из очереди пишите специальным сервисом все вместе

Alexey
18.07.2018
14:50:41
а почему IN требует GLOBAL, если во вложенном запросе выбирать колонку, которая является ключом шардирования?
Для того, чтобы сделать локальный подзапрос в IN, надо внутри него указать в select локальную таблицу.

Evgeniy
18.07.2018
14:53:31
коллеги, а не появилось какого-то способа добавить поля в SummingMergeTree?

molo4ko
18.07.2018
15:01:14
Для того, чтобы сделать локальный подзапрос в IN, надо внутри него указать в select локальную таблицу.
SELECT a, b, c FROM distrib_tbl WHERE a IN ( SELECT a FROM local_tbl WHERE x = 1 AND y < 123 GROUP BY a HAVING argMax(q, w) = 2 LIMIT 10 ) Code: 10, e.displayText() = DB::Exception: Not found column b in block. There are only columns: a, e.what() = DB::Exception

это баг или фича?

Alexey
18.07.2018
15:12:37
коллеги, а не появилось какого-то способа добавить поля в SummingMergeTree?
Добавлять поля в ключ таблицы типа SummingMergeTree. - нет. Есть секретная возможность это сделать для не реплицированных таблиц. (Возможность секретная, потому что была добавлена для одного use-case внутри и не планируется к развитию.)

Google
Alexey
18.07.2018
15:13:20
SELECT a, b, c FROM distrib_tbl WHERE a IN ( SELECT a FROM local_tbl WHERE x = 1 AND y < 123 GROUP BY a HAVING argMax(q, w) = 2 LIMIT 10 ) Code: 10, e.displayText() = DB::Exception: Not found column b in block. There are only columns: a, e.what() = DB::Exception
Не могу сказать - выглядит подозрительно. Если есть полный пример (схема кластера, таблиц, и возможно пара строчек с данными) - надо посмотреть.

molo4ko
18.07.2018
15:14:03
сейчас постараюсь анонимизировать

Alexey
18.07.2018
15:15:58
Konstantin
18.07.2018
15:16:16
от вас - можно ?

если не трудно, можно мне ее, пожалуйста?

Alexey
18.07.2018
15:16:54
Да. Сейчас найдём...

Sergey
18.07.2018
15:23:07
А верно понимаю, что нативный клиент-серверный протокол публично не документирован и надо смотреть исходники?

Alexey
18.07.2018
15:26:29
А верно понимаю, что нативный клиент-серверный протокол публично не документирован и надо смотреть исходники?
Да. Впрочем, можно смотреть не исходники ClickHouse, а исходники драйвера на Go, Java, Python, который реализует этот интерфейс (что больше нравится).

Sergey
18.07.2018
15:27:11
Понял, спасибо.

molo4ko
18.07.2018
15:41:17
@milovidov_an ошибка проявляется при загадочных обстоятельствах

можно вам в ЛС написать?

Mikhail
18.07.2018
15:42:32
Привет. Как можно заставить CH заполнить поля дефолтовыми значениями для старой партиции? Добавили новое поле, его дефолт зависит от существующего. Теперь хочу существующее поле - очистить. Пример условный - был uuid, добавили uuid_hash default toInt32(uuid), хотим его заполнить для старых партишенов и очистить uuid. почему-то optimize partition, даже final - мгновенно отдает «ОК», и больше ничего не проиходит. ReplicatedMergeTree.

Denis
18.07.2018
16:03:25
есть два сервера в кластере, и идет вставка через дистрибьютид таблицу, четные id налево, нечетные направо. Как застравить запрос select * from distributed where id in (1,2,3,4) выполнить select * from shard where id in (1,3) на первом select * from shard where id in (2,4) на втором (без ручного обращения к system.clusters)

Vladimir
18.07.2018
16:03:59
Подскажите, какую настройку крутить, чтобы обойти "DB::Exception: Limit for bytes to send or receive over network exceeded" ?

Nikolai
18.07.2018
16:40:16
Подскажите, какую настройку крутить, чтобы обойти "DB::Exception: Limit for bytes to send or receive over network exceeded" ?
max_network_bandwidth - "The maximum speed of data exchange over the network in bytes per second for a query. Zero means unlimited." max_network_bytes - "The maximum number of bytes (compressed) to receive or transmit over the network for execution of the query."

Denis
18.07.2018
17:11:55
жаль, больно запрос громоздкий получается с ручными условиями, а выигрыш в processed rows в разы.

Google
Konstantin
18.07.2018
17:12:39
https://yadi.sk/d/uGxrTSHN3ZKPie
спасибо, Алексей. сбилдить, кстати, так и не удалось, оставили ишью в репозитории

под мак, судя по всему, по текущей доке не собирается

Vitaliy
18.07.2018
21:14:33
кто-нибуть думал над интеграцией с hashicorp vault?

Antony
19.07.2018
06:12:51
Select argMax(column1, version), ..., argMax(columnN, version) from table ?
Спасибо, действительно должно сработать, но в моем случае выборка столбцов динамическая решил сделать так: SELECT {select_str} FROM transactions ANY INNER JOIN ( SELECT tran_id, MAX(version) AS version FROM transactions WHERE {where_str} GROUP BY tran_id ) USING tran_id, version

k
19.07.2018
06:56:25
Коллеги из Яндекса, вы здесь?

Похоже у вас глобальная проблема с почтой

Firej
19.07.2018
06:57:21
Какая проблема Это никак не связано с кликхаузом?

Stanislav
19.07.2018
06:58:08
Да вроде ходит почта...

k
19.07.2018
06:58:09
Нет, но не знаем куда идти вообще. Саппорт молчит

Да вроде ходит почта...
На кого можно переадресовать вопрос, не подскажешь?

Stanislav
19.07.2018
07:04:05
не подскажу, просто проверил на своих ящиках

Vadim
19.07.2018
07:08:54
Похоже у вас глобальная проблема с почтой
Доброе утро, с почтой все нормально, вроде

Alexander
19.07.2018
07:15:30
Похоже у вас глобальная проблема с почтой
у меня тоже все нормально с почтой

k
19.07.2018
07:18:36
Доброе утро, с почтой все нормально, вроде
Суть - при отправке с яндекса на наш домен он у себя проверяет наши адреса и как не удивительно НЕ НАХОДИТ

Пока пробуем через саппорт

daria
19.07.2018
09:50:46
привет всем. возможно ли в set установить значение select'ом? например: set date = (select ... from ... where ...)

пробую, ругается на синтаксис

значение в запросе одно

Google
george
19.07.2018
10:05:22
Добрый день, скажите на что именно влияют скобки при создании таблицы ORDER BY (dt,(dev_id, target_id)) или ORDER BY (dt, dev_id, target_id ) где можно про это почитать? Спасибо

Denis
19.07.2018
10:06:41
up! Крайне актуальный вопрос… Не понимаю, как заставить CH сделать merge для старой партиции ?
попробуйте https://clickhouse.yandex/docs/en/query_language/queries/#optimize но не факт, что поможет. возможно нужно перед этим как-то настройки партиционировани поменять, чтобы он решил их перестроить

Denis
19.07.2018
10:08:48
так я и говорю, что кх уже всё разложил и больше не будет оптимизировать. скорее всего надо размер партиции поменять. так-то он дефолтное значение как функцию держит, а не пишет сразу в таблицу

Yuran
19.07.2018
10:51:26
Подскажите пожалуйста про движок GraphiteMergeTree: в документации (https://clickhouse.yandex/docs/ru/table_engines/graphitemergetree/#table_engines-graphitemergetree) говорится, что в таблице должны быть следующие поля: Path - имя метрики (сенсора Graphite). Time - время измерения. Value - значение метрики в момент времени Time. Version - настройка, которая определяет какое значение метрики с одинаковыми Path и Time останется в базе. У нас структура таблиц немного другая и там вместо поля Version есть поле Timestamp. Если посмотреть в исходники, то можно в файле dbms/src/Storages/MergeTree/registerStorageMergeTree.cpp увидеть, что по умолчанию колонка с версией должна называться Timestamp: params.version_column_name = config.getString(config_element + ".version_column_name", "Timestamp");

Кому верить, и что делать, если схлопывания данных на практике не происходит, хотя на вид всё сконфигурировано правильно?

George
19.07.2018
11:41:47
@orantius, у вас в clickhouse.yandex/docs/en/formats в боковом баре есть пару битых ссылок. Например:





Saprow
19.07.2018
12:16:49
Ребят, как можно произвести выборку по месяцу, если отдельного столбца для месяца нету ? *Имеется столбец типа Date

Saprow
19.07.2018
12:18:35
Есть

daria
19.07.2018
12:18:39
toMonth(Date)

papa
19.07.2018
12:19:40
toMonth(Date)
toMonth для разных годов вернет одинаковое значение, toStartOfMonth более уникален в этом смысле.

Николай
19.07.2018
12:21:33
В clickhouse нет случайно pointInPolygon, только для geography type как в Postgis?

Dmitriy
19.07.2018
12:22:57
Ребят, всем привет! Подскажите можно ли отключить дедупликацию данных? Есть такой кейс: в кластер из 8 тачек прилетают данные, когда приходит несколько полностью одинаковых строк - они схлопываються в одну! Но такое поведение не нужно, так как таблица SummingMergeTree и эти строки должны быть в итого просуммированы по ключу! А в итоге получаю только одну строку, идет потеря. Спасибо.

Dmitriy
19.07.2018
12:27:17
Спасибо! Попробую!

Google
Dmitriy
19.07.2018
12:27:17
Похоже на настройку insert_deduplicate , которую вам, вероятно, нужно выставить в 0 (по идее её можно прямо во время INSERT выставить, для HTTP это будет типа POST /?insert_deduplicate=0)

Saprow
19.07.2018
12:37:13
SELECT ... FROM ... WHERE toYYYYMM(date) = ''
Спасибо, сработало на ура :)

Andrew
19.07.2018
12:41:10
Привет! Подскажите, пожалуйста, а есть способ запустить clickhouse с readonly на все replicated-таблицы? Где-то находил в документации, а так же вот тут в исходниках https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/StorageReplicatedMergeTree.cpp - что достаточно просто убрать из конфига описание zookeeper-кластера, но у меня он в таком режиме сигфолтится (версия 1.1.54388)

Denis
19.07.2018
12:50:29
SELECT ... FROM ... WHERE toYYYYMM(date) = ''
а в доке нет этой функции(

Tima
19.07.2018
12:51:09
Тут SELECT * FROM system.functions WHERE name = 'toYYYYMM' есть

Yuran
19.07.2018
12:51:17
а в доке нет этой функции(
На самом деле есть, но не там, где ожидаете https://clickhouse.yandex/docs/ru/table_engines/custom_partitioning_key/

Tima
19.07.2018
12:51:33
Я бы всё таки использовал toStartOfMonth

Yuran
19.07.2018
12:51:37
Традиционному партиционированию по месяцу соответствует выражение toYYYYMM(date_column).

Denis
19.07.2018
12:51:53
да уж. совсем-совсем не там

Dmitriy
19.07.2018
13:00:55
Сработало!! Спасибо большое!!?

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