@clickhouse_ru

Страница 645 из 723
Алексей
03.09.2018
08:23:12
Dmitry
03.09.2018
08:23:28
SELECT version()
спасибо

Google
Alexander
03.09.2018
08:36:41
сжатие было вроде всего, был выбор чем именно жать , легко посмотреть на диске открыв файл в просмотрщике
Этим запросом можно посмотреть что и на сколько сжато: SELECT table, name, formatReadableSize(sum(data_compressed_bytes)) AS compressed, formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed, sum(data_uncompressed_bytes) / sum(data_compressed_bytes) AS ratio FROM system.columns WHERE database != 'system' GROUP BY table, name ORDER BY table, ratio DESC;

Sergey
03.09.2018
08:47:05
Привет. Есть ли в CH способ вынуть время прошедшее с предыдущего события? Т.е. есть таблица вида date | devId | eventDateTime 2018-08-01 | 100 | 2018-08-01 12:00:00 2018-08-01 | 100 | 2018-08-01 12:10:00 2018-08-01 | 100 | 2018-08-01 12:15:00 Нужен запрос, который вернёт devId | eventDateTime | fromPrev 100 | 2018-08-01 12:00:00 | 100 | 2018-08-01 12:10:00 | 600 100 | 2018-08-01 12:15:00 | 300

Sergey
03.09.2018
08:54:26
runningDifferenceStartingWithFirstValue,runningAccumulate,runningDifference ?
Что-то я в документации не могу найти. Есть где об этом почитать или примеры?

Vasilij
03.09.2018
08:55:20
Можно поискать здесь в чате (есть примеры), или в исходниках на гитхабе, в тестах всегда есть примеры каждой функции.

Vadim
03.09.2018
08:58:55
Что-то я в документации не могу найти. Есть где об этом почитать или примеры?
https://clickhouse.yandex/docs/ru/query_language/functions/other_functions/#runningdifferencex

Bogdan
03.09.2018
08:59:46
Коллеги, можно ли в кликхаусе сделать join таблиц без using? то есть просто берём две любые таблицы и надо смёржить всё со всем

Алексей
03.09.2018
09:02:05
сейчас попробую
это будет только не декартово

Google
Vladimir
03.09.2018
09:02:28
сейчас попробую
Можно добавить в каждой таблице по столбцу, содержащему константу и по нему джойнить

Bogdan
03.09.2018
09:03:40
то есть по сути будет две таблицы первая с временными точками сгенерёнными через numbers и нулями

вторая будет с нужными группировками string столбцов

надо смёржить эти две таблицы так чтобы все группы string имели по всем временным точкам

как-то так

это всё костыли к тому как бы вместо провалов пихать нули в качестве значений ибо я не представляю как сделать иначе

Vladimir
03.09.2018
09:05:33
select * from (select *, 1 as c from t1) all inner join (select *, 1 as c from t2) using c

Bogdan
03.09.2018
09:06:43
select * from (select *, 1 as c from t1) all inner join (select *, 1 as c from t2) using c
хм, ну кстати может это и прокатит, сейчас попробую

выглядит как костыль конечно, но элегантный))

papa
03.09.2018
09:12:25
а cross join не работает разве?

Bogdan
03.09.2018
09:13:02
я его даже в доке не увидел, UPD: cross join тоже работает кстати, но по нему доки нету

https://github.com/yandex/ClickHouse/issues/2857

Antowa
03.09.2018
09:13:42
сжатие было вроде всего, был выбор чем именно жать , легко посмотреть на диске открыв файл в просмотрщике
Согласно спецификации, первые четыре байта LZ4 - 0x184D2204. Прошёлся по .bin-файлам хексдампом, не нашёл. Походу Кликхаусом пишется raw stream.

Исходники Кликхауса для меня слишком масштабные, чтобы сейчас в них искать точный ответ на этот вопрос

Ещё вопрос: если задать zstd вместо lz4, данные пережмутся в фоновом режиме, или это требуется вызывать принудительно? Хотя побаиваюсь вообще что-то делать с датасетом на полтора тб.

Wolf
03.09.2018
09:18:10
сжатые там данные или не сжатые ,а у ж чем пожаты это второй вопрос

Google
Sergey
03.09.2018
09:21:12
runningDifferenceStartingWithFirstValue,runningAccumulate,runningDifference ?
Я так понимаю эти функции нельзя использовать при изменяющихся devId. Если в таблице несколько devId: date | devId | eventDateTime 2018-08-01 | 100 | 2018-08-01 12:00:00 2018-08-01 | 100 | 2018-08-01 12:10:00 2018-08-01 | 100 | 2018-08-01 12:15:00 2018-08-01 | 200 | 2018-08-01 12:00:00 2018-08-01 | 200 | 2018-08-01 12:05:00 то надо вернуть devId | eventDateTime | fromPrev 100 | 2018-08-01 12:00:00 | 100 | 2018-08-01 12:10:00 | 600 100 | 2018-08-01 12:15:00 | 300 200 | 2018-08-01 12:00:00 | 200 | 2018-08-01 12:05:00 | 300

Alexey
03.09.2018
09:24:17
Привет. А можно как-нибудь изменить формат логов Кликхауса? Убрать\добавить колонки, изменить формат таймстемпа, всё в таком духе

Michal
03.09.2018
09:25:09
это всё костыли к тому как бы вместо провалов пихать нули в качестве значений ибо я не представляю как сделать иначе
Есть два варианта заполнения пустых дат / временных диапазонов. В обоих случаях требуется для начала создать полный диапазон полностью с помощью запроса типа SELECT today() + number FROM numbers(100). Ну и дальше первый вариант который приходит в голову - это сделать JOIN с настоящими данными. Но в кликхаус JOIN - не всегда наилучшая идея, поэтому я в таких случаях предпочитаю UNION ALL с дальнейшей группировкой результата по времени/дате.

Michal
03.09.2018
09:32:22
Ну т.е. что-то типа SELECT date, sum(column1), sum(column2) FROM ( SELECT date, column1, column2 FROM realtable UNION ALL SELECT today() + number, 0,0 FROM numbers(100) ) GROUP BY date

Bogdan
03.09.2018
09:33:39
то есть этот вариант работает только если group by date и никаких других группировок нет

Michal
03.09.2018
09:48:42
Даже тогда JOIN не обязателен, вместо numbers можно использовать range + arrayJoin. SELECT ... FROM ( SELECT id1, id2, date, ... FROM table UNION ALL select id1, id2, arrayJoin( arrayMap( x -> today() + x, range(10) ) ) as date2 from table WHERE date=today() GROUP BY id1, id2 ) GROUP BY id1, id2, date

Ещё вопрос: если задать zstd вместо lz4, данные пережмутся в фоновом режиме, или это требуется вызывать принудительно? Хотя побаиваюсь вообще что-то делать с датасетом на полтора тб.
Насколько мне известно: указание конфигурации сжатия влияет на новосоздаваемые куски данных. При этом используемый алгоритм сжатия зашит в файлах данных, т.е. расжатие данных всегда происходит тем чем было сжато и конгфигурация на это никак не влияет. Новые куски данных пишутся при инсертах, или при фоновых слияниях. Т.е. если изменить LZ4 на ZSTD, то фоновые слияния будут пережимать данные в таком темпе который сочтут нужным, но скорее всего если данных много то ВСЕ данные будут пережаты примерно никогда. Можно использовать OPTIMIZE ... FINAL чтобы заставить пережать старые/большие части.

Привет. Есть ли в CH способ вынуть время прошедшее с предыдущего события? Т.е. есть таблица вида date | devId | eventDateTime 2018-08-01 | 100 | 2018-08-01 12:00:00 2018-08-01 | 100 | 2018-08-01 12:10:00 2018-08-01 | 100 | 2018-08-01 12:15:00 Нужен запрос, который вернёт devId | eventDateTime | fromPrev 100 | 2018-08-01 12:00:00 | 100 | 2018-08-01 12:10:00 | 600 100 | 2018-08-01 12:15:00 | 300
В случае необходимости считать разность в стролбце внутри групп можно использовать массивы и функции высшего порядка. См. тут https://stackoverflow.com/questions/51856397/clickhouse-running-diff-with-grouping/51873915#51873915

Dmitry
03.09.2018
10:06:05
Подскажите как вставлять (insert) записи пачками? Словил ошибку "Too many parts (300). Merges are processing significantly slower than inserts". Только через файлы csv, tsv ?

Stanislav
03.09.2018
10:06:52
не пачку инсертов, а инсерт пачки нужен

что-то типа INSERT .... VALUES (....), (...), (...) ...

Грубо говоря, один инсерт - одна новая часть на диске.

Michal
03.09.2018
10:07:56
Подскажите как вставлять (insert) записи пачками? Словил ошибку "Too many parts (300). Merges are processing significantly slower than inserts". Только через файлы csv, tsv ?
INSERT INTO table VALUES (1, 'первая строка данных'), (2, 'вторая строка данных'), ..., (100, 'строка данных номер сто');

Dmitry
03.09.2018
10:09:06
они никак не склеиваются? записей же миллионы

Stanislav
03.09.2018
10:09:30
Можно в таблицу типа Buffer, тогда немного полегче

Google
Stanislav
03.09.2018
10:09:38
Но тоже не панацея

Dmitry
03.09.2018
10:09:44
у нас так свалился сервер, создало 20 миллионов файлов

Michal
03.09.2018
10:09:54
или например INSERT INTO table FORMAT JsonEachRow {"id":1,"str":"первая строка данных"} {"id":2,"str":"вторая строка данных"} {"id":100,"str":"строка данных номер 100"}

они никак не склеиваются? записей же миллионы
Одна из особенностей кликхаус - данные нужно вставлять пачками. Нельзя по одной строке. Т.е. или вы напишете один инсерт и потом в нем перечислите 100 тысяч строк для вставки - то это хорошо, а если сделаете 100 тысяч инсертов по одной строке - то это очень плохо.

Есть масса разных способов для преодоления этой проблемы. Один из них - это встроенный движок Buffer который лояльно относится к инсертам по одной строке и перебрасывает данные в финальную таблицу по мере накопления. Но он имеет свои ограничения, поэтому его обычно не рекомендуют широко использовать.

Ещё один - использование кафки.

Ну или любого внешнего софта, который позволит где-то накопить побольше данных перед тем как запихнуть их в кликхаус.

Oleg
03.09.2018
10:17:10
Ещё один - использование кафки.
А как обрабатывать плохие данные в кафке? Я пытался так сделать и не нашел. Если кликхаусовский движок kafka не может распарсить данные, он просто бесконечно выдает ошибку.

Michal
03.09.2018
10:18:23
Если необходима какая-то фильтрация перед КХ - то наверное можно попробовать читать из "плохого" стрима и писать в "хороший" чем-нибудь для потоковой обработки. А кликхаус настроить чтоб читал "хороший".

Michal
03.09.2018
10:26:23
Насколько я помню, сжимаются блоки с данными Native формата, а всё остальное (всякие номера пакетов и т. п.) передаётся без сжатия. Сжатые данные устроены так. Они представляют собой набор сжатых фреймов. Каждый фрейм имеет следующий вид: чексумма (16 байт), идентификатор алгоритма сжатия (1 байт), размер сжатых данных (4 байта, little endian, размер не включает в себя чексумму, но включает в себя остальные 9 байт заголовка), размер несжатых данных (4 байта, little endian), затем сжатые данные. Идентификатор алгоритма: 0x82 - lz4, 0x90 - zstd. Чексумма - CityHash128 из CityHash версии 1.0.2, вычисленный от сжатых данных с учётом 9 байт заголовка. См. CompressedReadBufferBase, CompressedWriteBuffer, utils/compressor, TCPHandler.

Antowa
03.09.2018
10:28:02
про заголовки сжатия в КХ ^
Низкий поклон за столь подробный разбор

Michal
03.09.2018
10:29:50
Низкий поклон за столь подробный разбор
Ваши кудосы отправляются в копилку Алексею @milovidov_an :)

Aleksandr
03.09.2018
11:49:16
Приветствую. Подскажите пожалуйста, есть кластер из 4 нод (2 шарда по 2 реплики) хочу на всех 4 нодах открепить партицию в таблице за 1 запрос , нашел ноду с признаком в system.replicas is_leader=1 , есть 2 таблица: tablename = Distributed tablename_sharded = ReplicatedMergeTree делаю так: alter table database.tablename detach partition ’201807’ и получаю: DB::Exception: Method dropPartition is not supported by storage Distributed.

или же alter table detach не реплицируется?

ClickHouse client version 1.1.54383.

и правильно ли я понимаю что если я хочу открепить партицию на каждой ноде отдельно то нужно делать: alter table database.tablename_sharded detach partition ‘201807’ на каждой ноде?

Mike
03.09.2018
11:53:22
alter table database.MergeTree-table on cluster xxx должно сработать

Google
Aleksandr
03.09.2018
11:55:08
понял, спасибо большое

Artem
03.09.2018
12:22:21
привет! пожалуйста, дайте совет - как сделать так, чтобы аггрегатная функция count возвращала 0, если записей нет?

Eduard
03.09.2018
12:26:41
можно ли использовать haproxy для балансировки между 2-мя репликами?

Mike
03.09.2018
12:29:44
можно ли использовать haproxy для балансировки между 2-мя репликами?
мы используем достаточно давно, проблем не было

Eduard
03.09.2018
12:33:30
@Mike_Er не подкините пример с боевого сервера?

Mike
03.09.2018
12:33:58
Конфига хапрокси?

Eduard
03.09.2018
12:34:07
да

Yuran
03.09.2018
12:55:44
То есть вам нужно просто обновить кликхаус ?

Artem
03.09.2018
12:56:55
То есть вам нужно просто обновить кликхаус ?
т.е. сейчас он по-дефолту 0 выдает?

Yuran
03.09.2018
12:58:09
на версии 1.1.54385 уже выдает

на 1.1.54342 ещё нет

Artem
03.09.2018
12:58:31
1.1.54343 у меня эта стоит

Yuran
03.09.2018
12:58:50
сильно больше версий у меня в продакшене нет ?

Artem
03.09.2018
12:59:20


Yuran
03.09.2018
12:59:21
1.1.54343 у меня эта стоит
Обновите (осторожно, с бекапами или хотя бы FREEZE PARTITION) хотя бы до 1.1.54385 и станет выдавать ?

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