- 01 April 2017 (32 messages)
-
-
-
-
Чет мало. У тебя наверное insert на каждую запись.
А лучше батчами, т.е. ты в одном insert передаешь множество строк. В таком режиме у меня 232млн записей льются за 2м40с. -
-
внутри сети получился результат около 400 тыс в секунду. по вашим результатам выходит 1.5 млн в секунду. как так? я делаю батчем
-
может вы csv шлете с компресией ? я шлю как строку с множеством записей
-
Joined.
-
@all может кто подскажет какой самый быстрый способ вставки строкой или через csv file
-
-
в 6 утра лег исправил ошибку в своем импорте выполнил локально результаты были не очень. потом залил на машину которая в сети с машиной клик хаус стоит и результат пачка 50 тыс. записей = 0.21 сек
-
есть статейка на хабре 10 млн записей импортнули за 4 секунды что равно 2 500 000 записей в секунду это результат очень классный, но не пойму как они добились этого. может через csv надо импорт делать. вначале собирать все в файлик потом файлик кидать в clickhouse с компресией
-
*они делали через csv. но разве разница есть отправлять запрос вида INSERT INTO table (value),(value),(value), ... (fields) или в csv
-
разве что компресия может дать более быструю пересылку данных
-
Я упустил тот момент что вы шлете по сети. У меня так вставка идёт локально.
-
ну у нас отдельный сервер на нем целый движок собирает данные и записывает. локально просто не можем
-
-
-
у нас их около 40
-
большая часть int значения. пару полей string
-
-
ну у нас столько данных в секунду не бывает. пока около 5-50 записей в секунду. но дальше будет больше. важно сделать замер максимального количесвто вставок в секунду чтобы знать пределы системы
-
сейчас попробую перегнать данные в csv записать в файлик и его отправлять. сделаю замер
-
еще такой вопрос. примари кей приоритетнее для каких полей выставлять? по которым GROUP и WHERE IN ?
-
-
т.к. у вас индексов кроме основного не будет, то все запросы будут иметь план либо fullscan либо он же, но с ограничением по диапазонам индекса, которые можно извлечь из where. например, если у вас данные про какие-то события, у них есть время, и типовой отчет у вас за последний месяц, то чтобы не читать данные за всю историю у вас будет фильтр по дате и индекс по дате. если у вас события характеризуются каким-то источником и отчетность по каждому из них нужна отдельно, то условие на него (всегда) будет в where и его можно добавить в индекс. особенно если таких источников существенно меньше чем количество строк, тогда их данные будут храниться подряд большими кусками и работать быстрее.
-
у нас есть поля по которым надо постоянно производить подсчет sum в рамках where in с группировкой по дню. индексы уместны?
-
Joined.
-
По тем полям которые внутри where
-
Подскажите пожалуйста пытаюсь отправить tsv файл но пишет ошибку
Cannot parse input: expected \t -
между данными ставит таб и clickhouse ругается на него
-
Казалось бы, «expected \t» означает что, наоборот, clickhouse хочет увидеть таб, но не тут-то было.
Я бы проверил типы полей — верно ли, что указанные в INSERT'е (или в таблице) в точности совпадают с теми, которые передаютися в tsv. - 02 April 2017 (23 messages)
-
-
добрый)
-
-
-
-
-
-
-
-
-
-
-
-
Привет!
В документации про парсинг CSV написано "Поддерживаются как двойные, так и одинарные кавычки". А нет ли, случайно, опции, отключающей поддержку одинарных кавычек? Т.е. чтобы одинарные кавычки не воспринимались как служебные символы.
Или единственный способ поместить в CSV строку, начинающуюся с одинарной кавычки, так, чтоб ClickHouse её понял, - обернуть всю строку в двойные кавычки? -
Экранирование же
-
"\""
-
Слеш я пробовал, но он проходил в ClickHouse as is. А вот экранировать одинарную кавычку точно так же, как по стандарту надо экранировать двойную кавычку - повторением, додумался только сейчас, и это сработало.
P.S. Возможно, стоит в явном виде написать в документации, что по отношению к одинарным кавычкам поведение CH отличается от RFC, т.к. фраза "Поддерживаются как двойные, так и одинарные кавычки" выглядит безобидно и позитивно) а на самом деле такая поддержка может для кого-то оказаться неожиданной.
Т.е. по RFC строчка
1,2,3,'stringStartingWithSingleQuote,5,6
- валидна, а ClickHouse-у она не нравится, т.к. он, видя одинарную кавычку в начале строки, считает её enclosing-символом -
По хорошему, надо добавить настройки кастомизации CSV.
Там правда довольно много их получается. -
мы заопенсорсили https://github.com/crobox/clickhouse-scala-clientGitHub - crobox/clickhouse-scala-client: Clickhouse Scala Client with Reactive Streams support
Clickhouse Scala Client with Reactive Streams support - GitHub - crobox/clickhouse-scala-client: Clickhouse Scala Client with Reactive Streams support
-
зачот :)
-
плюсанул!
-
-
Точно верные
- 03 April 2017 (150 messages)
-
Joined.
-
-
Доброе утро, скажите пожалуйста как посмотреть через запрос размер таблиц ?
-
-
-
что-то пустоту выдает
-
там есть поле bytes
-
его прогнать ?
-
а все я ошибся с названием в запросе
-
капец 1 млн 7 мб )
-
-
привет всем!
в лог кликхауса сыпется :
<Information> zen_stats.history_events_v3_2017_02_01 (StorageReplicatedMergeTree): DB::Exception: No active replica has attached part 20170201_20170201_125_125_0 or covering part yet
но такой части нет в обоих репликах в каталогах:
/history_events_v3_2017_02_01$ ls -1
20170131_20170131_197_199_2
20170201_20170201_126_16677_8
20170201_20170201_-21_124_6
detached
и в зукипере тоже нет.
Что это? -
это очень круто)
-
[ClickHouseDB\DatabaseException]
Cannot parse input: expected \t before: 12','2016-10-12 16:00:00',5,3,7,5 -
['2016-10-12','2016-10-12 16:00:00',5,3,7,50,0,0,0,500000,0,0,'','','',0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,118,'0',1,4,1,0,0,'','',0,0,'']\n['2016-10-12','2016-10-12 16:00:00',5,3,7,50,0,0,0,500000,0,0,'','','',0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,118,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',7,3,8,204,16,4,0,2040000,1691,351,'','','',95116479,0,87869,0,205,10,1,1,0,0,0,0,3,0,0,181,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',11,3,6,106,11,1,0,1060000,1176,205,'','','',99999999,0,204999,0,205,205,1,1,0,0,0,0,3,0,0,181,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',5,3,7,22,2,0,0,220000,3113,0,'','','',0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,181,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',9,3,5,11,3,0,0,110000,5606,0,'','','',0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,181,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',14,3,9,5,4,1,0,50000,867,199,'','','',13827234,0,199991,0,199,199,1,1,0,0,0,0,3,0,0,2,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',7,3,8,18,18,0,0,180000,1493,0,'','','',0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',11,3,6,18,18,0,0,180000,1745,0,'','','',0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',13,3,10,2,2,0,0,20000,399,0,'','','',0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,'0',1,4,1,0,0,'','',0,0,''] ['2016-10-12','2016-10-12 16:00:00',9,3,5,2,2,0,0,20000,1954,0,'','','',0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,'0',1,4,1,0,0,'','',0,0,'']\n
-
формат файла такой. может кто сталкивался ?
-
-
а какой формат верный? я просто использую драйвер php от сми2 . получается их конвертор массива в tsv не верный?
-
-
по коду так и есть
-
return $this->insertBatchFiles($table_name,$file_names,$columns_array,'TabSeparated');
-
$sql = 'INSERT INTO ' . $table_name . ' ( ' . implode(',', $columns_array) . ' ) FORMAT '.$format;
-
Joined.
-
Возможна ли поддержка словарей без аттрибутов? Т.е. чтоб содержался только ключ
-
на втором сервере эта ошибка в лог не попадает. Перезапуск кликхауса не помог :)
-
привет всем!
в лог кликхауса сыпется :
<Information> zen_stats.history_events_v3_2017_02_01 (StorageReplicatedMergeTree): DB::Exception: No active replica has attached part 20170201_20170201_125_125_0 or covering part yet
но такой части нет в обоих репликах в каталогах:
/history_events_v3_2017_02_01$ ls -1
20170131_20170131_197_199_2
20170201_20170201_126_16677_8
20170201_20170201_-21_124_6
detached
и в зукипере тоже нет.
Что это? -
версия 1.1.54190
-
-
Joined.
-
500 тыс записей кинул в tsv (написал свой преобразователь из array в csv) и импорт пошел. но 500 тыс за 2.2 сек.. это норм?
-
Imported 3384 records (0.273 seconds)
-
через tsv по http по сети
-
-
норм это или нет - не могу сказать
а про форматы файлов и прочее вроде подробно в статьях на хабре/документации описано
https://github.com/smi2/phpClickHouse/blob/master/doc/smi2/phpClickHousephpClickHouse - php ClickHouse wrapper
-
-
### Import is started ###
Imported 3384 records (0.275 seconds)
Imported 152096 records (11.539 seconds)
Killed -
без компрессии все еще хуже. но что такое killed вообще не пойму
-
Joined.
-
/stat@combot
-
/stat@combot
-
Joined.
-
Подскажите пожалуйста, есть ли какая-то возможность перегонять данные из одной таблицы в другую, кроме INSERT INTO tbl1 SELECT * FROM tbl2 WHERE ...
-
_очень_ медленно и иногда падает по памяти
-
-
Колонку сэмплирования поменяли
-
И первичный ключ
-
-
Посуточно тоже падал, мы блок_сайз потюнили - оно работает, но долго :) Думал есть способ перегнать побыстрее.
-
Быстрее нету
-
-
Joined.
-
/stat@combot
-
-
кто нибудь может встречал такую проблему - Killed при вставке бачей click house пишет
-
память кончилась, OOM Killer пришел и устроил резню
-
память? 4 гига памяти не хватило чтобы вставить 1 млн записей в виде 2 бачей по 500 000 в tsv?
-
Joined.
-
-
-
-
dmesg а где это искать?
-
-
-
Joined.
-
-
Imported 152096 records (2.423 seconds)
-
а после этого Killed
-
когда следующую пачку берет
-
на сервере в данный момент 3.3 гб свободно
-
А запись митапа ведется кем-нибудь?
-
-
-
Но скоро будут выложены записи митапа в Питере, где были похожие доклады.
-
Да мне просто убежать пришлось со второго доклада. Увы.
-
Здорово.
-
Joined.
-
-
Joined.
-
Joined.
-
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
-
-
-
Joined.
-
-
-
-
-
Joined.
-
-
зачтем 5)
-
Joined.
-
-
-
/stat@combot
-
Митап вопрос: Может ли ClickHouse забрать данные из существующей БД или быть для неё слейвом? Например, есть mysql с данными и словарями в отдельных таблицах. Нужно плавно переехать на ClickHouse без остановки существующего сервиса
-
ок зададим
-
-
ребят, комбот из разу в раз возвращает одну и ту же ссылку, можете просто поиском пользоваться и не уведомлять 500+ людей
-
ClichHouse может забрать словари, а данные переносить придется пока вам. Вариантов, как это сделать, много. От чего-нибудь очень простого, до, например, такого: https://wecode.wepay.com/posts/streaming-databases-in-realtime-with-mysql-debezium-kafka
Я думаю, скоро появятся решения, которые садятся на binlog mysql, и читают оттуда данные в КХ. Возможно, на основе debezium. Но готового пока вроде нет.Streaming databases in realtime with MySQL, Debezium, and KafkaChange data capture has been around for a while, but some recent developments in technology have given it new life. Notably, using Kafka as a backbone to str...
-
в PostgreSQL для подобной стримовой логической репликации то же все готово уже
-
в 10-ке так вообще в ядро пойдет логическая репликация
-
Клиент КХ (1.1.54196 на ubuntu 12.04.5) при подключении к удалённому серверу КХ выдаёт ошибку и завершает работу
ClickHouse client version 1.1.54190.
...
Connected to ClickHouse server version 1.1.54189.
...
Poco::Exception: Exception: Cannot load time zone Europe/Moscow
...
и на сервере и на клиенте временные зоны Europe/Moscow
пробовал в команде указать руками —use_client_time_zone Europe/Moscow - не помогло
первый раз такую ошибку вижу, как вылечить? -
-
-
Видимо обновиться до v1.1.54198 https://github.com/yandex/ClickHouse/issues/495#issuecomment-290463001ClickHouse cannot properly detect local timezone · Issue #495 · yandex/ClickHouse
[root@localhost dbms]# clickhouse-server --config-file=/etc/clickhouse-server/config.xml Include not found: clickhouse_remote_servers Include not found: clickhouse_compression /usr/share/zoneinfo/C...
-
-
вопрос не заданный на митапе: какие уровни разграничения прав доступа есть? Могу я ограничить доступ/видимость колонки для пользователя? А таблицу? :). Ну и, конечно, поддерживается ли мандатное разграничение прав?
-
Напомните вечером - если проблема останется - помогу разобраться с моим драйвером, попробуйте режим verbose()
Сейчас у нас в СМИ2 полный факап и паника )))) -
Обновился - не помогло
-
игорь у вас tsv не работает
-
преобразователь
-
А там нет преобразователя
В чем файл записан то инсертится потоком -
А какой версии пакет tzdata на машинах?
-
tzdata 2014i-0ubuntu0.12.04-yandex1 - это на клиенте
-
на серверах tzdata 2016j-2ubuntu0.14.04.yandex2
-
-
Это не связано. Дело в том, что недавно перешли на библиотеку cctz для поддержки таймзон, а ей по какой-то причине не нравится файл zoneinfo для Москвы в старых пакетах tzdata.
-
-
если у вас есть связь 1-n, и объекты со стороны "много" а) известны на момент записи б) являются или value object или их lifetime внутри объекта со стороны 1-, то их можно записывать в nested стуктуры.
это дает воможность 1) строить отчеты по этим объектам from table array join nested as n group by n.attr 2) фильтровать по nested-атрибутам from table where arrayExists((x,..)-> , nested.attr,..) , относительно дешево.
это связано с тем, что Nested с точки зрения кликхауса - это синтаксический сахар поверх столбцов-массивов с одинаковым префиксом. (а также есть некоторые ожидания про одинаковую длину этих массивов, но они проверяются только в рантайме при чтении) т.к. "джойн" в плане поиска соответствия объекта слева и объектов справа уже выполнен при записи, то при чтении запросы перечисленные выше можно выполнять потоково. -
-
у вас в доке описано что есть преобразователи из массива в tsv csv
-
csv не проверял. но tsv формирует не валидный для clickhouse файл. разделя значения запятой. а ожидается табами
-
Вы пишете файл моим драйвером ?
-
Вот примеры https://github.com/smi2/phpClickHouse/blob/master/example/*
Cм. exam12_array.php + exam15_direct_write_result.php -
да вашим драйвером. в доке описана функция преобразования массива в tsv вот она не правильно преобразовывает ну либо я не так что-то делаю. посмотри эту функция
-
FormatLine::TSV
-
-
-
Мы подумаем над этим :) наверное уже позже отпишемся
-
ок. заранее спасибо
-
Да, было бы здорово если бы можно было скачать презентации докладов с митапа
-
-
-
да
-
На обе ссылки? Значит выложилось только на один фронтенд :(
-
Когда выложится - будет доступно по тем же ссылкам :)
-
Вторая работает, спасибо
-
-
-
-
https://github.com/smi2/phpClickHouse/blob/master/example/exam20_FormatLine_TSV.php
Проверил у меня окsmi2/phpClickHousephp ClickHouse wrapper. Contribute to smi2/phpClickHouse development by creating an account on GitHub.
-
Всем привет.
Так получилось, что в таблицу не заложили колонку datetime, есть только date(date) и hour(int).
Подскажите, плиз, как можно из этих двух колонок получить datetime?
Вариант в лоб:
toDateTime(concat(toString(eventDate),' ',if(eventHour<10,concat('0',toString(eventHour)),toString(eventHour)),':00:00'))
Работает очень медлянно -
-
Гениально, большое спасибо!
0.181сек против 1.876сек на моем:)) -
было бы хорошо указать пример в readme на главной странице драйвера принимающего массива. я послал массив поле - значение. а надо было только значение) но спасибо за пример завтра перепишу! )
- 04 April 2017 (91 messages)
-
Joined.
-
-
Joined.
-
-
А как еще его в общем случае можно вычислить?
-
-
Подскажите, а какими инструментами пользуются сейчас аналитики для работы с CH, помимо :
- Redash
- Apache zeppelin
- CHGui от сми2
- Superset airbnb
- Jetbrains IDE
- Jupyter / Notebook
- Grafana-CH
- Console client
? -
-
-
Привет!
Подскажите, пожалуйста, можно ли вернуть реплику из readonly-state без рестарта (проблема похожа на эту: https://groups.google.com/forum/#!topic/clickhouse/puxdy9BAWHE)? -
Проблема, описанная в этой теме Google Groups была актуальна очень давно.
Можно выполнить DETACH TABLE, затем ATTACH TABLE.
Чтобы понять, какой должен быть запрос ATTACH TABLE, выполните сначала
SHOW CREATE TABLE table FORMAT TabSeparatedRaw
В полученном запросе замените CREATE на ATTACH и это будет нужный запрос. -
-
Joined.
-
Да, такой проблемы быть не должно.
Реплика должна сама выходить из readonly состояния.
На всякий случай нужна информация - как долго реплика находится в состоянии readonly, есть ли выполняющиеся сейчас длинные мержи или ALTER-ы, или скачивания кусков другими репликами (можно проверить по использованию сети); что в логе клиента к ZooKeeper-у в /var/log/clickhouse-server/stderr
Также не помешает вывод команды
sudo gdb -batch -ex 't apply all bt' -p $(pidof clickhouse-server) -
должно работать, если будут проблемы (я мог кое что и поломать) создавайте issue или мне пишите
-
Получилось прикрутить с последним драйвером по этой инструкции: http://forge.fiware.org/plugins/mediawiki/wiki/fiware/index.php/Data_Visualization_-_SpagoBI_-_Installation_and_Administration_Guide
-
Интересно будет узнать впечатления - насколько хорошо работает, удобно ли пользоваться.
-
-
-
В логе clickhouse непрерывно появляется такое сообщение:
<Error> void DB::ReplicatedMergeTreeAlterThread::run(): Code: 999, e.displayText() = zkutil::KeeperException: invalid zhandle state, path: /clickhouse/replication/clusterName/shardName/dbName/tableName/columns, e.what() = zkutil::KeeperException, Stack trace:
Видимо, в нём всё дело? stack trace могу показать, если нужно.
По остальным вопросам:
1. По грубой оценке реплика в таком состоянии около двух часов
2. Альтеров быть не должно (хотя в тексте ошибки виден класс со словом Alter в названии)
3. Мерджи могут быть, т.к. идёт вливка данных. Но я пробовал остановить вливку и дождаться, пока в system.merges и replication_queue станет пусто - не помогало.
4. В stderr последние сообщения были 2 часа назад (connection timed out, stale file handle)
5. Команду сам выполнить не могу. Если всё-таки будет нужна - попрошу админов -
Сначала стоит обновиться до последней версии. В ней исправлена ошибка - невозможно переустановить сессию с ZK при очень большом количестве watch-ей (возникает, если на сервере много таблиц).
-
-
-
До последней stable?
-
Да.
-
Есть неудобный способ:
CREATE TABLE table_test
(
date Date,
isp.name Array(String),
isp.ispHash Array(Int64) DEFAULT arrayMap(x -> cityHash64(x), isp.name)
) ENGINE = MergeTree(date, date, 8192)
(несколько столбцов-массивов с общим префиксом до точки в имени, полностью эквивалентны Nested структуре). -
Вокруг составных имён поставьте обратные кавычки (их съел Telegram).
-
спасибо, попробую. В принципе Nested в моем случае не особо нужны, просто хотел поиграться с уменьшением времени запроса:
SELECT ispHash, any(isp), count() as total
FROM table_test
GROUP BY ispHash
ORDER BY total desc limit 20
Если убрать any(isp), то запрос выполняется в два раза быстрее, вот я и подумал, может Nested поможет -
И еще. В Google группе вычитал:
"Существует возможность предагрегировать данные внутри таблицы с помощью AggregatingMergeTree.
Эта возможность не часто используется на практике и я её могу порекомендовать только для особых случаев."
Так использовать или не использовать AggregatingMergeTree вот в чем вопрос! -
Joined.
-
-
Уже довольно много пользователей используют AggregatingMergeTree. Существенных проблем нет.
-
Вариант с Nested выдает такие же результаты по скорости, как и без. Так что оснановлюсь на первоначальном варианте с any(x) и добавлю парочку виюшек с Aggregating и SummingMergeTree
-
Joined.
-
-
Только удалить и создать заново с опцией populate.
(Замечание: если VIEW с GROUP BY, то при создании может не хватить оперативки - тогда придётся указывать настройки для внешней агрегации.) -
-
Да. Но может быть тяжело, если данных много.
-
-
А кто работал с ReDash и Zeppelin в связке с CH, можете поделится опытом - как оно работает ?
Буду признателен) -
-
-
Вопрос как раз про AggregatingMergeTree: есть ли способ сделать что-то типа вот такого: sum(if(key1 = 2, sumMerge(value1), 0)) ? Я получаю ошибку
DB::Exception: Aggregate function sumMerge(value1) is found inside another aggregate function in query.
Есть ли способ это обойти, кроме группировки по key1 и оборачиванию в дополнительный view? Ну и, конечно, без изменения таблицы с прегенерацией этого if'а. -
-
А удобно писать запросы в нем по сравнению с CHgui/Tabix (если работали с ним конечно) ?
Большой датасет и мой tabix кладет, т.к рендер более 10К записей в браузере это оверкилл для JavaScript(dom) -
-
к сожалению с ними не работал, но визуально смотря на CHgui кажется что редаш менее удобен, и может оказаться привлекательным только в случае консолидации данных из разных дата сорсо
-
-
sumMergeIf(value1,key1=2) ?
-
Хм. Реально работает, и, кажется, даже правильно. Круто, спасибо!
-
Ребята провел синтетический тест. вышло 30 тыс всавок в сек. внутри сети по http. у кого-то результаты выше?
-
или может кто скажет как добиться больших результатов
-
-
драйвер я как понял формирует INSERT VALUES(), (), () .. запрос и шлет такую строку на кх
-
да пачка 30 тыс
-
Если через мой драйвер
$db->enableHttpCompression(true);
$db->insertBatchTSVFiles(...)
Это отправляет файловый stream через curl сразу в CH, с сжатием на лету
Если так, то скорость маленькая, может сеть/IO, сравните с консольным curl
Возможно данные "не удобные" для CH -
через метод insert отправлял. передаю массив не ассоциатвный. только значения. в другом параметре insert массив полей. у вас этот метод тоже столько вставок в секунду дает ?
-
все в рамках одной сети одного ДЦ
-
insert медленный, пачками через InsertBatch будет перфоманс
-
А что за проблема ?
-
-
это через insert. правда на сервере пало памяти смог только 1500 кинуть на вставку. не хватает памяти
-
-
а вот tsv . видимо он не очень быстрый на малом количество записей
-
Память жрет при insert т.к читает и хранит в ней, insertBatch не использует память т.к делает stream
т.е грубо из файла поток передаётся сразу на http уровень. -
правильно я выдвинул утверждение на счет tsv ?
-
Imported items 3000 | total: 3000 | time: 0.071 seconds
-
это tsv
-
что-то совсем слабо
-
Батч большой должен быть 50К, что 5 строк вставлять что 5000 - затраты на сеть (http уровень)
-
ну у вас такой же результат на вставку ?
-
Не знаю))) Уже как полгода не мерил и не смотрел )
Мы в среднем получаем 20К/RPS -> php на ура пушит это
наш c++/java ETL еще больше пропихивают....
Совет пробовать: curl из консоли... -
20к в день в секунду ?
-
rps - req.per.sec
-
не понял. можно по русски?
-
ну....
мне даже как-то не ловко говорить в этом чате, что у нас ВСЕГО нагрузка 20 000 запросов в секунду и мы их отправляем в CH.
чувствую себя "малышариком") -
20 000 норм. я видел ваш сайт не думаю что там может быть больше запросов. но 20 000 за какое время вставляются ?
-
Хм... мы не сайт, мы новостная сеть ( урощенно рекламная сеть ) нагрузка=сумме всех основных сми РФ...
Померьте время через консоль через нативный curl, как написано в документации к CH или еще лучше clickhouse-client, получите референс ...
предлагаю не отвлекать 543 мембера, на пхп) -
@maksim_melnichuk я в бенчмарках, но правда под метрики (вставка строки, трех чисел и даты с индексом по строке, дате и одному из чисел), добивался батчами 20 инсертов по 120000 строк в каждом в секунду. То есть 2.4 млн строк в секунду. Но это код на го и хттп с rowbinary был.
-
не пойму как так.. 40+ столбцов два индекса. но результаты совсем плохи. один сервер ?
-
У меня был 1 сервер, да, но относительно неплохой. 2xE5-2620v2, 128gb ram. Половина цпу правда кушалась генератором нагрузки
-
Кликхаус любит большие батчи. И возможно пхп драйвер так себе на вставку
-
-
я поставил на не очень мощный по сравнению с вашим. всего 4 гига оперативки. но по htop не вижу нагрузки совсем. может играет еще роль отправляющий сервер он вообще 512 mb ram
-
-
-
-
-
ну консольный клиент не вариант. т.к. мы будем слать запросы на отдельный сервер по http а не внутри сервера кх. как сеть можно проверить ?
-
так прикольно)) просто привел данные к типу. time() поменял на date и увеличилась скорость))
-
Imported items 165000 | time: 1.013 seconds
- 05 April 2017 (57 messages)
-
Нас устраивает redash. Привлекает в первую очередь возможностью работать в python и pandas напрямую, используя несколько источников данных. Я достойных аналогов (даже платных) не нашел.
-
А кто работал с ReDash и Zeppelin в связке с CH, можете поделится опытом - как оно работает ?
Буду признателен) -
И на момент нашего переезда на кликхаус аналогов вообще не было, а коннектор для редэша я написал за полдня.
-
А redash умеет в jdbc?
-
вот во что умеет https://redash.io/help-onpremise/setup/supported-data-sources-options-reqs.html (облачная) https://redash.io/help/aboutrd/aboutrd.html#supported_data_sources (селфхостед)What's Redash? · Redash Help Center
Learn more about Redash - why we built it, main features, supported data sources, privacy and security.
-
О спасибо
-
Сейчас как раз выбираю, что лучше
-
вроде бы у них облачная и селфхостед версии в плане источников данных не отличаются, наверно доку не обновляли давно. вот здесь есть весь список источников: https://github.com/getredash/redash/tree/master/redash/query_runner
-
Всем привет!
Пытаюсь сделать MATERIALIZED VIEW типа AggregatingMergeTree, в SELECT'e при создание делаю countIfState(event='request') as request_count
потом делаю SELECT sumMerge(request_count) FROM report и получаю
DB::Exception: Illegal type AggregateFunction(countIf, UInt8) of argument for aggregate function sumMerge.
Получается нельзя использовать countIfState и sumMerge ? -
С дашбордами разобрались, а с ETL ? ) Есть идеи как из баз тянуть данные в CH?
-
не с КХ, а с другими базами, могу сказать, если есть возможность, лучше писать свое, ибо теущие инструменты вечно на грабли наступают
-
countStateIf. У меня работает запрос с sumStateIf.
-
-
Привет! Подскажите пожалуйста, могу ли я изменить значение, возвращаемое аггрегатной функцией (например, countMerge()) при селекте из materialized view без вставки данных в исходную таблицу?
Использую AggregatingMergeTree
Судя по доке, "В таблицу, содержащую столбцы типа AggregateFunction невозможно вставить строчку обычным запросом INSERT, так как невозможно явно указать значение типа AggregateFunction. Вместо этого, для вставки данных, следует использовать INSERT SELECT с агрегатными функциями -State."
Пробовал что-то нашаманить с INSERT SELECT, получил There is no default value for AggregateFunction data type -
-
-
Добрый день!
Есть пара платиновых вопросов, а именно:
1. Нужна таблица, в которой будет храниться статичный список емейлов + имен, какой движок использовать, mergetree?
2. В эту же таблицу нужно будет из текстового файла перегнать миллион-другой записей, как правильнее использовать инсерт? Пачками по сколькото штук или раз в секунду? -
-
Да
-
А какой будет паттерн использования этой таблицы? Возможно её вообще имеет смысл как словарь подключить.
-
Справочник, даешь емейл — получаешь связанную с ним информацию
-
-
Ну да, кладёте файлик, например в формате TabSeparated, конфигурируете внешний словарь с layout complex_key_hashed, ClickHouse на старте или при первом обращении загрузит всю таблицу в оперативку (для пары миллионов записей должно быть ок). Связанную информацию получаете с помощью функций dictGet*. Всё быстро и хорошо работает ;)
-
-
Всем добрый день, подскажите плиз, куда посмотреть. При вставке данных в replicatedmergetree в логах реплик только одного шарда появляются вот такие вот записи "<Warning> store.store_log_local (StorageReplicatedMergeTree, CleanupThread): Couldn't remove 20170404_20170404_635_635_0 from ZooKeeper: no node" - при этом количество данных в репликах правильное и вообще количество данных правильно и нужное. в логах реплик второго шарда - тишина
-
-
-
Тогда можно попробовать словарь с лейаутом complex_key_cache (часто используемые записи будут кэшироваться с вытеснением), но данные придётся загрузить в таблицу (MergeTree, так как она с индексом, или вообще в какую-нибудь MongoDB, ведь ClickHouse не так хорош для Key-Value нагрузки).
-
Joined.
-
-
а про это кто-нибудь расскажет?:)
-
+1 , тоже очень волнует этот вопрос
-
скажите плиз как сгруппировать по дню данные?
-
Пока есть только readonly и не readonly пользователи.
-
GROUP BY event_date
? -
они на весь экземпляр работают или огранмчены базой?
-
*ограничены
-
Добрый день! Подскажите, кто-то собирал ODBC-драйвер под RHEL/Centos 6 ?
-
точно
-
а что значит DB::Exception: Limit for result rows exceeded: read 2227 rows, maximum: 500
-
Joined.
-
где это ограничение стоит ?
-
-
-
-
У пользователя можно задать <allow_databases>...</allow_databases>
-
понял, спасибо большое
-
возможно. напрямую через клиент все норм) спасибо
-
а не подскажите как размер таблицы узнать ?
-
-
-
-
спасибо))
-
-
в тестах/доке не нахожу: а можно как-то mutlipart/form-data передать запрос и файл с внешними данными? беспокоюсь только что запрос может быть слишком длинный и не влезет в query string (установлен ли в CH лимит, кстати?)
-
про лимит вопрос снимаю, в доке нашел про 16кб
-
Насколько я помню, параметры (в том числе запрос) нет возможности передать в mutlipart/form-data. То есть, если передаются внешние таблицы, то запрос придётся указать в параметре URL.
- 06 April 2017 (159 messages)
-
-
Помогите разобраться. Необходимо получать сумму значений в зависимости от фильтров. Т.к. фильтры вставляются в запрос на лету, то он выглядит следующим образом
SELECT sum(column)
FROM table
WHERE
Date = today()
AND ($val = 1 OR Field = $val)
AND ($val2 = 1 OR Field2 = $val2)
Если $val = 1 - значит фильтровать данные не нужно. По идее, условие сразу должно вернуть true и не влиять на производительность запроса. Но это влияние есть и оно весьма заметно.
Есть у кого-то идеи, как это можно оптимизировать? -
-
пробовал
-
без разницы
-
А, вы ожидаете, что Field = $val не будет вычисляться
-
Сейчас такое не реализовано, оптимизатора запросов по факту почти нет, к сожалению.
-
Производительность проседает так как выражение все равно будет вычисляться
-
Просто убирайте весь этот AND
-
Не могу убрать AND, т.к. запрос посылается из графаны и там он может быть только в одном варианте.
-
А этот $val как задается?
-
Может, туда тупо писать "Field = value" ?
-
это template значение, которое подставляется в запросы. В нем может лежать идентификатор, например
-
Привет всем.
Подскажите кто нибудь рассматривал\пробовал\использует cehp в качестве сторажда под CH ?
У нас есть 2х10Gb сеть, на себя от себя.
Вообще как такой вариант?
Данных где-то около 10-20ТБ в месяц приходит.
выборки из данных в рамках недели до двух месяцев. -
clickhouse
вычисляет все аргументы and/or, все аргументы if, итд. т.к. они векторизуются и вычисляются пачками и потом пачками над ними выполняются последующие функции. мы такие вещи оптимизируем перед генерацией запроса: вычисляем выражения, известные статически, выбразываем бесполезные условия, итд. правда в вашем запросе это не помогло бы, т.к. в зависимости от строки таблицы каждое из условий может оказаться значимым, это можно только при выполнении оптимизировать. -
Joined.
-
Joined.
-
-
Мы не пробовали.
Интересно, какой получается throughput последовательного чтения с Ceph? А если со всех серверов сразу читать?
А какая latency на операции типа создания, удаления, переименовывания файлов?
И какая latency и throughput по случайным чтениям? -
-
-
ребят может кто подскажет как бэкап сделать всей базы?
-
в mysql это делалось обычным mysqldump. тут только по одной таблице?
-
Если будем пробовать - думаю смогу отписаться что получилось
-
По-эффективному через FREEZE PARTITION для каждой партиции, по-простому
clickhouse-client -q 'SELECT * FROM ... FORMAT Native' > dump.bin
, еще можно доп. реплику поднять и выключить после наливки -
как раз таки репликами мне кажется вариант не очень. мне надо собрать бэкап базы и положить на s3 aws предварительно сжав gzip
-
-
у нас отдельный сервер mysql для статистики. написали скрипт бэкапов на s3. делается sql пакуется в gzip заливается в облако. плохо?
-
по простому хреновая затея)) т.к. select кладет все содержимое в память а потом пишет в файл. при большом количестве записей не хватит памяти. походу
-
ну можно кусками выгружать. по тому же месяцу, чтобы помещалось в память
-
-
freeze partition неплохо да. я вот не пойму до сих пор через select делается дамп и уже 25 гигов. а партициями там вообще мало места занимает. там все данные?
-
в смысле?
в одной партиции данные одной таблицы за один месяц -
вот data папка 464 мб. а если выгрузить в tsv то получится 21 гб ))
-
Документация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
-
класс. то есть тогда писать скриптик надо - получаем список таблиц в базе данных. делаем партишены. пакуем в архивы закидываем бэкап куда необходимо?
-
по другому никак?
-
Обычный SELECT без GROUP BY, ORDER BY и т. п. использует небольшое ограниченное количество памяти. Он не формирует результат в памяти, а отдаёт его клиенту потоково.
-
Joined.
-
Ребят, подскажите по tutorial.
Там есть такой запрос:
SELECT
DestCityName,
sum(Year = 2014) AS c2014,
sum(Year = 2015) AS c2015,
c2015 / c2014 AS diff
FROM ontime
WHERE Year IN (2014, 2015)
GROUP BY DestCityName
HAVING c2014 > 10000 AND c2015 > 1000 AND diff > 1
ORDER BY diff DESC
в нем в функцию sum передается условие как я понял, но не указывается что суммировать. Как он работает? В доках про условия внутри функции sum ни слова( -
-
в доке это описано вот тут
https://clickhouse.yandex/reference_ru.html#Комбинатор%20-If.%20Условные%20агрегатные%20функцииДокументация ClickHouse | Документация ClickHouseClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
-
-
native 13 gb tsv 22 gb. какой самый компатный ? может есть формат который оставляет родную струтуру в 4xx mb ?)
-
-
Так и должно быть. Дело в том, что все логические операции и сравнения возвращают значение типа UInt8, равное 0 или 1. Далее эти значения суммируются.
-
Это, приблизительно, получится, если дамп в формате Native ещё сжать.
Можете сжать gzip или родным clickhouse-compressor (второе быстрее). -
-
Аааа, вот оно как. Красивый вариант.
-
у меня вообще 230 мб получилось))) еще лучше!
clickhouse-compressor установил. но он включается для прилетающих данных на сервер как написано в доке. а как его заюзать при выгрузке в файл? -
-
а в моем случае я не url шлю а на клиент
-
clickhouse-client -q 'SELECT * FROM statistics.banner_history_segments FORMAT Native' > dump2.bin
-
понял
-
ребят это шок)) компрессор чудо
-
-
7 секунд чтобы собрать все данные и положить в архив в файлик)
-
спасибо!!
-
если кому интересно как я делал бэкап
curl 'http://localhost:8123/?database=statistics&compress=1' -d 'SELECT * FROM banner_history_segments FORMAT Native' > data.bin -
gzip -c data.bin > dump.gzip
-
22 млн записей. 7 секунд создание файл + 7 секунд gzip
-
Я чет еще немного подумал, а почему не countIf ?
-
-
Как я делал с постгресным драйвером:
sudo apt-get install -y unixodbc
sudo apt-get install -y odbcinst
sudo apt-get install -y odbc-postgresql
В /etc/odbc.ini:
[DEFAULT]
Driver = myconnection
[myconnection]
Description = PostgreSQL connection to norma
Driver = PostgreSQL Unicode
Database = norma
Servername = 10.... (твой хост)
UserName = uname
Password = pwd
Port = 5432
Protocol = 9.3
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ConnSettings =
<dictionary>
<name>table_name</name>
<source>
<odbc>
<table>postgresql_table</table>
<connection_string>DSN=myconnection</connection_string> <!— может потребоваться UID=norma;PWD=norma;, но по идее не должно —->
</odbc>
</source>
<lifetime>
<min>300</min>
<max>360</max>
</lifetime>
<layout>
<flat/>
</layout>
<structure>
<id>
<name>id</name>
</id>
<attribute>
<name>some_column</name>
<type>Int32</type>
<null_value>-1</null_value>
</attribute>
...
</structure>
</dictionary> -
Это будет то же самое. Хотя сейчас sum(cond) всё-таки работает оптимальнее, но в дальнейшем сделаем, чтобы вообще не было разницы.
-
Спасибо
-
спасибо, ценная инфа.
-
Можно еще бинарник из пакета clickhouse-compressor поставить для таких целей
-
а зачем? в чем плюс?
-
/var/www/html/build# cat data.bin | POST 'http://localhost:8123/?query=INSERT INTO statistics.test FORMAT Native'
Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Exception: Too large string size., e.what() = Exception
каким еще способом можно импортнуть дамп ? -
А опцию decompress не забыли?
-
забылся, работае)) жалко прогресс не показывает. прошлый раз показывало
-
-
Может кто скажет как схему выгрузить таблицы?
-
там файлики есть у кликхауса со схемой
-
desc table table_name
show create table table_name -
https://clickhouse.yandex/reference_ru.html#SHOW CREATE TABLEДокументация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
SHOW TABLES FROM statistics LIKE 'banner_history_segments' INTO OUTFILE test.txt
Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 73 (line 1, col 73): test.txt
/*TABIX_QUERY_ID_vKOdebem13K6Ub8_()*/, expected opening single quote, e.what() = DB::Exception\n -
как в файл выгрузить схему чтобы потом её заново восстановить ?
-
-
show create table table_name вот это самое то
-
и тупо скинуть в файлик )
-
спасибо
-
Индекс всё-равно будет использоваться.
-
В чем тогда может быть ошика?
Processed rows разный. И для первого запроса processed = количеству
:) select count(*) from some_table where toYear(clickhouse_date) = 2016 and toMonth(clickhouse_date) in (10,9)
┌──count()─┐
│ 43349387 │
└──────────┘
→ Progress: 252.86 million rows, 505.71 MB (1.28 billion rows/s., 2.57 GB/s.)
1 rows in set. Elapsed: 0.197 sec. Processed 252.86 million rows, 505.71 MB (1.28 billion rows/s., 2.57 GB/s.)
:) select count(*) from some_table where clickhouse_date between '2016-09-01' and '2016-10-30'
┌──count()─┐
│ 42621496 │
└──────────┘
1 rows in set. Elapsed: 0.023 sec. Processed 43.35 million rows, 86.70 MB (1.88 billion rows/s., 3.76 GB/s.) -
Жаль, почему-то в этом случае плохо сработало. Использование индекса, в принципе, поддерживается для такого вида функций. Подробнее сейчас не могу сказать.
-
-
они отвечают за сегментирование данных на чанки, чтобы кх при запросе просто откидывал ненужные чанки, ускоряя сканирование. т.е. если у нас MergeTree с индексом date - будут эффективно выполняться запросы на ограниченный набор дат, за счёт того что чанки с датами в другом диапазоне просто не будут читаться. по идее, он должен грамотно учитывать функции, по крайней мере у меня во всех запросах используется фильтр toDate(eventDate) BETWEEN 'someDataStr' AND '.....' и это не вызывает проблем
-
Это ясно и понятно. Неясно почему на первый взгляд при одинаковом запросе возвращается разный результат
-
-
-
-
-
-
-
-
-
-
Документация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
-
-
Кстати Андрей попробуй явно указать.
-
-
-
-
-
-
-
-
-
:) select count(*) from osa_posdata where (toMonth(clickhouse_date) = 9 or toMonth(clickhouse_date) =10) and toYear(clickhouse_date) = 2016
┌──count()─┐
│ 43349387 │
└──────────┘
1 rows in set. Elapsed: 0.045 sec. Processed 43.35 million rows, 86.70 MB (971.86 million rows/s., 1.94 GB/s.)
:) select count(*) from osa_posdata where toMonth(clickhouse_date) in(10,9) and toYear(clickhouse_date) = 2016
┌──count()─┐
│ 43349387 │
└──────────┘
1 rows in set. Elapsed: 0.159 sec. Processed 252.86 million rows, 505.71 MB (1.59 billion rows/s., 3.18 GB/s.) -
-
-
-
-
-
-
-
Мы в Метрике сравниваем вторым способом:
- в WHERE указывается OR для обеих периодов,
а затем все агрегатные функции считаются с условиями для одного и для второго периода. -
Как это? Если сравнение периодов, то условия то одинаковые должны быть. Только периоды различаются.
-
-
Но ведь это olap, внутри быстрее посчитать ))
-
-
-
-
-
А я правильно понимаю что вот тут агрегация заняла 8 сек?
2017.04.06 22:27:01.924306 [ 967 ] <Trace> Aggregator: Merging aggregated data
2017.04.06 22:27:02.190420 [ 967 ] <Trace> Aggregator: Aggregation method: keys256
2017.04.06 22:27:10.879413 [ 967 ] <Trace> Aggregator: Aggregated. 36840327 to 921756 rows (from 1018.877 MiB) in 13.021 sec. (2829352.510 rows/sec., 78.250 MiB/sec.)
2017.04.06 22:27:10.879509 [ 967 ] <Trace> Aggregator: Merging aggregated data -
если делать через sumIf + group by то разные условия записать в метрики не проблема. единственная проблема которую я помню, помимо несколько длинных запросов которые получаются в нашем случае, это невозможность сравнить периоды по времени так, чтобы первый день первого периода попадал в строку с первым днем второго периода, ит.д.
-
-
я правильно понимаю что мы говорим о запросах вроде такого?
select
some_field,
sumIf(tot_sum,toMonth(clickhouse_date) = 9) as sum1,
sumIf(tot_sum,toMonth(clickhouse_date) = 10) as sum2
from some_table
where
toYear(clickhouse_date) = 2016 and (toMonth(clickhouse_date) = 9 or toMonth(clickhouse_date) =10)
group by
toMonth(clickhouse_date) -
-
-
а вы прям руками проставляете PREWHERE? Я читал что оптимизатор уже достаточно умен для такого
-
да вот меж двух огней и мечусь) JOIN или sumIf)
-
-
-
ну, для примера сходного с метрикой. У меня есть сайт, и я хочу сравнить количество посещений в 9 месяце с количеством в 10
-
-
аааа, все, дошло. Да, агрегация по some_field. Верно.
-
-
-
-
нене, это именно аналог сайта/старницы сайта в метрике
-
-
с prewhere скорее нет чем да. я в принципе для нашей схемы подтянул некую оценку кардинальности колонок, которую можно было бы использовать в некоторых случаях, но наши медленные запросы медленные не поэтому.
-
-
мы планы запросов дизайнили из идеи "один отчет - один запрос", сравнение казалось бы так сделать нельзя, но оказалось что можно. для случая одинаковых периодов но разных фильтров данные читаются один раз, что быстре двух запросов. для соседних периодов разницы быть не должно.
-
для каждой колонки есть распределение количества ее значений, в дне, в нескольких днях по различным например клиентам. из этого во-первых можно оценивать "среднюю в вакууме" тяжесть запроса - количество ключей в group by, доля данных которая останется после фильтра column=value, итд. такие метаданные, которые оптимизатор бд обычно собирает в индексы или еще куда чтобы использовать при оптимизации.
-
-
Хм. Вот кстати. Как в запросе для каждого запрашиваемого числового значения получить его процентное отношение к прошлому периоду? т.е., на сколько процентов упали\поднялись посещения\клики\продажи за этот день относительно вчерашнего\на прошлой неделе\в прошлом месяце?
-
так это вроде простая арифметика, у нас проценты не считаются. Считаются разницы и вектор разницы. Вот так:
(Sum_sales_rub1-Sum_sales_rub2) as Growth_abs,
(Sum_sales_rub1-Sum_sales_rub2)/greatest(Sum_sales_rub2,1) as Growth_rel -
-
-
-
Доброго времени суток! Есть ли разница в порядке указания колонок в индексе? Т.е если создать таблицу с индексом (c1, c2). То при при фильтрации по полю c2 будет ли использоваться индекс? Или он будет использоваться только при фильтрации по c1, по (c1 и с2) ?
-
Сделал таблички типа ReplacingMergeTree с индексами (с1,с2) и (с2,с1) соответственно. залил в них одинаковые данные. Запрос с фильтром по с1 был значительно менее ресурсоемким к первой табличке (где с1 указано в индексе на первой позиции), а запрос по с2 соответственно ко второй таблице. Осознал, что не понимаю как работают индексы в CH, прокомментируйте пожалуйста.
-
- 07 April 2017 (69 messages)
-
Добрый день! Подскажите, кто-то собирал ODBC-драйвер под RHEL/Centos 6 ?
-
там ж вроде из пакета ставится с полпинка
-
не совсем, как минимум в rhel6 нет gcc5
-
-
а POCO-либы ставили из rpm? или сами собирали (если да, то каким gcc?)
-
Если никто не против, хотел бы вернуться к вопросу дашбордов, в частности, помимо zeppelin и redash, пользуется кто metabase?
А второй момент, кто с редашем, как вы его в проде используете, если там куча багов на уровне постгресной базы? -
Мы пользуемся Airbnb Superset
-
Спасибо, посмотрю
-
Я когда думал собирать под центось6, собрал шланг. Это оказалось проще
-
-
Собранный с помощью clang odbc-драйвер заработал без проблем? (Да, похоже, что придется переезжать на Centos 7)
-
-
Я кх не собирал под цо6
-
-
-
-
Ну на самом деле нет смысла имхо сидеть на 6ой. Даже 7ая слишком старая
-
Скажите а можно ли настроить такую схему- есть основной сервер статистики на кх. есть доп. сервер на котором дублируется статистика из основного сервера. но запросы на вставки идут на основной. а дополнительный просто клонирует данные основного. Зачем? дополнительный дев сервер хотим подключить на дополнительный сервер статистики для отладки. Ну и что будет если миграции будем выполнять? надо бы чтобы они на двух серверах применялись..
-
-
Для http например так https://github.com/buger/goreplayGitHub - buger/goreplay: GoReplay is an open-source tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data. It can be used to increase confidence in code deployments, configuration changes and infrastructure changes.
GoReplay is an open-source tool for capturing and replaying live HTTP traffic into a test environment in order to continuously test your system with real data. It can be used to increase confidence...
-
репликация?
-
возможно. нооо если поменяем структуру таблицы на доп. сервере. что будет в итоге?
-
например удалим столбец протестируем что все работает и зальем код на прод. нам важно понимать что код с изменной структурой базы работает. а затем применять миграцию на проде и заливать код
-
Что вы используете в качестве клиента?
-
ну у нас php приложение. драйвер пхп выбирает с базы кх. есть еще доп. инструменты для миграций которые реализовали сми2. ну можно и без них просто слать по curl запрос
-
-
-
-
-
-
-
-
может все таки проще создать бэкап положить в облако. и на другом сервере его импортить каждый день?
-
хотелось бы автоматизировать процесс
-
Всем привет :) У нас есть поток событий, каждое — с идентификатором пользователя (`dt | eventId | userId`) Требуется: узнать сколько раз он взаимодействовал с системой за неделю (`weeknum | userId | sessionsCount`). На вид — задача изоморфна получению отдельных визитов из хитов.
Может ли кто-нибудь рассказать алгоритм, как в метрике (или не в метрике?) получаются визиты из хитов, или как в кх сделать такой запрос? Хочется понять сам принцип. -
-
Внутри ClickHouse такой возможности нет, но всегда можно закрыть порты с помощью iptables.
9000, 8123 - закрыть на запись и чтение.
9009 - закрыть репликацию. -
-
В Метрике вычисление сессий - довольно сложный алгоритм и отдельная структура данных, разработанная специально для этого. Это делается снаружи ClickHouse.
-
удалось побороть "No thread available" на словарях?
-
В интернетах нашёл пример запроса, который делает прямо то что нужно (идеалогически) http://sqlmag.com/site-files/sqlmag.com/files/archive/sqlmag.com/content/content/23714/listing_03.txt => site_url| caller_ip | start_session | end_session Но возможностей кх не хватает, чтобы его запустить :(
-
Как правильно мигрировать данные при изменении схемы (включая изменение индекса)? Хочу в приложении своем добавить потенциальную возможность такое делать.
Я правильно понимаю что нужно делать следующее:
1. Rename старой
2. Создавать новую таблицу с правильным и исправленной схемой
3. Делать SELECT INTO в новую таблицу из старой
4. Удалить старую
? -
Алексей не могли бы вы посоветовать более правильный способ организации дев прод серверов. на прод ui + прод кх само сабой понятно. а вот дев + доп сервер кх - хотелось бы на доп. сервере чтобы всегда были данные прод сервере кх. но с возможностью применить какую либо миграцию (удалить столбец к примеру) - все отладить и тогда уже на проде кх её выполнить и залить код ui
-
-
Мы используем тестовую среду с подмножеством данных. Тестовая среда полностью независима от продакшена. Но программы, которая записывают данные, записывают одновременно все данные на продакшен и часть данных на тестовую среду.
-
да очень плохо, на масштабах 100 и более гигабайт данных нормально не работает
юзайте xtrabackup хотябы вместо mysqldump -
К сожалению, пока нет. Вот, можно прям в коде поправить https://groups.google.com/forum/#!topic/clickhouse/VNkWeL468mw , но это печальненько
-
ага, нашел уже. у меня ровно 16 словарей получается. все odbc
-
Можно решить задачу, реализовав поддержку опционального параметра в конфиге - odbc_dictionary_source_session_pool_size. Это тривиальное изменение, примерно на 20 минут времени. Пришлёте PR или самим придётся сделать?
-
ну при изменении структуры таблицы данные писаться ведь не будут? вы наверное имел ввиду репликацию из основного сервера на тестовую среду. важно понять как лучше нам организовать такой процесс чтобы данные всегда были актуальны но при необходимости мы могли поменять какие-то поля переписать код для работы с этими полями оттестировать и затем уже выложиь на прод код + миграцию на прод кх
-
пока только мысли сделать бэкап положить на S3 написать скриптик который каждый день будет обновлять базу. ну у нас будет сутки чтобы там поиграться пока не вернется структура как на проде)
-
-
пока никак. но думаю сделать бэкап компрессором потом запаковать закинуть на S3, затем из S3 берем распаковываем декопрессию делаем и импортим в базу раз в сутки (на кроне) пока такая мысль
-
Там конвейер обработки, первая программа пишет "сырые" данные на ТС и на продакшен, а потом всё это обрабатывают и пишут другие программы, которые выкладываются сначала на ТС, а потом на продакшен.
-
начал смотреть исходники, не совсем понял. по дефолту у SessionPool maxSessions = 32, почему тогда можно только 16 словарей? еще заметил, что сессия никогда не отдается в пул, т.е. всегда висит кол-во соединений равное кол-ву словарей. для постгреса без использования всяких баунсеров это может быть накладно, может как-то этот момент переделать что бы сессия всё таки возвращалась в пул? ведь по сути она нужна только когда надо обновить словарь.
-
все равно не особо понял принцип работы. видимо пока сделаю дампами по крону. может еще скажите есть ли возможность сделать дамп "всей" базы? или только таблиц по отдельности?
-
Я пока тоже не до конца понял. Ведь SessionPool создаётся для каждого словаря (ODBCDictionarySource). То есть, для каждого словаря максимум 32 соединения (по факту, для flat, hashed словарей нужно одно), а при чём тут количество словарей - не ясно. Надо смотреть глубже.
-
Только по отдельности.
-
а в будущем планируется ?
-
Пока нет. Есть отдалённо похожая задача - восстановление реплики целиком (на пустом сервере). Сейчас приходится выполнять ATTACH TABLE для каждой таблицы для восстановления или копировать .sql файлы. Вот после этой задачи подумаем, чтобы сделать возможность полного бэкапа.
-
понял. спасибо
-
может тогда в пн я сделаю issue на гитхабе, с кейсом как воспроизводить, данными что просил Виталий в гугл группе, что бы про это не забыли?
-
Давайте. Да, вывод gdb очень поможет.
-
-
-
Joined.
-
Joined.
-
GitHub - lomik/carbon-clickhouse: Graphite metrics receiver with ClickHouse as storage
Graphite metrics receiver with ClickHouse as storage - GitHub - lomik/carbon-clickhouse: Graphite metrics receiver with ClickHouse as storage
-
GitHub - lomik/graphite-clickhouse: Graphite cluster backend with ClickHouse support
Graphite cluster backend with ClickHouse support. Contribute to lomik/graphite-clickhouse development by creating an account on GitHub.
- 08 April 2017 (32 messages)
-
А есть ссылки ?
-
Тьфу есть ссылки на graphouse ?
-
Нашел спасибо
-
Интересно чем он лучше или хуже того на что я выше ссылки кинул :)
-
А из-за чего может появляться DB::Exception: std::bad_cast? Вставляю из одной распределенной таблицы в другую через INSERT INTO t2 SELECT ... FROM t1 с конвертацией в Nullable-колонки. Как можно посмотреть ошибку подробнее через клиент?
-
-
Оно на java черт возьми
-
-
И сильно ли оно лучше будет чем influxdb?
-
Оно по функционалу отличается
-
Ага, это минус
-
Графхаус не знаю, но ломиковский вариант в single server варианте на запись примерно в 20 раз быстрее
-
-
Спасибо, посмотрю тода.
-
-
как clickhouse настроить в распределенном режиме в рамках одного сервера?
-
-
Всем привет
подскажите пожалуйста
я правильно понимаю что для хранения UUID наиболее эффективным является тип FixedString(16) ?
вопрос
если я преобразовал UUID в FixedString(16) и там есть 0x0A или 0x0D
как мне их правильно заэкранировать в CSV ?
заменить однобайтовую последовательность на \r или \n? -
а почему при парсинге CSV строки без кавычек то \n считается как два символа а не как один?
-
Привет.
> Всем привет
подскажите пожалуйста
я правильно понимаю что для хранения UUID наиболее эффективным является тип FixedString(16) ?
Да.
> если я преобразовал UUID в FixedString(16) и там есть 0x0A или 0x0D
как мне их правильно заэкранировать в CSV ?
заменить однобайтовую последовательность на \r или \n?
В CSV правила экранирования совсем не такие, как в TSV.
В CSV надо помещать это значение в кавычки и внутри заменять каждую кавычку на две кавычки. При этом, 0A, 0D остаются как есть.
Для сравнения, если писать в TSV, то вам надо было бы писать значение не в кавычках, и внутри, экранировать символы - перевод строки, таб и бэкслеш с помощью последовательностей \n, \t, \\. -
несколько clickhouse серверов ? можно чуть подробнее. спасибо
-
-
для начала не очень задача понятна, для тестов?
-
задача настроить в распредленном режиме
-
А зачем это делать в рамках одного сервера?
-
я так понимаю надо 3 сервера. два с mergetree с одинаковыми данными и репликацией между ними + один принимающий сервер который распределяет ?
-
Так не нужно делать
-
В кх мультимастер система, любой сервер может принимать запросы
-
то есть он превоначально распределенный?
-
*первоначально
-
нам надо сделать в виде кластера. несколько серверов
-
чтобы распределять нагрузку
- 09 April 2017 (82 messages)
-
А это норм после апгрейда
-
sudo service clickhouse-server restart
Include not found: clickhouse_remote_servers
Include not found: clickhouse_compression
Stop clickhouse-server service:
DONE
Start clickhouse-server service: Include not found: clickhouse_remote_servers
Include not found: clickhouse_compression
Path to data directory in /etc/clickhouse-server/config.xml: /var/lib/clickhouse/
No directory, logging in with HOME=/
DONE -
?
-
работает вроде ОК, но ошибки пугают :)
-
-
Да, вы просто строите clickhouse кластер и при расчётах используются ресурсы всех серверов. (При правильном градировании конечно)
-
А можно узнать зачем?
-
Вы var отдельно монтируете?
-
А почему mysql в варлиб тебя не интересует?)
-
Потому что это mysql
-
а где можно глянуть как настроить такой кластер ?
-
В документации. Либо в tutorial. Искать по слову кластер/zookeeper
-
ок в понедельник буду разбираться. спасибо)
-
-
-
Еще статья на хабре есть: https://habrahabr.ru/company/smi2/blog/317682/
-
Есть две секретные функции:
finalizeAggregation:
/** Принимает состояние агрегатной функции. Возвращает результат агрегации.
*/
runningAccumulate:
/** Весьма необычная функция.
* Принимает состояние агрегатной функции (например runningAccumulate(uniqState(UserID))),
* и для каждой строки блока, возвращает результат агрегатной функции по объединению состояний
* от всех предыдущих строк блока и текущей строки.
*
* То есть, функция зависит от разбиения данных на блоки и от порядка строк в блоке.
*/
Пример использования:
:) SELECT EventDate, finalizeAggregation(state), runningAccumulate(state) FROM (SELECT EventDate, uniqState(UserID) AS state FROM test.hits GROUP BY EventDate ORDER BY EventDate)
SELECT
EventDate,
finalizeAggregation(state),
runningAccumulate(state)
FROM
(
SELECT
EventDate,
uniqState(UserID) AS state
FROM test.hits
GROUP BY EventDate
ORDER BY EventDate ASC
)
┌──EventDate─┬─finalizeAggregation(state)─┬─runningAccumulate(state)─┐
│ 2014-03-17 │ 36613 │ 36613 │
│ 2014-03-18 │ 36531 │ 54710 │
│ 2014-03-19 │ 36940 │ 69953 │
│ 2014-03-20 │ 36462 │ 83923 │
│ 2014-03-21 │ 35447 │ 96823 │
│ 2014-03-22 │ 31555 │ 108564 │
│ 2014-03-23 │ 31200 │ 119494 │
└────────────┴────────────────────────────┴──────────────────────────┘ -
-
-
Буду рад :)
-
Если результат состоит из нескольких блоков (большой), то это состояние будет сбрасываться каждый блок. Возможно, мы это исправим, и можно будет расчитывать, что при вызове после ORDER BY всё будет Ok.
-
-
-
Сейчас это не гарантируется. Обычно размер блока - max_block_size. Но в некоторых запросах блоки после ORDER BY получаются маленькими.
-
-
есть правила расположения файлов на файловой системе, например man hier и лучше им соответствовать.
-
В opt давно ставится софт, и явно это надо не в либы ставить...
-
/opt
This directory should contain add-on packages that contain static files.
/var/lib
Variable state information for programs.
по-моему для хранения бд и мета-инфы вторая больше подходит -
Вроде как речь шла про сам сервер, а не файлы БД
-
БД вообще предпочитаю в отдельный маунт
-
-
-
-
в devzen упомянули КХ в связи с этос статьей. https://www.percona.com/blog/2017/03/17/column-store-database-benchmarks-mariadb-columnstore-vs-clickhouse-vs-apache-spark/. @milovidov_an хотел бы поучаствовать в одном из следующих эпизодов?Column Store Database Benchmarks: MariaDB ColumnStore vs. Clickhouse vs. Apache Spark - Percona Database Performance Blog
Column store database benchmark results, comparing the query performance of MariaDB ColumnStore v. 1.0.7 (based on InfiniDB), Clickhouse and Apache Spark.
-
-
Очень похоже, да 😬
-
Я все еще жду сравнение с последними версиями Vertica
-
Скажите пожалуйста есть ли другой способ выгрузить данные в кх без cat, заканчивается память т.к. при cat все данные в памяти оперативной хранятся и не получается выгрузить дамп больше 100 млн записей ((
cat table_data.tsv | clickhouse-client —database=statistics —query="INSERT INTO table FORMAT TabSeparated"; -
это точно не изза cat
-
clickhouse-client —database=statistics —query="INSERT INTO table FORMAT TabSeparated" < table_data.tsv
-
вот так без cat, но эффект будет тот же
-
tcmalloc: large alloc 1073750016 bytes == 0x48a72000 @
tcmalloc: large alloc 2147491840 bytes == 0x88a74000 @
tcmalloc: large alloc 4294975488 bytes == (nil) @
std::exception: std::bad_alloc -
а что бы это могло значить?
-
после это команды
-
-
это значит C++ не может выделить памяти.
-
В дампе много длинных строк. Попробуйте уменьшить max_insert_block_size.
Например, так: clickhouse-client —max_insert_block_size=65536 ... -
Не знаю, никогда не пробовал подкасты. Надо подумать.
-
-
Их интересует ClickHouse для задачи сбора данных и аналитики производительности MySQL, MongoDB. Хотя я пол года назад предложил его попробовать, они всё сделали сами, даже помощь по настройке не потребовалась.
-
не помогла те же msgs
-
не знал про split ) класная штука спасибо
-
А насколько длинные?
ClickHouse не любит очень длинные строки. Работает, но требуется уменьшать всевозможные размеры пачек для обработки. -
я как-то на самом деле удивлен. т.к. вчера я загружил 130 млн строк этой командой. а сегодня поставил пароль для пользователя и попытался еще импортнуть один файлик 30 млн строк по 43 столбца. и ошибка(
-
то есть вчера этот файл загружался а сегодня с установленным паролем в sha256 уже не грузится. может пароль тут непричем но ничего больше не менял
-
Пароль не при чём.
-
в системе не появилось других процессов жрущих память?
-
@milovidov_an прошу прощения за свою назойливость. Недавно писал вопрос, но к сожалению ответа не получил. Алексей, вы не могли бы все таки прокомментировать?
-
Load Average 0.07. два ядра почти по 0%. память загружена 303м из 4gb
-
Разница в порядке указания столбцов в первичном ключе есть и она очень важна. Данные в кусках сортируются лексикографически по первичному ключу. То есть, если ключ (a, b) - данные будут отсортированы по столбцу a. А для каждого множества строк с одинаковым значением столбца a - по столбцу b.
-
Если вы указали условие (равенство, неравенство, IN, комбинация логических связок от этих условий) на столбец a в WHERE - индекс позволит выбирать диапазоны в данных.
Если вы не указали условие на a, но указали только условие на b - индекс всё-равно может работать, но хуже и лишь при некоторых условиях - если в данных встречаются длинные диапазоны с одинаковыми значениями a - тогда в таких диапазонах ClickHouse сможет выбрать поддипазоны с нужными значениями b и пропустить остальные. -
ClickHouse Primary Keys
Recently I dived deep into ClickHouse. ClickHouse is column-store database by Yandex with great performance for analytical queries. For…
-
Посмотрите, какая средняя длина строк в файле. Посчитать можно так:
wc -lc file -
-
это нормально?
-
столько демонов
-
Это один процесс, но разные потоки. Это нормально.
-
Спасибо большое!!!
-
30000000 3551764198 audience_statistic_segments_1.tsv
-
я делал дампы из mysql по 30 млн записей и их грузил вчера
-
Судя по этому выводу, всё Ок. В среднем строки примерно 100 байт, что немного.
Тем не менее, попробуйте ещё уменьшить max_insert_block_size в clickhouse-client. -
до какого размера? или может это где-то в конфиге задать можно?
-
Экспериментируйте. Возможно, проблема не в этом.
-
уменьшение этой опции не помогло. странно(
-
Разделите файл на куски и найдите минимальный кусок, для которого ошибка проявляется.
-
разделю о не понятно почему вчера по 30 млн загружалось а сегодня уже нет( или зависит от количество записей в таблице?
-
разделил на куски в 10 млн
Code: 173, e.displayText() = DB::Exception: Allocator: Cannot mmap., errno: 12, strerror: Cannot allocate memory, e.what() = DB::Exception -
по htop вижу что равномерно память растет до 4 гигов и просто падает exception что памяти не хватает. как можно обойти это ограничение? не выгружать весь файл в память а как-то потоков писать из файла?
-
если вгрузить на один раз и подождать нестрашно, то может своп создать попробовать
-
а вы случаем не в докере запускаете с какими-то ограничениями по памяти?
-
на и386:)
-
А какой выпуск devzen слушать, где про это?
- 10 April 2017 (133 messages)
-
нет
-
загрузил меньшим файлом в меньше чем 1 гб (5 млн строк) - файл загрузился
из сообщения
tcmalloc: large alloc 1073750016 bytes == 0x486ec000 @ - следует что большой размер7 т.к. они реально больше 1гб. но где это ограничение задается? -
Добрый день! А есть ли в ClickHouse какие-либо ограничения на размер массивов или строк при INSERT-е в формате JsonEachRow?
-
Я просто заливаю json, который гарантированно корректный, но ClickHouse ругается на "Code: 26, e.displayText() = DB::Exception: Cannot parse JSON string: expected opening quote: (at row 1), e.what() = DB::Exception", (row может быть произвольный)
-
Возможно, нельзя заливать массивы из одних только пустых строк или вроде того...
-
У нас в тестинге достаточно часто вырубаются машины по питанию и появилась мысль перманентно (например, в /etc/default/clickhouse) выставлять флажок flags/force_restore_data, чтобы в случае падения машина без вмешательства эксплуатации удаляла из ZK информацию о потеряных кусках
Но возникли также разумные опасения, к чему может привезти подобная "оптимизация", @milovidov_an? Разумно ли так делать? -
-
-
-
-
-
-
а как вы это согласуете с "As mentioned in the ZooKeeper Getting Started Guide , a minimum of three servers are required for a fault tolerant clustered setup, and it is strongly recommended that you have an odd number of servers."
-
Чётное число нод делать смысла мало - например и конфигурация из 5 нод, и конфигурация из 6 переживают падение 2 нод, но не переживают падение 3-х. Соответственно в вашем случае при недоступности одного ДЦ или потери связности оба ДЦ уйдут в readonly. Если вы назначите один из ДЦ "главным" и разместите большинство нод zookeeper-а там, то при выпадении "запасного" ДЦ, основной будет доступен.
-
-
Скажите пожалуйста можно ли как-то включить компрессию при дампе через clickhouse-client? опции такой нету, а нужно локально выгружить данные в native .. ?
-
clickhouse-client -q "..." | clickhouse-compressor > data.compressed
-
Такого быть не должно. Попробуйте сделать минимальный пример файла, на котором проявляется ошибка, и прислать нам.
-
Спасибо! Попробую
-
спасибо)
-
Скажите сервера 1 CPU и 2gb RAM это очень плохо для запросов на select sum в таблицы с 100 млн записей каждую минуту и около 1000-2000 вставок в секунду ? прочитал что RAM должно быть столько же сколько ГБ данных (я так понял данные в памяти висят). кто что скажет по этому поводу?
-
Привет. Мы выложили в OpenSource Graphouse - компонент, который позволяет использовать ClickHouse как хранилище метрик для Графита.
Graphouse содержит:
1. TCP cервер для приема метрик
2. HTTP API для поиска метрик и получения данных (с питонячим модулем для graphite-web)
3. HTTP API для управления деревом метрик.
Лежит тут - https://github.com/yandex/graphouse
Доступны deb пакеты.
Документацию постепенно дополняем. Будем рады любым замечаниям и предложениям. -
Зависит от кардинальности выражения группировки, сама аггрегатная функция суммы требует O(1) памяти
-
-
-
а может подскажите как распределить нагрузку. я вот создам наверное еще один instance 1 cpu 2gb ram и будет два сервера между которыми нагрузка будет распределятся. я так понимаю надо всего 3 сервера - принимающий Distributed и два с mergetree с одинаковыми данными и репликацией с первого узла с mergetree на второй узел mergetree ?
-
-
-
Какие именно проверки?
-
-
-
У нас всё своё
-
-
Ничего такого выкладывать не планируем
-
Да, в случае частых выключений это Ок.
Ещё можно поднять лимиты, на которые он ругается при запуске.
Они задаются в секции <merge_tree>, варианты см. в MergeTreeSettings.h -
Если у вас есть возможность выложить минимальный вариант файла, на котором проявляется проблема, то я смогу это изучить.
-
Ну это же нереально круто!
-
-
порезал файлик на чанки по 10 млн и файлик загрузился. может база весит в памяти оперативной? то есть загрузил часть данных сделал пару запросов. а на следующий день уже не могу загрузить такой же объем данных. возможно либо результаты запросов остались в памяти либо сама база как-то в памяти висит?
-
Данные не обязаны помещаться в память.
(Для примера, на наших серверах обычно 128 GB оперативки и 10..60 TB сжатых данных.)
Но 2 GB - это очень мало. Для хоть сколько-нибудь широких таблиц и запросов с промежуточными данными большой кардинальности будут OOM-ы. -
Вы можете использовать однородную схему кластера: все серверы могут принимать запросы и выполнять их распределённо. То есть, делать отдельный "принимающий" сервер не обязательно - можно на всех серверах создать одинаковые Distributed таблицы.
-
Да, так работают аллокаторы. Какая-то часть памяти не отдаётся системе, а используется для последующих аллокаций.
-
Поздравляю!
Насколько я помню, есть намерение выложить ещё две полезные штуки :) -
1 cpu 2 gb ram я так понял не потянут кх верно? раньше был 2 cpu 4 gb было норм, сейчас уменьшил instance и получил жесткую нагрузку во время выгрузки данных из кх для бэкапа. load average подскакивает до 2.5
-
А зачем такие слабые машины? Лучше меньше машин, по посерьёзнее.
-
возможно. решили просто попробовать вытянет ли. и он тянет нормально, но когда начинает выгружать данные из 100 млн таблиц с компрессией то average растте критически. думал сделать ограничение cpu для процесса. На самом делел тут проблема лишь в бэкапе.
Алексей а скажите пожалуйста при однородной схеме кластера на какой сервер слать запрос? или не важно? он перенаправит на другой сервер запрос и вернет результат на первый? -
> возможно. решили просто попробовать вытянет ли. и он тянет нормально, но когда начинает выгружать данные из 100 млн таблиц с компрессией то average растте критически. думал сделать ограничение cpu для процесса. На самом делел тут проблема лишь в бэкапе.
Для одного запроса ClickHouse использует по-умолчанию не больше CPU ядер, чем есть на машине.
LA может быть большим, например, из-за того, что система упирается в диски. ClickHouse хочет прочитать что-то с диска. При этом в системе работают другие программы, которые тоже периодически что-то читают, и им приходится тоже ждать. Так получается больше потоков, которые ждут диска и растёт LA.
Вы можете легко это проверить, запустив
iostat -dmx 1 -
> Алексей а скажите пожалуйста при однородной схеме кластера на какой сервер слать запрос? или не важно? он перенаправит на другой сервер запрос и вернет результат на первый?
Можно отправлять запрос на любой сервер, он выполнит его распределённо и вернёт результат (впрочем, в случае наличия одного шарда - выполнит его у себя).
Выбирать следует любой живой сервер, возможно с приоритетами в зависимости от расположения в сети. Вы можете сделать логику на стороне клиента, которая просто выбирает первый попавшийся живой сервер по кругу, соединяясь с небольшим таймаутом. Или можете использовать HAProxy. -
А что значит живой? живой тот кто быстро по таймауту вернул результат? иначе дергаем следующий?
-
Достаточно проверять возможность соединения с сервером за небольшой таймаут, если соединение ещё не установлено. Это покрывает почти все кейсы (хотя и не все).
Таймаут на результат не подходит. Запросы бывают разные, с разным временем выполнения. -
я понял огромное спасибо) скажите где можно глянуть пример по построеннию однородной схемы кластера ?
-
Есть немного здесь: https://clickhouse.yandex/tutorial.html
Но без пошаговой инструкции.Tutorial | ClickHouse DocumentationClickHouse Tutorial What to Expect from This Tutorial? By going through this tutorial, you’ll learn how to set up a simp
-
@milovidov_an http://devzen.ru/episode-0135/ это одна из тем слушателей. слушать с 01:42:44
-
Спасибо! Вчера послушал. Человек говорит странное мнение. Как можно подумать, что ClickHouse подходит "только для int-ов", когда самый популярный кейс - это clickstream, где всякие URL, Referer и тому подобное.
-
-
и правда странное :)
-
-
Может мой вопрос покажется глупым, но я все же задам. если основываться на таймаут то я так понял тут только репликация нужна между серверами чтобы данные всегда были идентичны? зачем тогда Distributed таблицы ? или они для репликаций и нужны?
-
есть глупый вопрос, есть буфер таблица traffic_buffer, есть таблица, в которую данные пушатся для сохранения на диск - traffic. Хочется сделать селект данныех только из буфер таблицы, чтобы не было выборки из таблицы, которая уже на диске.
-
судя по документации, select * from traffic_buffer делает выборку из буфер таблицы и из той, что уже сохранена на диск. А мне вот надо именно внутренности буфера.
-
Distributed таблица нужна при наличии в кластере более одного шарда. Шарды - части кластера, содержащие разные части всех данных. Шардирование нужно, если данные не помещаются на один сервер.
-
Такой возможности нет.
-
:(
-
очень-очень жаль :(
-
Спасибо за ответ!
-
а если шардирование не предусматривается? т.к. mergeTree как я понял сам разбивает данные по месяцам что вполне приемливо для нас. единственная цель которую мы преследуем это распределение нагрузки между серверами. я так понимаю два сервера с одинаковыми данными, но нагрузка распределена между ними и вставки и выборки максимально быстрые. может что нибудь посоветуете?
-
Если множество столбцов таблицы Buffer не совпадает с множеством столбцов подчинённой таблицы, то будут вставлено подмножество столбцов, которое присутствует в обеих таблицах.
а если добавить поле которое будет присутствовать только в буферизированной таблице и по нему делать where ? -
Эту возможность можно добавить - с помощью виртуальных столбцов. Для примера смотрите использование столбца _part в StorageMergeTree.
-
Тогда запрос кинет исключение, потому что не увидит этого поля в основной таблице.
-
Если шардирование не используется, то и Distributed таблицы создавать не надо.
-
тогда как распределить нагрузку ? я рассуждаю на уровне mysql. может в кх это по другмоу работает, если да, то как?
-
Балансировка MySQL
Это краткая заметка как настроить отказоустойчевый кластер с балансировкой нагрузки из 2 MySQL серверов. Исходные данные 2 свежеустановленных MySQL сервера. Необ...
-
На стороне клиента, который ходит на ваш кластер из одного шарда и многих реплик, вы можете воспользоваться одним из трёх вариантов:
1. Выбирать живую реплику в клиентском коде.
2. Установить HAProxy и ходить в него.
3. Установить пустой clickhouse-server и создать на нём Distributed таблицу, которая смотрит на кластер. Ходить в него. -
Joined.
-
"default.socket_timeout": "120000"
для #zeppelin -
мне это надо переварить) я так понимаю смысл балансировки в нахождении более быстрого узла в класстере и обращению к нему?
-
Обычно просто для отказоустойчивости и распределения нагрузки.
-
но репликация должны быть двухстороняя ?
-
если говорить о однородной схеме класстера
-
В ClickHouse репликация всегда multi-master.
-
вопрос по плагину Гарфаны для CH. А как добиться, чтобы оно работало, когда у меня CH на 127.0.0.1, а в гарфану я хожу проксируя ее через nginx с http auth?
-
я выбираю proxy режим, но при попытке теста соединения меня выбивает и требует пароль от узла, на котором у меня доступна графана.
-
InfluxDB подключен точь-в-точь по такой же схеме, но при этом пашет ОК.
-
Такое ощущение, то ли он пытается использовать мой http auth пароль для того, чтобы влезть в CH либо что-то еще.
-
-
не, у меня что инфлакс что кликхаус - на 127.0.0.1
-
Графана выставлена на публичный айпи и закрыта http auth. То есть инфлакс ходит в режиме прокси.
-
Пытаюсь добиться точь-в-точь такого же поведения с CH
-
-
а если пароль на CH дефалтный / без пароля?
-
меня еще смущает "There is a small feature - ClickHouse treats HTTP Basic Authentication credentials as a database user and will try to run queries using its name."
-
-
-
-
вот так вот оно ведет себя в отладке хрома
-
Www-Authenticate:Basic realm="ClickHouse server HTTP API"
-
http://ip:8123/ что выдает в отладке
-
угу, судя по всему как-то данные от моего логина в Графану закрытого http auth просачиваются как реквизиты для коннекта к кликхаусу
-
-
-
Bad Gateway :)
-
-
-
ну при выборках с CH мне вообще атворизация не нужна, все с одних реквизитов лезут
-
Это из описания clickhouse datasource c grafana.com "ClickHouse treats HTTP Basic Authentication credentials as a database user and will try to run queries using its name."
-
-
или создать такого же юзера в базе, лол.
-
-
-
как-нить вот так http://default:@127.0.0.1:8123 ?
-
-
неа, нихт.
-
-
-
-
-
как минимум в графитном datasource'е можно ткнуть галку basic auth
-
-
-
-
неа(
-
-
тут еще сайд эффект
-
что меня вышибает после этого с графаны, куда я зашел по http auth :/
-
-
Ситуация чутка прояснилась ""Code: 192, e.displayText() = DB::Exception: Unknown user admin, e.what() = DB::Exception""
-
нашел вот это в отладке хрома, то есть оно и правда пытается лезть в CH с реквизитами, которе я использую для входа в гарфану
-
заиметь бы флажок, чтобы отрубить такое поведение :)
-
В общем, такое дело. Оказалось, что в Nested альтером по ошибке были добавлены колонки не типа Array(String), а типа String. ClickHouse разрешил в Nested добавить колонки не типа Array(T) по какой-то причине... Но тут и человеческий фактор сыграл, конечно.
В итоге, скорее всего, кликхаус при парсинге JSON ожидал и пытался "считать" строку вида '"string1"', а получал '["string1", "string2", "string3"]' (без кавычки в начале), и выдавал ошибку о том, что не может в (типа) '"string1"' считать открывающую кавычку.
Тут меня скорее удивило даже не то, что КХ пропустил в Nested не-array, а то, что парсинг JSON не независимый, а завязан на структуру таблицы. Скорее всего, так оно и задумано; скорее всего, для каких-то целей эффективности. Но, если бы было иначе, то, скорее всего, в таких случаях выдавалась бы ошибка о "несовместимости типов String и Array(String) в колонке такой-то". Но, к сожалению, ошибка была не очень очевидная ("Code: 26, e.displayText() = DB::Exception: Cannot parse JSON string: expected opening quote: (at row 1), e.what() = DB::Exception") =(
К счастью, в итоге разобрался и всё работает чудесно =)
Вот такие дела. Могу завести багу на гитхабе, в принципе, но даже не знаю о чём тут...
В принципе, о том, что КХ позволяет заальтерить Nested не-массивными типами, что ли. Ну или, возможно, о более ясных текстах ошибок при парсинге JSON, но это не так просто будет пофиксить, как мне кажется. -
-
Да, к сожалению, не проверяется
-
-
done)
- 11 April 2017 (139 messages)
-
Это поведение не графаны, а самого КХ
описано в https://clickhouse.yandex/reference_ru.html#HTTP интерфейс
Считаю, что это весьма правильное решение. В противном случае, необходимо было бы указывать логин/пароль отдельно для basic auth и для самого КХДокументация ClickHouse | Документация ClickHouseClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
В нашем случае для доступа из графаны в КХ всегда должен использоваться пользователь с ограниченными правами и квотами. Поэтому и basic auth и КХ настроены на работу с ним
-
не совсем понимаю, что Вы имеете в виду
-
Возможно, это удобно в каком-то кейсе. Но CH без проблем дает указывать логин и пароль в строке запроса вместо http auth. Вот именно этого и хочется.
-
Создавать юзеров в CH не шибко удобно. Но если бы он мог читать стандартный файл паролей в формате apache/nginx и создавать юзеров с него - это решило бы проблему.
-
-
боже упаси
-
Мы уже вляпались
-
Я заведу issue на этот случай
На данный момент Вы можете разрешить свою проблему использованием одинаковой пары логин/пароль для КХ и basic auth перед ним
Более того, советую создать и настроить доступ из мира к КХ через специального пользователя с ограниченными правами -
Не совсем лексическое. При запросах работают всякие ARRAY JOIN prefix.
-
Но отсутствие проверки на одинаковую длину это фейл, надо делать.
-
Спасибо!) Очень благодарен за внимание к проблеме!)
-
Сейчас попробуем закостылить :)
-
День добрый всем. Как при вставке из формата JSONEachRow заставить работать DEFAULT значения?
CREATE TABLE test (
date Date,
isp String,
id Int64 DEFAULT 10,
ispHash Int64 DEFAULT cityHash64(isp)
)
ENGINE = MergeTree(date, (date), 8192)
insert into test FORMAT JSONEachRow
{"date":"2017-02-02","isp":"Gmail"}
в моем случае поля id и ispHash - имеют нулевые значения после инсерта. Если делать через Values, то отрабатывает правильно, но нужен формат JSONEachRow. -
-
Спасибо, сработало.
-
-
создал юзера с CH с тем же паролем, что у меня был на http auth в графане, вышло "Data source is working" :)
-
так вроде недавно как раз с /opt/ на /var/lib поменяли
-
ога
-
-
Спасибо. Сейчас попробую
-
-
-
а есть у кого пример запроса для PieChart созданный вручную через ввод SQL в CH?
-
Вы можете использовать макрос $columns из плагина для графаны
-
в плагине это будет выглядеть примерно так
$columns(
Client c,
sum(Requests) Requests)
FROM $table -
О, спасибо! Попробую))
-
или без макроса -
SELECT
t,
groupArray((c, Requests)) AS groupArr
FROM
(
SELECT
(intDiv(toUInt32(DateTime), 3600) * 3600) * 1000 AS t,
Client AS c,
sum(Requests) AS Requests
FROM stats
GROUP BY
t,
c
ORDER BY
t ASC
)
GROUP BY t
ORDER BY t ASC -
Круть, спасибо!)
-
добрый день
-
господа, подскажите пожалуйста, что-то серьезное менялось в кх за последнее время? он у нас крутится в докере, пытался сегодня обновить, он валится, пришлось откатить
-
# docker images |grep clickhouse
yandex/clickhouse-server latest c8068646a915 12 days ago 796 MB
yandex/clickhouse-server <none> 5ae091f607a9 2 months ago 883 MB -
-
сейчас, не успеваю :)
-
clickhouse_1 | 2017.04.11 10:13:32.648312 [ 4 ] <Trace> HTTPHandler-factory: HTTP Request for HTTPHandler-factory. Method: POST, Address: [::ffff:10.0.111.1]:55926, User-Agent: python-requests/2.11.1
clickhouse_1 | 2017.04.11 10:13:32.648329 [ 4 ] <Trace> HTTPHandler: Request URI: /
clickhouse_1 | 2017.04.11 10:13:33.131553 [ 4 ] <Debug> executeQuery: (from [::ffff:10.0.11.1]:55926) INSERT INTO h.alive FORMAT TabSeparated
clickhouse_1 | 2017.04.11 10:13:33.131640 [ 4 ] <Debug> MemoryTracker: Peak memory usage (total): 0.00 B.
clickhouse_1 | 2017.04.11 10:13:33.141496 [ 4 ] <Error> HTTPHandler: Code: 60, e.displayText() = DB::Exception: Table h.alive doesn't exist., e.what()
= DB::Exception, Stack trace: -
валится вот так и дальше стектрейс
-
-
ага, путь изменился?
-
спасибо, сейчас рестартну
-
спасибо
-
-
-
-
-
Насколько я понимаю, pentaho DI раньше назывался pentaho Kettle. Шупал его года два-три назад. Вещь в себе, притом трудно поддерживаемая. Мэппинги сложно отлаживать, есть архитектурные косяки (не помню точно, какие, но помню, что долго придумывал как их обходить). Визуальная среда проектирования на базе эклипс 🤢, плюс вообще, визуальные языки сложно поддерживать: ты видишь диаграмму верхнего уровня, но задолбаешься протыкивать мышкой каждый шаг, чтоб понять, что он делает.
-
Я бы посоветовал просто написать ETL код на каком-нибудь языке с поддержкой ФП. Как вариант - на джава 8 со стримами. Если нужна кластеризация (big data) - логично делать ETL на базе map reduce стека какого-нибудь. Hadoop тот же самый
-
-
-
если нужна поточность и какая-то near real-time-овость, то можно глянуть в сторону Flink, Storm и еще что-то не давно в Apache свалилось интересное
-
там та же функциональщина, и бигдата + всякая обвязка для кластеризации
-
-
Добрый день! Подскажите, пожалуйста, а есть ли всё-таки возможность как-то посчитать min/max в таблицах типа CollapsingMergeTree? Может быть, как-то подзапросами?
-
Не для КХ, а другой базы, но отказался от пентахо из-за сложности реализации соответсвий типов. Выбрали Talend продукты. Но если есть возможность, лучше пишите свое, ибо подстраиваться под софт очень тяжело...
-
И да, все open-source/community инструменты по ETL отвратительные в плане совместной работы
-
Joined.
-
-
Есть 20 территориально распределенных БД DB2 в каждой из есть таблица из 10 столбцов (string int32 datetime) куда пишут датчики о своем состоянии. Прирост таблицы около 1000 строк в минуту. Нужно раз в минуту опрашивать 20 баз данных и выгребать новые строки в clickhouse. В операционную систему серверов DB2 доступа нет. В DB2 доступ только на чтение.
-
с такой задачей я бы написал свой инструмент
-
Остается надеяться, что в этих таблицах у вас есть удобное поле для организации CDC (типа монотонно возрастающий id). Тогда может получиться достаточно просто, надежно и без вероятных дубликатов
-
хотя, с дубликатами может и CH справиться...
-
Joined.
-
Joined.
-
а кто как, кстати, с дубликатами борется? :)
-
если не считать optimize
-
опять не выходит камменый цветок с PieChart в графане :(
-
пытаюсь отрисовать вот такое SELECT srcAsn AS asn, sum(length) AS total_traffic FROM traffic_buffer GROUP BY asn ORDER BY total_traffic DESC LIMIT 10
-
"ORDER BY time supported at this time" и возникает вопрос, а как ограничить число элементов на диаграмме только топ10, а-то у меня браузер виснет от тысяч =(
-
ну тут больше недоработка макроса, который не позволяет использовать лимиты и ордеры. Проблему можно решить подзапросом. А в плагине я собираюсь это скоро исправить. Сейчас посмотрю пример
-
спасибо!)
-
$columns(
Client c,
sum(Reqs) Reqs)
FROM $table
WHERE Client in (
SELECT Client
FROM
(
SELECT
Client,
sum(Reqs) Reqs
FROM $table
GROUP BY Client
ORDER BY Reqs DESC
LIMIT 20
)) -
ммм, я наверное не до конца понимаю логику
-
я могу задать table в конструкторе
-
но когда я ввожу запрос в поле QUERY, его стирает и переделывает, если я меняю что-либо из параметров
-
в то же время если я делаю toggle mode, у меня вообще все опции выключаются и становится не ясно, как указать ту же table
-
я не уверен, что вы используете последнюю версию плагина. В любом случае, вы можете указать вместо $table просто имя таблицы
-
а какой тип у ваших значений и какую функцию от них вы хотите посчитать?
-
я стянул его с гарфана нет, лучше с гита тянуть?
-
да, на графана.нет не самая новая версия
-
Joined.
-
Сейчас спрошу у знающего человека...
-
Привет. Да, поднимали для целей бэкапов, большой нагрузки на него нет, что касается стабильности, то за ~1 год никаких существенных проблем с ним не возникало.
-
-
-
поймал какое-то крааайне странное поведение таблицы буфер
-
делаю вот такой запрос на буффер таблицу
-
SELECT dstAsn, sum(length) AS length FROM traffic_buffer GROUP BY dstAsn ORDER BY length DESC LIMIT 10
-
получаю вот такой бред:
-
┌─dstAsn─┬───────────────length─┐
│ 1502 │ 18351949192765233766 │
│ 265 │ 18094662927337839107 │
│ 1462 │ 17797213894484028375 │
│ 1213 │ 17666271323459185848 │
│ 1491 │ 17572761437988275181 │
│ 1238 │ 17314826234977620221 │
│ 1389 │ 17228713838271841746 │
│ 1164 │ 16975815251666726881 │ -
а вот тот же запрос, на таблицу на диске
-
SELECT dstAsn, sum(length) AS length FROM traffic GROUP BY dstAsn ORDER BY length DESC LIMIT 10
-
│ 8473 │ 1948338049 │
│ 43513 │ 947373740 │
│ 16276 │ 421553898 │
│ 24940 │ 267350030 │
│ 60117 │ 220325712 │ -
и это верные данные, судя по порядку величин в буфер таблице есть странные подозрения на переполнение....
-
но в тоже время, если сделать выборку из обоих таблиц на предмет суммарного length по всей таблцие - все ок, значения идентичные и корректные.
-
Если попробовать поискать проблемные строки с большими или отрицательными значениями?
-
все визуально ок...
-
SELECT min(length)
FROM traffic_buffer
┌─min(length)─┐
│ 64 │
└─────────────┘ -
SELECT max(length)
FROM traffic
↙️ Progress: 22.36 million rows, 178.90 MB (220.23 million rows/s., 1.76 GB/s.) ┌─max(length)─┐
│ 1522 │
└─────────────┘ -
max?
-
тоже самое в обоих таблицах, что в персистент, что в буферной
-
столбец типа: length UInt64
-
Насколько часто сбрасывается буфер? Исчезает ли проблема, если форсировать сброс буфера (OPTIMIZE TABLE)?
-
-
неа, сделал оптимайз на все таблицы, не помогло
-
сброс каждые 10000 записей, примерно раз в 10 секунд
-
уже проверил, максимум - 1522.
-
То есть, проблема проявляется, даже если буфер пуст?
-
угу :(
-
я могу остановить поток
-
Одинаковая ли структура таблицы buffer и таблицы, в которую сбрасывается?
-
одинаковая
-
хыыы, остановил залив данных - баг пропал
-
как только запустил - через секунду снова воспроизвелся.
-
SELECT
dstAsn,
max(length) AS length
FROM traffic_buffer
GROUP BY dstAsn
ORDER BY length DESC
LIMIT 10
↙️ Progress: 25.66 million rows, 307.87 MB (251.96 million rows/s., 3.02 GB/s.) ┌─dstAsn─┬─length─┐
│ 196798 │ 1522 │
│ 197082 │ 1522 │
│ 13147 │ 1522 │
│ 46433 │ 1522 │ -
и через секунду (запустил поток)
-
SELECT
dstAsn,
max(length) AS length
FROM traffic_buffer
GROUP BY dstAsn
ORDER BY length DESC
LIMIT 10
→ Progress: 16.71 million rows, 200.46 MB (163.71 million rows/s., 1.96 GB/s.) ┌─dstAsn─┬───────────length─┐
│ 1522 │ 1693771892837325 │
│ 142 │ 872088814537677 │
│ 0 │ 871680792791368 │
│ 162 │ 871672202709965 │
│ 64 │ 871672202709965 │ -
Выполнялся ли ALTER таблиц?
-
ниразу
-
вчера дропал и создавал заново, с небольшими изменениями схемы.
-
Проблема проявляется на одном сервере кластера или на всех?
-
кластера нету, установка на одной машине
-
машина с ECC, model name : Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
-
-
добавил поле packetDateTime DateTime
-
схема выглядит вот так
-
SHOW CREATE TABLE traffic
┌─statement────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE fastnetmon.traffic ( packetDate Date, packetDateTime DateTime, source Int8, sampleRatio UInt32, srcIp UInt32, dstIp UInt32, srcAsn UInt32, dstAsn UInt32, ipProtocolVersion UInt8, ttl UInt8, sourcePort UInt16, destinationPort UInt16, protocol UInt32, length UInt64, numberOfPackets UInt64, flags UInt8, ipFragmented Int8, ipDontFragment Int8, packetPayloadLength Int32, packetPayloadFullLength UInt32, packetDirection Int8) ENGINE = MergeTree(packetDate, (srcIp, dstIp, packetDate), 8192) │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
→ Progress: 1.00 rows, 16.00 B (284.25 rows/s., 4.55 KB/s.)
1 rows in set. Elapsed: 0.004 sec.
:) show create table traffic_buffer;
SHOW CREATE TABLE traffic_buffer
┌─statement─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE fastnetmon.traffic_buffer ( packetDate Date, packetDateTime DateTime, source Int8, sampleRatio UInt32, srcIp UInt32, dstIp UInt32, srcAsn UInt32, dstAsn UInt32, ipProtocolVersion UInt8, ttl UInt8, sourcePort UInt16, destinationPort UInt16, protocol UInt32, length UInt64, numberOfPackets UInt64, flags UInt8, ipFragmented Int8, ipDontFragment Int8, packetPayloadLength Int32, packetPayloadFullLength UInt32, packetDirection Int8) ENGINE = Buffer(\'fastnetmon\', \'traffic\', 16, 10, 100, 10000, 1000000, 10000000, 100000000) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
↘️ Progress: 1.00 rows, 16.00 B (1.14 thousand rows/s., 18.20 KB/s.)
1 rows in set. Elapsed: 0.001 sec. -
-
Работать работает. Но память жрет нещадно.
-
Вы имеете в виду под ARC? Или течет?
-
Надеюсь не течёт. Я с zfs в proxmox попал. Он памяти требует оч много. На 8тб у меня порядка 30гб кушало.
-
Может там дедупликация была включена? Для нее много памяти надо
-
Не исключено. Я использовал все что шло по дефолту в образе proxmox. В итоге перешёл просто на хардварный рейд 10
-
-
Фикс войдёт в следующий релиз.
-
https://github.com/yandex/clickhouse-odbc
- отдельный репозиторий для ODBC драйвера.
Сейчас в активной разработке. Сделана сборка под Windows.
В основном, ещё не готово для использования.
Libreoffice работает, Excel - нет. Tableau Desktop - подключается, показывает список таблиц, но дальше ничего не работает.
Можете пробовать, если вы - разработчик.GitHub - ClickHouse/clickhouse-odbc: ODBC driver for ClickHouseODBC driver for ClickHouse. Contribute to ClickHouse/clickhouse-odbc development by creating an account on GitHub.
-
-
Огромное спасибо!;)) вы лучшие!
-
👍
-
- 12 April 2017 (145 messages)
-
-
sFFFFVT6GTVVFTVFVFFFTVVFVFFTVFTVFVFVFTF55FTV55VF5VTTFV55VF5VFTF55V5FTTFTT5F
-
Кот. Или ребенок.
-
Извиняюсь - рюкзак :) Испраление багов за рулем
-
-
-
-
Добрый! А в чем проблема?
-
-
-
Чтобы иметь возможность строить графики распределенные во времени, таблица должна соержать Date и DateTime столбцы
-
Вы так же можете проигнорировать это требование, но тогда макросы могут неверно работать и лучше их не использовать
-
-
-
-
Посмотрите движок таблиц типа Buffer
-
Спасибо, посмотрел, у меня несколько о другом вопрос был – у меня есть сервис, который пишет csv для импорта в CH, батчи по 100mb / sec к примеру. Вот я смотрю в поисках тулинга или какого-то right way) у меня пока две идеи – непосредственно писать импорт сразу после создания каждого батча (не очень, т.к аффектит сервис процессинга данных), либо писать еще один велосипед, который смотрит на место где лежат батчи и импортирует их в CH.
-
Подскажите пожалуйста как выгрузить создание схемы (таблицы) в clickhouse-client ?
-
cat "$table"_schema.sql | clickhouse-client —user=$DB_USER —password=$DB_PASSWORD —database=$DB_DATABASE —query="CREATE TABLE $table"
-
в файлике корректный для кх запрос
-
-
-
если не передавать то все ок будет ?
-
да это в файлике
-
-
хз)
-
а подскажите его как выгрузить данные через clickhouse-client с декомпрессией ?
-
так могу ?
-
cat "$table"_data.native | clickhouse-client —user=$DB_USER —password=$DB_PASSWORD —database=$DB_DATABASE —decompress=1 —query="INSERT INTO $TABLE FORMAT Native"
-
говорит нету такой опции.. тогда как выполнит декомпресию ?
-
было бы хорошо если бы объеденили компрессор и декомпрессор внутрь клиента. опцию добавляем получаем компрессионный файл или декомпрессионый
-
a clickhouse-compressor через пайп пропустить нельзя?
-
можно поподробней ?
-
-
у меня вообще сервак лег от выгрузки компрессионых данных в 130 млн строк
-
-
это помоему команда на выгрузку данных. а я пытаюсь загрузить в кх уже копрессионные данные
-
-
информации в доке не нашел
-
-
-
ну так cat .. | compressor -d | clickhouse-client вроде ж тоже через stdin, не?
-
-
-
а как сработает?
-
я что-то запутался))
-
-
пишет no data insert
-
cat banner_history_segments_data.native | clickhouse-compressor -d | clickhouse-client —user="default" —password="" —database="statistics" —query="INSERT INTO banner_history_segments FORMAT Native"
-
Алексей поясните пожалуйста почему падает сервер от это выгрузки и что в команде не так? падает если слать через POST на localhost c опцией декомпрессии
-
-
8 гигов мало для выгрузки 120 млн строк?
-
-
может можно как-то потоково без выгрузки сразу в память всего содержимого через cat
-
просто импорт тогда мне придется переписывать слать запросы limit offset и выбирать чанками по 10 млн. думал может есть способ(
-
ладно память но процессор сходит с ума
-
-
2 vCPUs, 2.4 GHz, Intel Xeon Family, 8 GiB memory
-
это мало для импорта данных ?
-
ну ладно с файлом. разобью на чанки. но сам демон сервера грузит проц не хило. пока он выгрузит все данные сервер уже зависнет )
-
-
-
памяти хватает. но в притык занято 7 гб из 8 при импорте. но load average дошел до 6 и я уже даже select не смог выполнить он просто подвис. я остановил импорт. может можно как-то ограничить во время импорта процессор. я пользовался утилитой cpulimit и она хорошо справлялась. импорт довел до 0.4 average в спокойном режиме выгружать данные и кладет в облако. а вот с экспортом беда
1) я так и не понял какой командой можно кинуть файл на декомпрессию - у меня пишет no data insert
2) при импорте вылазит demon и жрет весь проц пока не завершится процесс что ограничивать не понятно
.. импорт делать планируется ежедневно на тестовый сервер для отладки на свежих данных -
-
Code: 108. DB::Exception: No data to insert
-
-
-
-
вы правы не понятно как файл очистился.. я другой проверил работает. оперативку "не жрет" у меня сейчас занято около 800 мб - 1.3 Г
-
но сервак пыжится )
-
-
-
раз в сутки ночью. дальше еще больше объемы будут
-
-
каждую секунду
-
-
у нас данные запрашиваются и в кеш кладутся
-
агрегированные
-
кеш для ui - отдельный сервер. но запросы слаться будут при каждом сборе новых данных для кеша
-
у меня есть еще одна идея
-
сейчас подожду пока сервак отдохнет и добавлю ему cpulimit
-
выставлю на выполнение команды 10% cpu может будет норм если раз в сутки
-
-
круто если бы вы сделали аналог mysqldump утилиты для выгрузки всей базы или отдельной таблиц
-
и чтобы она выполнялась с каким-то своим приоритетом выставляемый опцией
-
или например реализовать выполнение в docker котейнере
-
получается изолированный контейнер с четко выделенными для него ресурсами
-
может я ошибаюсь в чем-то. так мысли. но было бы круто)
-
Сейчас в запросах с несколькими фильтрами ClickHouse автоматически переносит некоторые фильтры в prewhere. Иногда он это делает неправильно, что приводит к увеличению времени выполнения запроса. (мы наблюдали, когда ошибочный перенос в prewhere увеличивал время выполнения с полутора до трех минут).
Вопрос: какие эвристики используются для определения, когда имеет смысл переносить условие в prewhere, а когда нет?
Предложение: было бы полезно добавить хинты, чтобы подсказывать КликХаусу, что можно переносить в prewhere, а что лучше не надо. -
сильно не помогло. клиент то особо не грузит проц. удалось не превышать load average больше 2.4 а для двух ядерного cpu эти 0.4 это уже очередь операций то есть подвисания. Тут больше cllickhouse —daemon кушает проц. его не знаю как ограничить только для операции импорта
-
Можно ведь делать ALTER TABLE %s.%s FREEZE PARTITION '2'. Тогда зафризятся все партишены нашего тысячелетия
-
и тогда будет сотни файликов?)
-
я ошибся. уже load average больше 3 стал(( видимо единственное решение это разбить файл на чанки и грузить маленькими частями с командой sleep чтобы не дать подвиснуть
-
нет, тогда в /<clickhouse_data_folder>/shadow/<version>/data/<db>/table лежать ваша таблица
-
партиции можно легко аттачить и детачить
-
надо попробовать
-
не сказал бы что легко))
ALTER TABLE statistics.audience_statistic_segments FREEZE PARTITION '2'
ALTER TABLE statistics.audience_statistic_segments ATTACH PARTITION - тут name месяца указывается? а нельзя все кусочки влить в базу ? -
-
ALTER TABLE statistics.audience_statistic_segments
ATTACH PARTITION '2'
Received exception from server:
Code: 248. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Invalid partition format: 2. Partition should consist of 6 digits: YYYYMM. -
-
при выполнении команды почему-то все выводит в консоль всю простыню
-
что-то с первого раза вышло. а сейчас даже не остановить этот процесс
-
Максим, если не секрет, над каким проектом вы работаете? Какая компания, для чего будете использовать ClickHouse?
-
у нас довольно большой проект и команда 8 человек. но пока не могу разглашать. проект уже год в разработке
-
а что я уже всем надоел?))
-
Просто интересно.
-
у нас довольно большие объёмы данных статистики. кратко реклама
-
показы клики и т.д.
-
После вставки данных, в фоне выполняются слияния. Слияния могут использовать достаточно большое количество потоков, каждый из которых, как правило, упирается в CPU или в диск. Максимальное количество потоков для слияния определяется настройкой background_pool_size, которую можно изменить в users.xml в профиле default. По-умолчанию - 16. Впрочем, столь большое количество потоков используется редко.
Сильно уменьшать этот параметр нельзя, так как тогда не смогут работать одновременно мелкие и крупные слияния, и вставка будет замедляться. Разумный минимум, в который можно выставить эту настройку - 4.
Планировщик ОС устроен так, что если даже количество потоков, ожидающих CPU, в несколько раз превышает количество ядер, система не будет "залипать" на существенное время (секунды) при операциях типа работы по ssh. Залипания на существенное время могут возникать из-за ожидания диска.
Виртуалка с двумя ядрами не является достаточно серьёзной для продакшена. Также стоит заметить, что часто у виртуалок очень слабая дисковая подсистема, и к тому же, диски могут быть перегружены соседями (мы наблюдали такое часто для виртуалок в OpenStack). Можно надеяться, что вы будете использовать более серьёзные машины для продакшен нагрузки.
Чтобы проверить, почему тормозит ваша виртуалка, выведите куда-нибудь графики утилизации CPU, диска, сети... -
Алексей спасибо за развернутый ответ. реальную нагрузку на продакшене пока не проверяли. я делаю последние штрихи по бэкапированию данных в облако amazon s3 и выгрузку самого актуального дампа на staging машину для тестов. Потом займусь переписыванием кеша который собирает из базы агрегированные данные для отображения статистических данных на графиках и другие данные финансовые
-
самая большая проблема это импорт данных на данный момент. которая будет выполнятся раз в сутки ночью. главное чтобы не подвис, т.к. во время импорта скриптик делает запросы на выборку каждую секунду для дополнения данных в кеше
-
то есть получается одновременная вставка огромного дампа и выборка. если сервер не потянет мы переедем на более мощный естественно, главное чтобы в холостую не работал
-
В таком случае вы можете искусственно уменьшить скорость вставки. Вставили блок данных, подождали, вставили ещё, таким образом, размазав нагрузку по времени.
-
кстати с экспортом все решилось просто. я выставил cpulimit на clickhouse-client и на операции архивирования. нагрузка 0.5 average
-
экспорт не мешает никак. с импортом были мысли делать sleep между чанками
-
наверное это единственные вариант на данный момент
-
проблема при экспорте в том что clickhouse-server ограничить через cpulimit не возможно, т.к. не понятно какой именно процесс подхватил данные а их там несколько выплывает - несколько потоков. и получается клиент ограничен в cpu а сервер жрет на полную )) ну я вас понял пока ограничимся чанками. потом когда переедем полностью докупим чуть более мощную машину. хотябы 4 cpu
-
Вы можете физически скопировать кусочки в нужную папку с именем таблицы и выполнить ATTACH таблицы. Это позволит добавить все партиции
-
и тогда вам не нужно будет архивировать и розархивировать данные
-
этот вариант я уже пробовал дамп все ок. шикарно. загрузка каким образом? там надо указать дату кусочка. это получится нужно выбирать два значения минимальное и максимальное из таблицы и записывать в какой нибудь доп. файл чтобы потом по нему пробежаться. а архивировать в любом случае нужно - т.к. задача перекинуть данные из продакшена на тестовые сервер
-
когда вы делаете freeze partition '2' у вас получается дамп всей таблицы. Вы можете спокойно перемещать/копировать/архивировать эти данные из папки shadow. Когда же нужно восстановить бекап: создаете папку с именем таблицы в папке data, копируете туда бекап, выполняете ATTACH TABLE %table_name% (...)
-
так)) интересненько
а что за запрос такой ? (...) ? -
неудобством может быть только необходимость хранить схему таблицы. Мы автоматизировали эти процессы с помощью небольшой утилиты на го. Она позволяет просматривать существующие ревизии, сравнивать их обьемы, детачить и аттачить таблицы
-
вместо ... нужно указать столбцы таблицы создаваемой таблицы
-
go это хорошо) но можно ли пример запроса полный? ну или выдуманный. я сейчас выгружаю схему через SHOW CREATE TABLE %table_name% и это кидаю в файлик потом делаю DROP TABLE и заново CREATE TABLE из файлика и выгрузка данных
-
обратите внимание на https://clickhouse.yandex/reference_ru.html#ATTACHДокументация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
схемы таблиц так же лежат в data папке КХ, их можно копировать оттуда
-
может можно как-то схему натравить на ATTACH TABLE %table_name% (...) из файла?
-
может и можно) вы можете реализовать это на каком-нибудь из ваших любимых языков или написать скрипт на bash
-
получится
выгружаю partials в shadows архивирую папочку кидаю в обалко. на другом сервере архив забираю распаковываю в папку data (предварительно очистив старую). выполняю ATTACH TABLE %table_name% .. не понял момент на счет схемы она должна быть заново создана ? -
я пишу на bash решил что это будет самый быстрый вариант
-
freeze сам поместит данные в shadow. Попробуйте восстановить таблицу из этих файлов
-
FREEZE PARTITION на счет этого я понял. поместит в shadow. затем как это натравить на data ? объясните плиз как дураку)
-
Добрый вечер!
-
Пришлось создать Buffer таблицу, чтобы в реалтайме туда писать данные
-
задали настройки движка, как в мануале
-
только поменяли max_rows -> 100 000
-
вместо 1 млн
-
данные не сливаются
-
в основную таблицу
-
а их там уже 197494
-
я понял...
-
это изза materialized полей...
-
создал другую буффер таблицу, без материалайзед полей
-
`Received exception from server:
Code: 10. DB::Exception: Received from 127.0.0.1:9000. DB::Exception: Expected column advert_id: (when looking at destination table default.vast_requests)` - 13 April 2017 (129 messages)
-
-
Не будет.
-
-
Будет.
-
-
Ребята, а что с сайтом? Ссылка на документацию не работает :(
-
-
Документация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
Най сайте ссылка ведет сюда https://clickhouse.yandex/ru/reference_en.htmlClickHouse DBMS
ClickHouse is an open source column-oriented database management system that allows generating analytical data reports in real time using SQL queries.
-
-
-
-
Ребят, в какую сторону копать?
2017.04.13 15:22:27.834697 [ 178247 ] <Error> executeQuery: Code: 9, e.displayText() = DB::Exception: Size of filter doesn't match size of column., e.what() = DB::Exception (from [::1]:37346) (in query: select * from my_table where id >=441098428 order by id limit 10)
, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x1e293b6]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x106bcdf]
2. clickhouse-server(DB::ColumnVector<unsigned char>::filter(DB::PODArray<unsigned char, 4096ul, Allocator<false>, 15ul> const&, long) const+0x3be) [0x1e6959e]
3. clickhouse-server(DB::ColumnNullable::filter(DB::PODArray<unsigned char, 4096ul, Allocator<false>, 15ul> const&, long) const+0x4e) [0x1e5dede]
4. clickhouse-server(DB::FilterBlockInputStream::readImpl()+0xc6c) [0x2b2980c]
5. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x31a) [0x1807eaa]
6. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x2b7cced]
7. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x31a) [0x1807eaa]
8. clickhouse-server(DB::PartialSortingBlockInputStream::readImpl()+0x2d) [0x2c8f74d]
9. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x31a) [0x1807eaa]
10. clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::loop(unsigned long)+0x152) [0x1f3d782]
11. clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::thread(MemoryTracker*, unsigned long)+0x77) [0x1f3de57]
12. clickhouse-server() [0x35bc8ef]
13. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f7e90a8f6ba]
14. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f7e900b082d] -
-
у меня такое было при наличии в таблице nullable-столбцов
-
Добрый день всем! Есть непонятки с функцией cityHash64.
CREATE TABLE test
(
date Date,
isp String,
ispHash Int64 MATERIALIZED cityHash64(isp)
)
ENGINE = MergeTree(date, (date,isp), 8192)
insert into test (date,isp) values ('2017-01-01', 'Yahoo')
insert into test (date,isp) values ('2017-01-01', 'Hotmail')
select isp, ispHash from test
Yahoo 3964330053880547655
Hotmail -1054703215700480117
select cityHash64('Yahoo') ->3964330053880547655
select cityHash64('Hotmail') -> 17392040858009071499
Как видите для Hotmail - различные значения, соответственно не работает поиск:
select * from test where ispHash =cityHash64('Hotmail') -
-
-
-
-
у меня тоже есть пара Nullable столбцов. Но они не участвуют в фильтрации.
-
👍
-
а можно ли в кх как-то орагнизовать такую схему - делаем запрос select в merge tree вида sum sum group field - получается некоторое количество записей около 500-100. и их держать в оперативной памяти - таблица memory, но со сроком действия - подобно кешу - записали агрегированные данные читаем с ним. как только не читаем долго время - данные пропадают (именно пачку данных которая была в рамках select запроса - ну может просто какое нибудь поле дополнительное ввести user_id) ?
-
-
можно наружный кэш сделать
-
-
-
Тоже ловили эту ошибку с Nullable столбцами. В фильтрации они тоже не участвовали.
-
-
Joined.
-
Joined.
-
-
Clickhouse для аналитиков. Начинаем
-
Joined.
-
-
Joined.
-
-
Joined.
-
-
Joined.
-
;)
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
Joined.
-
-
Joined.
-
Joined.
-
🙃
-
-
Я да :)
-
Для аналитиков кликстрим 😬
-
кликстрим?
-
Скорее да, чем нет
-
что это? )))
-
Гугл ответит
-
Ну или яндекс 😬
-
Joined.
-
поняяяяяятно http://www.clickstreamr.com/pricingPricing for Clickstreamr: Choose Your Plan
Send Google Analytics clickstream data to your server with Clickstreamr monthly recurring service subscription. View pricing and choose your plan.
-
У вас буква лишняя
-
-
во
-
Joined.
-
-
Через яндекс ищите?
-
Добрый вечер!
Replication of column ColumnArray(ColumnNullable(ColumnVector<Int32>)) is not implemented.
Ловлю ошибку при array join для nested вложения, при использовании внутри nested nullable-типов.
Вопрос, будет ли добавлен функционал для таких типов в будущем? (Сейчас используем версию 1.1.54165) -
-
Joined.
-
-
-
-
-
Joined.
-
-
-
Joined.
-
Joined.
-
да они на свет лезут!
-
-
скажите пожалуйста, а есть ли у Clickhouse какие-нибудь фишки как у графовых баз данных?
-
а какие фишки есть у графовых субд?
-
ну к примеру позволяют строить данные с более сложной структурой. если вы, к примеру, хотите построить грав социальных сетей и запустить на нем кластерный аналищ
-
при этом к примеру если память ограничена при больших объемах данных, то в графовых базах можно грузить данные в обработку по частям и памяти хватит
-
ух. хитро, я не в курсе, умеет такое или нет, очень специфичный кейс, но подождите ответа тех кто больше в теме
-
ну тут почти 600 человек, думаю, хоть один-то найдется?
-
явно :)
-
-
а это бага или фича, что в клиенте шапка с именами таблиц едет?
-
select packetDirection, count() from traffic_buffer group by packetDirection;
SELECT
packetDirection,
count()
FROM traffic_buffer
GROUP BY packetDirection
↑ Progress: 50.20 million rows, 50.20 MB (489.39 million rows/s., 489.39 MB/s.) ┌─packetDirection─┬──count()─┐
│ 3 │ 73399183 │
└─────────────────┴──────────┘ -
во-во)))
-
-
вот так вот оно выглядит
-
-
Модель хранения и сам продукт заточены под совсем иные нужды
-
это понятно. но Яндекс-то рабоьает с всемирной паутиной. ПАУТИНОЙ. чуете, чем пахнет? отсюда вопрос: жобавлять такой функционал будут или нет?
-
просто тогда CH юыл бы вообще огонь, если бы еще и графовые структуры умел
-
-
-
Полно же решений
-
подскажите пожалуйста?
-
Форк титана( janusgraph) например,
-
о, класс, спасибо
-
буду ковыряться
-
-
И еще куча около hpc, вида flashx, и gunrock
-
Тем, что КХ другими вещами занимается, для графового есть графовое
-
-
-
ну к примеру Postgres тоже вроде как sql, однако я знаю людей, которые его используют как nosql из-за поддержки json-b
-
Блин, nosql - это не хранение неструктурированных данных. В кликхаусе first class citizen - это колонка, в графовых бд - узел и связь, это не та штука, которую можно просто взять и на лету внедрить
-
-
-
Summary of the 1.1 Billion Taxi Rides Benchmarks
Benchmarks & Tips for Big Data, Hadoop, AWS, Google Cloud, PostgreSQL, Spark, Python & More...
-
-
Моя презентация о tabix
https://www.dropbox.com/s/fjnwq519b3qjv9z/CH_Meetup_13APR_final.pptx?dl=0
( лучше смотреть в powerPoint для просмотра видео )CH_Meetup_13APR_final.pptxShared with Dropbox
-
-
-
-
Joined.
-
@garikanet спасибо большое.
-
.
-
-
👍
-
-
Joined.
-
Моя презентация здесь:
https://github.com/yandex/clickhouse-presentations/tree/master/meetup5
Можно скачать:
https://github.com/yandex/clickhouse-presentations/archive/master.zip
Распаковать и открыть meetup5/index.html в браузере.
На сайт ещё не выложилось.clickhouse-presentations/meetup5 at master · ClickHouse/clickhouse-presentationsPresentations, meetups and talks about ClickHouse. Contribute to ClickHouse/clickhouse-presentations development by creating an account on GitHub.
-
Докер с tabix.ui (Build 17.04.3), если кому надо: https://hub.docker.com/r/e11it/tabix.ui/
-
спасибо, заберу в репу ... а то issue висит поправить докер)
- 14 April 2017 (210 messages)
-
Joined.
-
Спасибо!
-
Доброе утро! На докладе что -то прозвучало про union all
-
union как то хитро работает в кликхаусе?
-
Прозвучало если делать два запроса по части данных, то объединять их нужно в клиенте. Union all вылетит из-за нехватки памяти, т.к. запроса будет не два, а один.
-
Добрый день!
Использую ReplacingMergeTree и встретил очень интересное поведение. Дубликатов по ключу я не нашёл.
Но заметил большую странность. Как так получается что колличество уникальных ключей, больше чем общее колличество записей?
Ожидал увидеть обратную ситуацию при неразрешённых коллизиях, а тут совсем уже чёрная магия -
-
-
судя по кол-ву вопросов с ф-цией uniq наверное нужо создать какую-нибудь uniqApprox и поменять их местами 😊
-
> Алгоритм является очень точным для множеств небольшой кардинальности (до 65 536) и очень эффективным по CPU (при расчёте не слишком большого количества таких функций, использование uniq почти так же быстро, как использование других агрегатных функций).
> Не стоит бояться приближённых расчётов. Поэтому, используйте лучше функцию uniq. -
спасибо
-
Спасибо большое, цифры сошлись. ReplacingMergeTree за неделю при 4kRPS не оставил дубликатов.
Огненный движок! -
-
-
-
-
-
-
-
-
и seaborn еще)
-
Вот тут есть статья про все это: https://habrahabr.ru/company/ods/blog/323210/Открытый курс машинного обучения. Тема 2: Визуализация данных c Python
Второе занятие посвящено визуализации данных в Python. Сначала мы посмотрим на основные методы библиотек Seaborn и Plotly, затем поанализируем знакомый нам по п...
-
-
кстати, а как оптимально хранить IPv4 сетку в формате CIDR в CH?
-
Добрый день. скажите пожалуйста
Column campaign_id is not under aggregate function and not in GROUP BY
чтобы это значило? указал поле в select для вывода -
-
в select указал, а в group by?)
-
так я не хочу группировать по этому полю просто вывести
-
ну так агрегация по ней не считается -> там может быть много разных значений
-
-
покажи запрос. так проще будет)
-
SELECT
eventDate,
campaign_id,
ads_id,
group_id,
ads_start_id,
sum(spent) as spent,
sum(shows) as shows,
sum(clicks) as clicks
FROM banner_history_segments
WHERE ads_start_id IN(100)
GROUP BY ads_start_id, eventDate -
-
-
-
я что-то не понял. что значит случайное? а реально как?
-
-
а ну это подходит. мне без разницы в рамках одного старта всегда одна кампания
-
-
-
-
тогда уже и ad и group_id тоже в group by
-
-
они тоже в рамках одного старта одинаковые. но что быстрее будет выполнятся any(field) или еще пару группировок ?
-
-
почти одинаково - по разному
-
Joined.
-
можно хранить как битовую маску подсети, смотря что вы с ней делать собираетесь.
-
хочется ее потом удобно обрабатывать прямо в запросах, без магии и обработки
-
-
я тут в тикет откомментил, как хочу это видеть https://github.com/yandex/ClickHouse/issues/247 последний комментNew IP address functions/types (CIDR mask) · Issue #247 · yandex/ClickHouse
It would be great to have some kind of these IPv4-related (IPv6 too?) functions: IPv4NumToStringClassC(num) isn't enough for proper subnet handling. :) SELECT IPv4CIDRtoIPv4Range('1...
-
тут вопрос во-первых, чтобы сохранить в одном поле, а, во-вторых, чтобы декодировать удобно из компактного пердставления в удобоваримое для людей
-
Joined.
-
Получил ошибку Code: 89. DB::Exception: QuickLZ compression method is disabled: while receiving packet при запросе из представления
-
версия 1.1.54198
-
Люди, а после добавления пользователей надо рестартануть?
-
нет, подцепляется автоматом, если всё правильно
-
спасибо, значит у меня не правильно)
-
скажите еще плиз
SELECT sum(clicks) as clicks,
WHERE ... AND
(clicks <> 0 or shows <> 0)
дает ошибку Aggregate function sum(clicks) is found in WHERE or PREWHERE in query
как исключить из результатов записи у которых клики и показы по 0 ? -
я понял в чем ошибка. алиас который указывается после sum() .. воспринимается как само поле
-
то есть получается нельзя использовать алиасы с таким же названием
-
having?
-
what?
-
я понял)) работает. спасибо
-
Была похожая проблема, правда давно: https://github.com/yandex/ClickHouse/issues/7Error fetching data from materialized view · Issue #7 · yandex/ClickHouse
I loaded example ontime dataset and created a materialized view with the following definition: CREATE MATERIALIZED VIEW basic ENGINE = AggregatingMergeTree(FlightDate, Carrier, 8192) AS SELECT ...
-
да, я нагуглил её
-
что-то надо сообщить дополнительно? могу в ту же тему в гугл-группах
-
-
это обычный view:
CREATE VIEW analytics.apps_events ( app_name String, app_version String, os_name String, device_id String, event_time DateTime, event_date Date, event_name String, event_value String, screen_name String) AS SELECT app_name, app_version, os_name, device_id, event_time, event_date, event_name, event_value, screen_name FROM analytics.apps_clickstream WHERE isNotNull(event_name) OR isNotNull(event_value) -
запрос:
SELECT splitByChar('/', screen_name)[1] as sn, event_date, count(*) FROM analytics.apps_events where (...) group by sn, event_date -
ребят скажите плиз есть не заполненные поля string пустые. как проверить на не пустые поля?
-
-
Документация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
неа
-
-
и вправду.. как так вышло не понятно. при вставке tabseparated файлов писал ,'','',''
пишет по 70 символов во всех строках. может это потому что схема FixedString(70) ? -
-
-
я еще пока не привык)) это стандартное поведение fixedString ?
-
-
благодарю))
-
Удалось повторить так:
:) create table t1 (s1 Nullable(String)) engine=TinyLog
:) create view t1_v1 (s1 String) AS select s1 from t1
:) insert into t1 values ('aaa')
:) select splitByChar('/', s1) from t1_v1
То есть у вас наверно столбец screen_name Nullable(String) в таблице, но String во view -
да, именно так
-
спасибо, поправлю вьюху
-
а разве это не ок, когда я проверяю на null, и если не null пишу в колонку не-nullable типа?
-
-
еще клиент иногда крашится при таких запросах )
-
Подскажите, пожалуйста, как агрегировать данные по временному интервалу? Например, надо считать среднее по данным за каждые 5 секунд и записывать в новую таблицу? Можно ли написать агрегирующую функцию?
-
Есть специальный движок таблиц GraphiteMergeTree
-
попробуйте так
SELECT
(intDiv(toUInt32(EventTime), 5) * 5) * 1000 AS t,
count(*)
FROM requests
GROUP BY t
ORDER BY t ASC -
В документации его пока нет, но можно посмотреть вот тут https://github.com/yandex/graphouse/blob/master/doc/install.md#clickhousegraphouse/install.md at master · ClickHouse/graphouse
Graphouse allows you to use ClickHouse as a Graphite storage. - graphouse/install.md at master · ClickHouse/graphouse
-
может вам просто надо
insert into t2 (key, value) select toUInt64(time)/5*5 as key, avg(data) as value from t1 group by key
возможно вам нужен aggregating merge tree + avgState -
-
-
заменил InfluxDB на CH, нагрузка упала с 196% до 5% CPU
-
Можете теперь рядом сервер Lineage поднять 😊
-
не, я уже биткойны майню
-
-
@openbsod я как раз вам письмо написал :)
-
Скажите пожалуйста как сгруппировать по часу поле timestamp ?
-
toStartOfHour(timestamp)?
https://clickhouse.yandex/reference_ru.html#toStartOfHourДокументация ClickHouse | Документация ClickHouseClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
прямо в группировке можно использовать?
-
-
что-то не выходит совсем..
SELECT
toDateTime(eventTime) as hour,
...
FROM ...
GROUP BY ads_start_id
Column eventTime is not under aggregate function and not in GROUP BY -
ожидается что поле будет в groupby ?
-
-
<Error> ExternalDictionaries: Cannot create external dictionary 'products' from config path /etc/clickhouse-server/products_dictionary.xml: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Not found: dictionary.structure.attribute.null_value, e.what() = Not found
-
<structure>
<!-- Описание столбца, являющегося идентификатором (ключом) словаря. -->
<key>
<attribute>
<name>container_id</name>
<type>String</type>
</attribute>
<attribute>
<name>region_id</name>
<type>UInt16</type>
</attribute>
<attribute>
<name>item_id</name>
<type>String</type>
</attribute>
</key>
<attribute>
<name>price</name>
<type>Float32</type>
<null_value>0.0</null_value>
</attribute>
<attribute>
<name>rating</name>
<type>Float32</type>
<null_value>0.0</null_value>
</attribute>
</structure> -
ребят что может значит эта ошибка? может кто сталкивался
Code: 173, e.displayText() = DB::Exception: Allocator: Cannot mmap., errno: 12, strerror: Cannot allocate memory, e.what() = DB::Exception
делаю запрос около 15 группировок в таблицу 22 млн записей. неужели памяти оперативной не хватате ? -
-
нихрена се.. прожорвилвый кх
-
Уважаемые разработчики, есть инфа по поводу старого и грустного бага? https://github.com/yandex/ClickHouse/issues/127Problem with INSERT if having a VIEW with subqueries & AS keyword #127
That's a really strange one! When you create a view (let's call it test_stats) that has a subquery with multiple tables (test1 and test2) combined using UNION ALL clause, and the first tabl...
-
-
сдох после запроса сервер) капец
-
наверное из-за опции у сервера на кол. выделяемой оперативной памяти - там значение превышает количество установленной на сервере памяти и поэтому жрет все а потом unix начинает килять процессы и падает сервер
-
А если попробовать <null_value>0</null_value> ?
-
-
В ключ не надо, там null не может быть
-
-
-
Ну, это идеологически не правильно ) И насколько я понял Алексея, не поддерживается сейчас
-
-
-
У меня тоже CH постоянно умирает:
clickhouse-server(47269,0x700008df2000) malloc: *** error for object 0x140775000: pointer being realloc'd was not allocated
*** set a breakpoint in malloc_error_break to debug
2017.04.14 19:03:09.694920 [ 5 ] <Error> BaseDaemon: ########################################
2017.04.14 19:03:09.694945 [ 5 ] <Error> BaseDaemon: (from thread 4) Received signal Abort trap: 6 (6).
2017.04.14 19:03:09.755499 [ 5 ] <Error> BaseDaemon: 1. 1 libsystem_kernel.dylib 0x00007fffc3952dda __pthread_kill + 10
2017.04.14 19:03:09.755526 [ 5 ] <Error> BaseDaemon: 2. 2 clickhouse-server 0x000000010f44cf20 _ZN4Poco10ThreadImpl13runnableEntryEPv + 96
2017.04.14 19:03:09.755533 [ 5 ] <Error> BaseDaemon: 3. 3 libsystem_pthread.dylib 0x00007fffc3a3aabb _pthread_body + 180
2017.04.14 19:03:09.755540 [ 5 ] <Error> BaseDaemon: 4. 4 libsystem_pthread.dylib 0x00007fffc3a3aa07 _pthread_body + 0
2017.04.14 19:03:09.755546 [ 5 ] <Error> BaseDaemon: 5. 5 libsystem_pthread.dylib 0x00007fffc3a3a231 thread_start + 13 -
Подскажите про формат RowBinary (а то в доке про него написано мало, а хочется поиспользовать). Как должен выглядить POST-запрос, который вставляет данные в таком формате? Например, обычный запрос можно сгенерить строкой echo "('b', 1, 2)" | POST '127.0.0.1:8123/?query=INSERT INTO t VALUES' (и он будет выглядеть так https://pastebin.com/zNJjgggy), а я хочу послать запрос "INSERT INTO t VALUES FORMAT RowBinary", но не понимаю, как передавать значения. Или может где-нибудь уже написано про это более подробно?POST /?query=INSERT%20INTO%20t%20VALUES HTTP/1.1TE: deflate,gzip;q=0.3Connec - Pastebin.com
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
-
https://github.com/artpaul/clickhouse-cpp
https://github.com/hatarist/clickhouse-cli/blob/binary/clickhouse_cli/clickhouse/binary.pyGitHub - artpaul/clickhouse-cpp: ClickHouse C++ client libraryClickHouse C++ client library. Contribute to artpaul/clickhouse-cpp development by creating an account on GitHub.
-
-
-
-
Об этом же вчера было
-
https://github.com/yandex/clickhouse-presentations/tree/master/meetup5 и вот презентация, вродеclickhouse-presentations/meetup5 at master · ClickHouse/clickhouse-presentations
Presentations, meetups and talks about ClickHouse. Contribute to ClickHouse/clickhouse-presentations development by creating an account on GitHub.
-
-
-
-
-
-
-
-
-
-
-
-
С какой ошибкой падает? Сколько памяти на сервере? Что то ещё на сервере работает?
Покажите вывод free -m -
-
-
-
Мы серьёзно не работали с ClickHouse под Mac.
Могут быть проблемы из-за линковки с аллокатором. Должен линковаться tcmalloc, но судя по выводу, используется системный. -
При сборке наблюдаю еще вот такое:
In file included from /Users/user/develop/dni/ClickHouse/libs/libcommon/src/apple_rt.cpp:12:
/usr/include/time.h:171:3: error: typedef redefinition with different types ('enum clockid_t' vs 'int')
} clockid_t;
^
/Users/user/develop/dni/ClickHouse/libs/libcommon/include/common/apple_rt.h:26:13: note: previous definition is here
typedef int clockid_t;
^
In file included from /Users/user/develop/dni/ClickHouse/libs/libcommon/src/apple_rt.cpp:12:
/usr/include/time.h:177:5: error: declaration of 'clock_gettime' has a different language linkage
int clock_gettime(clockid_t __clock_id, struct timespec *__tp);
^
/Users/user/develop/dni/ClickHouse/libs/libcommon/include/common/apple_rt.h:27:5: note: previous declaration is here
int clock_gettime(int clk_id, struct timespec* t);
^ -
-
-
-
Люди, а можете сказать чем пользуетесь UInt или Int и почему )))
-
Все презентации со вчерашнего митапа в одном архиве:
https://yadi.sk/d/DVBMpnrT3GvnXpClickHouse для аналитиков 13.04.2017View and download from Yandex.Disk
-
Joined.
-
Мы используем и то, и другое, где надо.
-
Если я правильно понял, int занимает меньше места? где может пригодиться uint?
-
На разных версиях Mac OS, системные заголовочные файлы иногда содержат, а иногда не содержат нужные типы. Поэтому, в репозитории есть файл apple_rt.h с недостающими. Но ifdef-ы могут учитывать не все версии, и их надо поправить.
-
-
Там где знак не нужен )
-
Разницы в занимаемом месте нет.
-
Спасибо, тогда везде буду uint
-
Может нам собраться , посидеть где нить? )
-
пиво, девочки)
-
Может быть можно будет сделать митап + afterparty. Не знаю, входит ли это в программу наших мероприятий.
-
Кстати, может сделать хакатончик?
-
Тоже вариант. Какие темы?
-
что нибудь прогрессивное ) чтобы на хабре потом написать ))
-
перенос кх в аркадию отличная тема для хакатона
-
-
не... надо что поинтереснее )
-
-
что нибудь, где надо поломать голову, где нужно использовать скрытые фичи кх
-
Что такое аркадия?
-
исходники поискового движка
-
яндекса )
-
Да.
-
-
Ребята, а когда будет митап в Украине?)
-
<macros>
<layer>stat</layer>
<shard>01</shard>
<replica>example01-1.yandex.ru</replica>
</macros>
...
CREATE TABLE ... ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/visits', '{replica}', ... -
Скорее всего, в начале лета.
-
я скорее не понимаю в каком месте его пихать?
-
У нас используются для аргументов Replicated таблиц - чтобы выбрать путь в ZK.
-
-
В конфиге написано:
<macros incl="macros" optional="true" />
Значит либо в /etc/metrika.xml в элемент macros на верхнем уровне,
либо прямо в config.xml на это место. -
Для каждого сервера свой /etc/metrika.xml и там свои значения macros.
-
-
Что значит нумерация шардов?
-
OPTIMIZE
OPTIMIZE TABLE [db.]name [PARTITION partition] [FINAL]
Просит движок таблицы сделать что-нибудь, что может привести к более оптимальной работе -
Это шикарная дока.
-
да мне объяснили что макрос нужен на каждом сервере свой
-
Алексей добрый день. Хотел у вас поинтерисоваться если это не секрет. Как в UI так быстро в режиме реал тайм отображаете данные? Например у нас до кх вся статистка лежала в mysql. Мы сделали консольную команду которую повесили на cron она делает ряд запросов на агрегированние подсчет данных из статистики и кладет в оперативную память. а мы на ui видим сразу, но памяти жрет много. Тут вариантов пару либо отказаться от кеша и делать запросы на прямую к кх. либо в кеш писать только по запросу - пользователь авторизовался получил свою пачку данных (срок жизни кеша ограничен - при неактивности больше n часов кеш очищается). В идеале хотелось бы реал тайм. Может какие нибудь рекомендации дадите?
-
Отвечу в основном чате.
-
В Метрике кэш для отчётов не используется, запросы идут считать всё заново из неагрегированных данных.
-
Работает хорошо почти во всех случаях. Но для крупных счётчиков приходится включать сэмплирование по-умолчанию. Пользователь может изменить сэмплирование (например, выключить) - тогда отчёт грузится дольше.
-
Есть другие проекты, где кэш используется.
-
то есть в метрике результат получается на запрос к кх напрямую? у нас ситуация следующая - на главной странице есть около 5 графиков - для получение данных для них посылается 5 разных запросов в одну таблицу (например нужно узнать сколько кликов суммарно осуществилось для определенной сущности - например в рамках страны или городов). Если брать небольшой диапазаон в рамках одного пользователя и недельные данные то эти 5 запросов вложаться (я думаю) в секунду. если пользователь выберет весь период - например за год результат может быть получен и за секунд 5-10. соответственно это уже задержка. или это норма?
-
поэтому мы и прикрутили кеш в памяти. и получаем результаты данных моментально. но он конечно затратные на его заполнение и жрет памяти
-
Надо решать в зависимости от того, является ли отчёт одинаковым для большого количества пользователей или каждый раз уникальный.
В Метрике каждый пользователь смотрит свои отчёты, зачастую сильно кастомизируемые. Почти всегда с аутентификацией. Поэтому кэширование не имеет смысла - не поможет.
Если же у вас есть посещаемый сайт, где нужно показывать большой аудитории одни и те же графики, то без сомнения, их нужно кэшировать. -
И скорее всего, не только кэшировать, но и обновлять асинхронно.
-
нет. графики только в рамках аудентификации. в рамках юзера
-
ну тогда можно попробовать прикрутить праймери кей на user_id и по нему выбирать точечно по запросу
-
потому как сейчас мы не по user_id выбираем а по всем запускам показов
-
и получаем данные всех пользователей
-
Да. Подумайте, поэкспериментируйте.
-
мне понравилась таблица memory. жалко нельзя установить срок жизни данных
-
можно было бы как-то переливать туда данные и брать с неё
-
такой своего рода кеш) у меня есть еще один вопрос сегодня выполнил тяжеловестный запросик и получил падение сервера запустить не удалось только через полную остановку сервиса и полный запуск. не хватило 8 гигов памяти чтобы выполнить запросик. вопрос не в запросе даже, а в том почему сервер рассыпается - выдал бы ошибку и работал дальше. могу предположить что это из-за опции в конфигах максимальный объем памяти он установлен по стандарту в 10 гигов что больше 8)) поэтому жрет все не давай системе жить
-
и я так понял вылазит киллер и начинает килять что попало вот и расыпается
-
Всё верно. По-умолчанию лимит оперативки - 10 GB на каждый запрос.
-
понял спасибо алексей вы как всегда выручаете )
- 15 April 2017 (67 messages)
-
-
Joined.
-
Я бы предложил что-нибудь не смежное с кликстрим. Я не теряю надежду использовать КХ в других вариантах 😋
-
в admin tips-ах есть такая фраза "Use Linux software RAID (mdadm). Better to not use LVM."
Кто-то знает, почему LVM не люб и на сколько это критично? -
Я предполагаю, что это чтобы не было соблазна использовать Snapshot'ы которые в LVM сделаны отвратительно и очень сильно просаживают скорость работы
-
-
ну... спорное утверждение
-
я вот давно и успешно его использую начиная еще с Unix-ов (HP-UX, Solaris) и пока не довелось пользоваться снапшетами
-
и пользу в нем вижу
-
но сейчас вопрос не о том немного
-
если использовать LVM для создания RAID-10 без всяких снапшетов, это все еще "лучше не надо" для CH?
-
Snapshot'ы там просаживают скорость записи и чтения до печальных значений чуть чаще чем всегда
-
не планирую я испоьзовать эту фичу
-
-
просто для гибкой организации и управления пространстовм
-
-
обычно 1 сервер под 1 задачу, там в таком смысла мало )
-
обычно да
-
-
но даже одна задача (продукт) может состоять не нескольких потребителей
-
-
-
-
-
иметь возможность гибко выделять дисковое пространство по мере роста, иметь возможность разедилить (перераспределить) в дальнейшем по шпинделям и т.п.
-
да меня не надо убеждать, что лучше выделенные сервера иметь
-
я все сам понимаю
-
но есть теория и проекты в которых есть возможность это сделать, а есть другие варианты
-
КХ на сложные запросы в том числе может и ЦПУ и Оперативку подъесть немного, поэтому обычно мало смысла ставить больше 6-и дисков (можно конечно, особенно если диски небольшие, но под нагрузкой может уже захотеться больше цпу), а КХ умеет права доступа сам, поэтому под него в этом смысл примерно нулевой
-
ладно, в общем спасибо за ваше мнение
-
-
если появится кто-то, кто знает точно зачем и почему фраза эта появилась в типасх, то буду рад услашать пояснения
-
-
ну тогда нужно было еще добавлять подобные фразы про NFS-ы и т.д и т.п.
-
Оффтоп. Сейчас на митапе Заббикса Владышев сказал, что общался с командой CH на конфе Перконы ~1 год назад. И сказал, что отказался от интереса в эту сторону после озвученных концептуальных проблем. Возможно сейчас всё изменилось (с)
-
А что за проблемы там?
-
Менеджерский аргумент
-
swraid я думаю это предполагает ;)
-
не понял мысль
-
отсутствие NFS'ов всяких )
-
mdadm и вообще swaid немного проблематично сделать без блочного устройства
-
-
ну я это понял как: "не обязательно использовать дорогие аппаратные RAID контроллеры"
-
ну и эта фраза как бы подтверждает "Prefer more servers with inplace storage to less servers with huge disk shelves."
-
это подход типичный для BigData решений
-
JBOD и/или софтовый RAID + репкликация прикладного уровня
-
-
Joined.
-
Ну если будет летом обещанный рест, то можно начать складывать холодные данные в CH
-
Аппаратные рейды это же медленно :)
-
6 гбит на чтение при отсутствии записи
-
а куда слать багрепорт по поводу битой разметки в документации?
-
-
-
она просто судя по всему где-то отдельно собирается, в репе только огромный хтмл файл
-
-
http://clickhouse.readthedocs.io/en/latest/reference_en.html - те же граблиClickHouse Guide
ClickHouse — open-source distributed column-oriented DBMS
-
О, а readthedocs - хорошо?
-
-
Чуть менее актуальная русская есть тут. http://clickhouse-docs.readthedocs.io
Но как только доделаю англ, то все сольём и должно быть ок) -
Спасибо, очень ждём!
-
Не припоминаю, чтобы были какие-то концептуальные проблемы. Насколько я помню, речь шла о том, что мы можем это сделать.
-
Про LVM - мы его раньше использовали, чтобы делать несколько разделов. Были подозрения, что LVM даёт какой-то существенный оверхед, но их не удалось ни подтвердить, ни опровергнуть. Сейчас у нас используются серверы без LVM, но сравнить по-нормальному не удалось.
Также есть следующие соображения:
- снапшоты действительно приводят к тормозам - мы это наблюдали раньше, но не на серверах с ClickHouse (на них снапшоты никогда не использовали);
- не полностью понятно, как работает RAID-10 с помощью LVM - я так и не изучил до конца этот вопрос - даёт ли он такой же layout данных, как RAID-10 с помощью md (там ещё варианты - far, near), чтобы была хорошая скорость последовательного чтения. Мы никогда не использовали RAID с помощью LVM. -
Рейд средствами LVM делать вообще странно, у него есть некоторые особенности в виде необходимости отдельного хранилища метаданных, насколько я помню
-
-
-
- 16 April 2017 (48 messages)
-
Спасибо за фидбэк, очень интересно!
-
Вот еще интересен чей-либо опыт с ZFS на линуксе
-
-
-
Дарова
-
никто тут случайно на golang не пишет???
никак не могу на нем FixedString(16) сгенерировать из UUID и в CSV записать -
для clickhouse импорта надо =)
-
-
https://github.com/kshvakov/clickhouse/
и еще какой-то былGitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouseGolang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
дело не в драйверах
-
хотя.... может быть и надо было заюзать этот драйвер он вон FixedString поддерживает
-
просто когда начинал писать был только драйвер от roistat
который через HTTP работал -
Кстати, а какой гошный драйвер сейчас считается тру? Или пока не определились?
-
-
Тот что кинули использует native interface, довольно адекватный с виду. Правда есть подозрение что если нужно вставлять много данных, то любой драйвер будет хуже чем код специально под проект
-
Спасибо!
-
у меня в этот FixedString пытается записаться UUID
в каком формате вы вставляете батчи? -
ну то есть у меня много UUID
и я хочу получить буст по производительности для FixedString(16)
на группировочных запросах -
-
-
-
-
Joined.
-
-
-
-
Joined.
-
Joined.
-
Всем привет!
-
Такой вопрос: в репозитории
http://repo.yandex.ru/clickhouse/xenial/dists/stable/Contents-i386
тут только graphouse
http://repo.yandex.ru/clickhouse/xenial/dists/stable/Contents-amd64
а тут и графхаус и все остальные пакеты
Так и задумывалось? -
-
Ясно, спасибо!
-
А это кстати архитектурное ограничение или просто не хотелось тратить время на старую архитектуру?
-
Думаю, что второе. А что, есть потребность запускать на 32-битных серверах? Разве что на каком-нибудь raspberry pi, но там мало оперативки, не развернёшься :) Кстати, Алексей пробовал запускать на 64-битном ARM-е (была надежда, что большее количество ядер поможет).
-
Joined.
-
-
На самом деле на arm64 тоже вполне работает и собирается, но на данный момент нужно более 2g оперативки для сборки, а на всех доступных платах за 40 баксов - как раз ровно два, но это не большая проблема, надо распилить FunctionsArithmetic.cpp
-
Насколько я слышал, в кх есть места с ассемблерными вставками, их никто под что то кроме амд64 и арм64 не делал
-
-
-
Joined.
-
-
-
-
-
-
-
Вроде в момент когда выложили в опенсорс не у всех мест был else
- 17 April 2017 (104 messages)
-
Joined.
-
Всем привет. у меня вопрос для лайфтайм для внешних словарей
в доке написано
"Для cache-словарей может быть задано время устаревания (lifetime) данных в кэше. Если от загрузки данных в ячейке прошло больше времени, чем lifetime, то значение не используется, и будет запрошено заново при следующей необходимости его использовать."
<lifetime>
<min>300</min>
<max>360</max>
</lifetime>
а лайфтам в каких единицах указывается? в минутах или в секундах? -
-
спасибо
-
Всем привет.
Кто-нибудь использует функции для работы со словарями (в т.ч. словарями Яндекс.Метрики) в WHERE или PREWHERE секции? Например, WHERE regionToCity(RegionID)=55. Интересует, так же ли это эффективно, как WHERE CityID=55, если держать CityID в собственном столбце (не в ПК). -
можете подсказать, как избежать ошибки DB::Exception: ARRAY JOIN requires array argument. в случае, когда тип колонки Nullable(Array(...))?
-
-
Cannot convert data from a nullable type to a non-nullable type.
-
А зачем массив делать nullable? Пустым нельзя обойтись?
-
мне показалось, что так будет удобнее при запросах
-
Не будет
-
Лучше стараться не использовать null
-
Их поддержка сейчас не самая лучшая
-
ну и к тому же это свойство страницы, массива может либо не существовать, либо он может быть пустым
-
Ну только если это действительно важно для запросов. Хотя можно отдельный атрибут записать, по сути тоже признак null
-
А если у нас nested и массивы должны быть одинакового размера, в этом случае нормально использовать null, правильно понимаю?
-
так и было раньше. я посмотрел на нуллы после первого их появления в CH – тогда было много багов, поэтому решил подождать с изменением таблиц. сейчас на первый взгляд всё показалось ок, но вот arrayJoin я как-то упустил.
-
Ну только если это действительно важно для запросов. Хотя можно отдельный атрибут записать, по сути тоже признак null
-
я думаю, что нормально было бы при наличии {column} IS NOT NULL конверить такую колонку из Nullable-типа в обычный (это чисто пользовательский взгяд)
-
День добрый. Вопрос. При создании materialized views в структуре таблиц создаются некие внутренние структуры типа .inner.<view_name>. Произошла странная ситуация, было переполнение места на сервере - в итоге самих вьюх нет, а вот эта ".inner"-структура осталась, дропами не удаляется и новые вьюхи не создаются. Что делать?
-
Смотрите, поддержка null появилась в КХ достаточно недавно и по прежнему есть ограничения в работе
-
Поэтому их ещё и в документации нет.
-
Я это понял
-
Если есть возможность их не использовать - не используйте.
-
Если их не задействовать, то как тогда обходить ошибку не соотвесвтия размеров массивов при вставке в нестед колонки, ибо если ты их оставляешь пустым - то у тебя получается ошибка. Я пока оставил null тип.
-
Что за ошибка?
-
момент
-
Exception("Sizes of nested arrays do not match")
-
это эксепшн точнее
-
решено.
drop table `.inner.<view_name>`; -
Всем привет!
Есть проблема.
На запрос SELECT * from db.events LIMIT 1 FORMAT JSONCompact
выпадает
Code: 246. DB::Exception: Received from localhost:9001, ::1. DB::Exception: Received from ch-1:9001, 192.168.58.36. DB::Exception: bad size of marks file `/mnt/hadoop/data/clickhouse/data/db/events_local/20170313_20170331_3_1017308_5392/items%2Ename.null.mrk':5312, must be: 2096.
db.events - Это distributed над db.events_local (ReplacingMeergeTree)
OPTIMIZE TABLE groot3.events_local PARTITION 201703 FINAL - совсем не помог
Хоть какие-нибудь идеи ?? -
-
1.1.54165
-
-
-
Спасибо, буду апдейтиться
-
Обновился до 1.1.54198 - результата не добился.
Всё равно в трейс вылетает эта ошибка. -
Побились данные, есть программа на С которая может "отрезать" побитую часть: https://github.com/ludv1x/ClickHouse/tree/broken-part-cutter/utils/broken-part-cutterludv1x/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
Как я понимаю, в таком случае данные побиты и на реплике?
-
Добрый день. подскажите делаю
select toDateTime(eventTime)
group by toHour(eventTime)
Column eventTime is not under aggregate function and not in GROUP BY
ожидается - в select вывести дату, а сгруппировать по часу -
-
а вообще, я ж вроде говорил уже про https://clickhouse.yandex/reference_ru.html#toStartOfHourДокументация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
-
я просто не пойму почему нельзя просто вывести поле а сгруппировать по части данных этого поля. зачем группировать по секундно и потом еще по часу ?
-
-
так мне и не надо
-
только по часу
-
GROUP BY
eventTime,
toHour(eventTime),
? не уж то так надо писать? -
-
ну тогда как вывести нормальную дату в виде timestamp а сгруппировать только по часу?
-
-
toStartOfHour, в третий раз пишу
-
это не уберает ошибку
-
-
хочу по часу сгруппировать то есть да 24 строки
-
-
не понял
-
-
потому что так работает sql в любой базе отличной от mysql.
-
-
поясните пожалуйста в рамках моего примера
-
-
-
-
-
мне нужно сгруппировать по часу посчитав для этого часа сумму записей. поэтому хочу к часу привести но вывести полную дату
-
-
-
это Y-m-d h:i:s
-
просто вывести datetime поле
-
но группировку осуществить по часу
-
-
:) SELECT toStartOfHour(timestamp) AS hr, count() FROM click WHERE timestamp BETWEEN '2017-04-13 20:00:00' AND '2017-04-14 03:00:00' GROUP BY hr ORDER BY hr
┌──────────────────hr─┬─count()─┐
│ 2017-04-13 20:00:00 │ **** │
│ 2017-04-13 21:00:00 │ **** │
│ 2017-04-13 22:00:00 │ **** │
│ 2017-04-13 23:00:00 │ **** │
│ 2017-04-14 00:00:00 │ **** │
│ 2017-04-14 01:00:00 │ **** │
│ 2017-04-14 02:00:00 │ **** │
└─────────────────────┴─────────┘ -
хм. вроде то что надо. я понял смысл
-
Спасибо
-
toStringCutToZero скажите эта функции сильно грузит сервак (серер уходит в аут). В чем может быть дело?
-
-
-
может и проще. просто когда результат возвращается от кх то там где строки куча байт символов
-
поэтому хочется вырезать их чтобы получить нормальную строку
-
вот даже сравнил вешаю на одно поле toStringCutToZero и получаю в 2 раза дольше выполнение запроса
-
-
хотя на счет в 2 раза дольше. это как-то случайно так вышло
-
помоему они одинаковы по производительности
-
-
-
ладно будем думать)) но тут есть какой-то баг крашится сервак из-за применения этих функций например два поля fixedString и два поля пытаешься обработать функцией в итоге сыпется сервак. решение - просто сделал toString на одно из полей
-
-
toString(applicationName) as applicationName,
toStringCutToZero(os) as os, -
-
applicationName String, os FixedString(70)
-
-
ну тут вроде все правильно
-
сча найду это поле
-
а вот я понял я на поле типа String вешал toStringCutToZero
-
и это вызывает краш сервера
-
никакого эксепшена ничего. просто висит и пытается выполнить запрос как в это время сервер уже сдох)
-
-
да это вызвало падение сервера
applicationName - String -
-
что-то с первого раза не воспроизводится. а в логах что?
-
Я уже посмотрел и воспроизвёл - это баг.
-
😲
-
Мы уже знаем, что следующий митап будет в Екб где-то в середине мая.
Сейчас выбираем темы для докладов. - 18 April 2017 (204 messages)
-
-
Доброе утро! Подскажите пожалуйста, а куда надо положить csv файлик чтобы загрузить его в КХ? Спасибо
-
-
Вот в доке написано cat <<_EOF | clickhouse-client --database=test --query="INSERT INTO test FORMAT CSV";
-
у меня файлик называется dump.csv
-
-
~ ❯ clickhouse-client -q 'CREATE TABLE test (s String, x Int64) ENGINE = TinyLog;';
~ ❯ cat test.csv
"hello",123
"world",456
~ ❯ cat test.csv | clickhouse-client -q 'INSERT INTO test FORMAT CSV';
~ ❯ clickhouse-client -q 'SELECT * FROM test FORMAT PrettyCompactNoEscapes';
┌─s─────┬───x─┐
│ hello │ 123 │
│ world │ 456 │
└───────┴─────┘ -
cat: test.csv: No such file or directory
-
-
-
-
Вот мой и вопрос был )) в той же папке, это какой ))
-
-
-
How To Use cd, pwd, and ls to Explore the File System on a Linux Server | DigitalOcean
Taking your first steps on the command line can be rather daunting. In this article, we seek to make your introduction easy and straight forward. We are going to start small by showing you how to move around on the command line, find out where you are
-
Спасибо взлетело. А команда "cat" нормально прожует файл в 150 гб? или есть более оптимизированные?
-
-
-
Благодарю 👍
-
тут нет тру или не тру, если вы, например, хотите использовать встроенные функции CH для вставки данных то используйте github.com/roistat/go-clickhouse т.к. он работает поверх http и просто пересылает запрос на сервер, напротив https://github.com/kshvakov/clickhouse использует "нативный" формат который требует преобразования данных на клиенте, т.е. если поле FixedString(16) то он и ждет 16 байт, а не UUIDStringToNum('uuid-uuid'), но он позволяет вставлять данные в 2-3 раза быстрее чем через http интерфейс если его использовать в обход гошного интерфейса https://github.com/kshvakov/clickhouse/blob/master/examples/direct.goGitHub - roistat/go-clickhouse: Golang ClickHouse connector
Golang ClickHouse connector. Contribute to roistat/go-clickhouse development by creating an account on GitHub.
-
и еще, https://github.com/kshvakov/clickhouse поддерживает стандартный гошный интерфейс для работы с базами данных, конечно если вам это важноGitHub - ClickHouse/clickhouse-go: Golang driver for ClickHouse
Golang driver for ClickHouse. Contribute to ClickHouse/clickhouse-go development by creating an account on GitHub.
-
Доброе утро, есть ли возможность проставить DEFAULT для столбца в Nested?
create table test2 (
id Int8 ,
date Date,
items Nested
(
name String DEFAULT 'None',
type String DEFAULT 'None')
) ENGINE = ReplacingMergeTree(date, (id), 8192)
Syntax error: failed at position 77 (line 6, col 17) -
Есть неудобный способ:
CREATE TABLE table_test
(
date Date,
isp.name Array(String),
isp.ispHash Array(Int64) DEFAULT arrayMap(x -> cityHash64(x), isp.name)
) ENGINE = MergeTree(date, date, 8192)
(несколько столбцов-массивов с общим префиксом до точки в имени, полностью эквивалентны Nested структуре). -
-
Спасибо большое, заработало!
Есть ещё один (глупый) вопрос, но я с ним не могу разобраться.
Есть таблица:
CREATE TABLE test.test ( ts String DEFAULT \'None\', ts2 String DEFAULT \'None\', ti2 Int32 DEFAULT CAST(0 AS Int32), date Date) ENGINE = ReplacingMergeTree(date, ti2, 8192)
Как правильно инсёртить пустые строки? В документации не нашёл примера.
:) insert into test values ( 'kjh',,,'1990-08-14')
INSERT INTO test VALUES
Exception on client:
Code: 62. DB::Exception: Cannot parse expression of type String here: ,,'1990-08-14')
Connecting to database test at localhost:9000.
Connected to ClickHouse server version 1.1.54198.
Заранее спасибо! -
-
-
:) insert into test values ( 'kjh','',,'1990-08-14')
INSERT INTO test VALUES
Ok.
1 rows in set. Elapsed: 0.034 sec.
:) select * from test
SELECT *
FROM test
┌─ts──┬─ts2─┬─ti2─┬───────date─┐
│ kjh │ │ 0 │ 1990-08-14 │
└─────┴─────┴─────┴────────────┘
1 rows in set. Elapsed: 0.007 sec.
:) -
Получается что он не значение поумолчанию вписал, а то которое я передал, т.е. ''
-
-
-
-
Ок, понял Вас. Спасибо.
Это можно считать багом и написать git-issue, или это ожидаемое и стандартное поведение для String? -
-
-
Joined.
-
Есть ещё один вопросик.
При инсёрте ловлю эксепшен из Functions/FunctionsArray.cpp
throw Exception{"Function array requires at least one argument.", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH};
Можете помочь разобраться что прокидывается в NUMBER_OF_ARGUMENTS_DOESNT_MATCH и при каком кейсе должно вылететь это исключение? -
-
GitHub - crobox/clickhouse-scala-client: Clickhouse Scala Client with Reactive Streams support
Clickhouse Scala Client with Reactive Streams support - GitHub - crobox/clickhouse-scala-client: Clickhouse Scala Client with Reactive Streams support
-
Привет! Поправте меня пожалуйста: есть цена 650.00р я умножаю ее на 1000000, чтобы вставить в Uint64 ругается на ошибку 65000000.00
-
-
а зачем и умножать и еще и конвертить?
-
потому что 650.01 * 100 = 65001.00
-
я вообще пытаюсь распарсить csv (insert into T format csv)
-
потому что float * int = float
-
Спасибо. только написано что не на 100 а на 1000000
-
-
))))
-
(insert into T format csv) и где сюда еще и toUInt64()
воткнуть? -
-
-
Все. Усек))
-
Спасибо за помошь))
-
Добрый день!
-
Сложилась такая ситуация:
-
изза человеческого фактора, были задублированы данные за некторое время
-
есть уникальный идентификатор каждого события
-
теоретически можно данные за сегодня перенести в другую таблицу
-
вопрос заключается, можно ли как-то друпнуть данные за сегодня?
-
дропать все таблицу не катит
-
там больше 1 млрд событий
-
-
вроде как КХ хранит данные порционно
-
да, я и говорю
https://clickhouse.yandex/reference_ru.html#Манипуляции%20с%20партициями%20и%20кускамиДокументация ClickHouse | Документация ClickHouseClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
-
-
я посмотрел, что у меня партиции по дням, а не месяцам
-
я так полагаю, что можно дропнуть партицию за сегодняшний день
-
-
-
что будет если физически удалить куски данных из партиции?
-
теоретически - можно задетачить месяц
-
поправить куски - вставив уникальные данные и потом заново заатачить данные
-
тут люди с битыми данными мучаются, а вы их самостоятельно побить хотите )
CREATE TABLE table_april AS table;
INSERT INTO table_april SELECT * FROM table WHERE date >= '2017-04-01' AND ...; -- или как там от дублей избавитесь
ALTER TABLE table DETACH PARTITION '201704';
INSERT INTO table SELECT * FROM table_april;
что-то типа того должно пройти безболезненно -
учитесь жить с такими дубликатами, limit by вам в помощь https://clickhouse.yandex/reference_en.html#LIMIT N BY modifierClickHouse Documentation | ClickHouse Documentation
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
немного не понимаю, как связаны задвоенные данные с LIMIT
-
и я бы посмотрел на вас, если бы вам пришлось заплатить в 15 раз больше, чем вы заработали 😕
-
при условии, если "жить с дубликатами"
-
-
-
пример
CREATE TABLE diff_test
(
session_id String,
price Float64,
action_at DateTime
) ENGINE = Memory;
insert into diff_test values ('session1', 0.42, '2017-02-14 10:16:00'),
('sessiondup1', 0.84, '2017-02-14 10:18:00'),
('sessiondup1', 0.42, '2017-02-14 10:16:00'),
('session2', 0.42, '2017-02-14 10:19:00'),
('sessiondup2', 0.42, '2017-02-14 10:19:00'),
('sessiondup2', 0.42, '2017-02-14 10:19:00'),
('session2', 0.42, '2017-02-14 10:19:00'),
('session3', 0.42, '2017-02-14 10:19:00');
и
select * from diff_test order by action_at limit 1 by session_id;
SELECT *
FROM diff_test
ORDER BY action_at ASC
LIMIT 1 BY session_id
┌─session_id──┬───────────────price─┬───────────action_at─┐
│ session1 │ 0.42000000000000004 │ 2017-02-14 10:16:00 │
│ sessiondup1 │ 0.42000000000000004 │ 2017-02-14 10:16:00 │
│ session2 │ 0.42000000000000004 │ 2017-02-14 10:19:00 │
│ sessiondup2 │ 0.42000000000000004 │ 2017-02-14 10:19:00 │
│ session3 │ 0.42000000000000004 │ 2017-02-14 10:19:00 │
└─────────────┴─────────────────────┴─────────────────────┘
5 rows in set. Elapsed: 0.016 sec. -
я понял, не знал
-
спасибо!
-
-
мы вынуждены использовать limit by, раньше было другое, костыльное, решение и оно работало медленнее
-
-
-
Добрый день! Кто-нибудь сталкивался с задачей сравнения данных по периодам? Например, показатели за эту неделю по сравнению с показателями прошлой недели. Эту задачу можно решить одним запросом, но он выглядит довольно громоздко. Быть может, у кого-то был опыт решения аналогичной задачи?
-
Приветствую!
-
А почему бы не заюзать графану для этого?
-
тупо сделать два графика и врубить "cursor following"
-
тогда ведя курсор по одному графику он будет двигаться и по другому, синхронно
-
да, он выглядит довольно громоздко.
-
если потребитель этих данных - хомо сапиенс, тогда сработает я думаю ))
-
я и заюзал) данные нужны в табличной форме и у меня получилось это сделать, но запрос на сравнение выглядит примерно так
SELECT
(ReqsNow / ReqsPrev - 1) Reqs
FROM
(
SELECT
minus($to, $from) range,
toDateTime(minus($from, range)) prevFrom,
sumIf(Reqs, (DateTime BETWEEN prevFrom AND $from)) ReqsPrev,
sumIf(Reqs, (DateTime BETWEEN $from AND $to)) ReqsNow
FROM $table
WHERE DateTime BETWEEN prevFrom AND $to
) -
и меня не покидает мысль, что это можно решить более оптимальным способом
-
@hagen1778 не проще просто сгруппировать данные по нужным дименшинам (простой group by) для этой неделе и прошлую, а визуализировать результат уже в приложении? пивот таблицей (добавить измерение "неделя") или чартом
-
-
-
можете подсказать, как вставить пустой массив не изнутри clickhouse-client? при [] получаю ошибку DB::Exception: Function array requires at least one argument..
-
в clickhouse-client работает select emptyArrayUInt32()
-
Да, спасибо! Вы мне помогли
-
-
Joined.
-
а без values можно как-нибудь? нужно заимпортить TSV
-
в clickhouse-client и insert into x values([]) работает.
-
Добрый день!
-
Столкнулся с проблемой дубликатов. В таблице есть данные, которые нужно переодически обновлять. Пытаюсь сделать это через инсерт. Подскажите, пожалуйста, какие есть пути решения данной задачи в clickhouse. Спасибо.
-
Пробовал ReplacingMergeTree, но он дубликаты схлопывает только при слиянии. Нужно выбирать только самые свежие.
-
-
попробую, спасибо.
-
Чуть выше предложили использовать Limit BY
-
LIMIT BY вернет первое значение, насколько я понимаю. нужно последнее.
-
-
Добрый день. через curl шлю запрос. прилетает жирный ответ (куча строк) за счет чего время отправки и получение достигает около 2 минут. как тут быть?
-
-
-
-
Они не такие классные как наш ))
-
в каком смысле в файлик выводить? на сервер кх сразу в файлик писать?
-
-
select
-
-
получаю результат в виде 30 тыс строк (там группировка по часу и по другим полям sum)
-
вы имеете ввиду сразу в файл писать. но это просто агрегация на фоне статистических данных
-
подробная для администратора
-
30 тыс строк это всего период за неделю
-
пачками шлем. получаем результат пишем в файл
-
файловый кеш
-
но результат от кх приходит через минуту две. вот это проблема(
-
т.к. много данных
-
-
ага
-
бывает через 3)
-
-
да запрос жирноват. 5 sum и 7 группировок
-
но тут проблема скорее в другом. много результатов
-
я пишу эти же результаты в файл. и файлик выходит около 50-100 мб
-
а сколько времени выполняется сам запрос?
-
можно http компрессию включить как вариант
вот примеры как раз с curlом есть
https://github.com/yandex/ClickHouse/blob/6eb9bac6eb8c6697c1b9b3ed24351d32dbc5e81e/dbms/tests/queries/0_stateless/00302_http_compression.shyandex/ClickHouseClickHouse is a free analytic DBMS for big data.
-
как проверить ? напрямую в клиенте кх ? без курла ?
-
да
-
-
-
вот прикол в том что если например обернуть это дело в select count(*) FROM (тут мой другой select жирный) то через клиент напрямую 3 сек
-
Showed first 10000.
1786493 rows in set. Elapsed: 9.159 sec. Processed 1.79 million rows, 960.02 MB (195.88 thousand rows/s., 104.82 MB/s.) -
я так понимаю это 10 000
-
или статистика за весь select ?
-
Showed это что? отобразил только 10 000 а запрос обработал за 9 сек ?
-
все так
-
https://clickhouse.yandex/reference_ru.html#count()
Запрос вида SELECT count() FROM table не оптимизируется, так как количество записей в таблице нигде не хранится отдельно - из таблицы будет выбран какой-нибудь достаточно маленький столбец, и будет посчитано количество значений в нём.
думаю поэтомуДокументация ClickHouse | Документация ClickHouseClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
тогда видимо все остальное время он выкачивает данные в ответ на запрос))
-
-
-
ладно что нибудь придумаю спасибо )
-
-
-
-
-
-
-
-
-
-
как вариант. но у нас группировка по часу представь сколько результатов
-
скорее будем слать напрямую запросы
-
с пагинацией да
-
а от кеша откажемся
-
не, я имею ввиду:
where date >= 2016-01-01 and date <= 2016-03-01 -> where date >= 2016-01-01 and date < 2016-02-01 union all where date >= 2016-02-01 and date <= 2016-03-01 -
разве это не одно и тоже если бы вы написали битвин из двух дат?
-
-
надо попробовать спасибо)
-
-
Joined.
-
Всем привет!
Такой вопрос: а где нибудь есть описание system.metrics и подобных таблиц? -
кстати, видео в шапке https://www.youtube.com/watch?v=AXSQbV8Zhvg чет недоступно больше
-
самое полное - описание кодом ;)
-
-
-
-
-
-
-
-
Joined.
-
кто нибудь знает предел кх - одновременных запросов select ?
-
сколько можно спросить или сколько он может ответить?)
-
сколько асинхронных запросов могу отправить одновременно?
-
Там есть переменная в конфиге, по-умолчанию — 100. Сколько потянет — не знаю
-
https://clickhouse.yandex/reference_ru.html#Пропускная способность при обработке большого количества коротких запросов.Документация ClickHouse | Документация ClickHouse
ClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
понял
-
Joined.
-
-
-
-
-
404
-
сорри, по памяти писал https://medium.com/@f1yegor/clickhouse-primary-keys-2cf2a45d7324ClickHouse Primary Keys
Recently I dived deep into ClickHouse. ClickHouse is column-store database by Yandex with great performance for analytical queries. For…
-
Всем привет!
Обсуждаем ClickHouse, задаём любые вопросы, стараемся не флудить!
Информация: https://clickhouse.yandex
Страничка на вики - https://ru.wikipedia.org/wiki/ClickHouse
Доклад про ClickHouse с Highload++: https://www.youtube.com/watch?v=TAiCXHgZn50
Google группа - https://groups.google.com/forum/#!forum/clickhouse
Чат на английском: https://t.me/clickhouse_enClickHouse DBMSClickHouse is a fast open-source column-oriented database management system that allows generating analytical data reports in real-time using SQL queries
-
None
-
-
-
+1
-
полезная штука очень
- 19 April 2017 (90 messages)
-
-
-
-
-
-
-
Какая версия сервера?
-
-
-
Поставьте 1.1.54198
http://repo.yandex.ru/clickhouse/trusty/pool/main/c/clickhouse/
Сейчас это последняя stable. -
-
-
Joined.
-
доброе утро коллеги. а есть возможность в CH сделать аналог инфлюксовского last() ... group by time(), т.е. разбить на произвольное количество интервалов и взять последнее значение из каждого? мануал несколько раз перерыл, но пока особо идей не появилось.
-
-
-
argMax(arg, val)
-
max(time) вполне подойдет
-
вопрос, видимо, в том как разбить timeseries по группам в интервалы, чтобы у каждой группы взять max()?
-
-
^
-
а если у меня наносекундная точность для time?
-
и интервалы с наносекундной точностью тоже
-
то есть мне нужно разбить time UInt64, value String промежуток на равные части(100, например), и взять последнее значение value из каждого
-
time UInt64 для каждого интервала могу из кода передать
-
-
-
хмм, интересная мысль, спасибо!
-
Игорь, знаете, не получилось пока. интервалы есть, а как их теперь связать с основной таблицей? то есть что-то подобное? только рабочее :)
select arrayJoin([0,40,70]) as start, arrayJoin([40,70,100]) as end, max(time) from points where time between start and end group by time -
-
вроде есть уже, был где-то то ли в конфиге, то ли в репозитории пример
-
тоже видел
-
должна быть
-
-
yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
-
-
может кто еще подскажет решение моего вопроса по time series, а-ля инфлюксовский last() ... group by time()? я тут даже оформил его в гист :) https://gist.github.com/tonky/bede878db55913f7d2edb9368d3774bfclickhouse time series
clickhouse time series. GitHub Gist: instantly share code, notes, and snippets.
-
))
-
о блин, спасибо
-
-
А вот этот PR зарелижен https://github.com/yandex/ClickHouse/pull/680 в деб репо?stable column order in BufferBlockInputStream by ztlpn · Pull Request #680 · yandex/ClickHouse
ClickHouse is a free analytic DBMS for big data.
-
-
оки, ждем)
-
Подскажите, пожалуйста, как записать пачку данных в CH при помощи питона (2.7)? использую библиотеку infi.clickhouse_orm.. Пробовала стандартной функцией insert, но там требуется схема, исполнение завершается ошибкой.. Знать бы как должна выглядеть эта схема, я бы подготовила данные в таком формате
-
-
есть идея доработать https://github.com/f1yegor/clickhouse_exporter чтобы иметь по одному экспортеру на кластерGitHub - f1yegor/clickhouse_exporter: This is a simple server that periodically scrapes ClickHouse stats and exports them via HTTP for Prometheus(https://prometheus.io/) consumption.
This is a simple server that periodically scrapes ClickHouse stats and exports them via HTTP for Prometheus(https://prometheus.io/) consumption. - GitHub - f1yegor/clickhouse_exporter: This is a si...
-
Коллеги , хочу задать глупый вопрос - по какому принципу лучше всего сегменитровать данные на шарды, нормально ли разделять их не отталкиваясь от самих данных и предметной области, а поровну инсертить по 3 шарда по 2 репликам, а потом делать селекты через distributed таблицу?
-
Вам нужно создать модель данных
-
-
-
-
-
-
-
да
-
-
-
Интересно сравнить производительность zetcd с zookeeper и вообще характеристики оного
-
да, пофиксили не очень давно
-
Пока не гонял тесты, на неделе будем смотреть. С учётом того что под капотом etcd а там заявлено до 1000 запросов на запись в секунду должно быть норм
-
Ну вот интересно )
-
-
Joined.
-
Всем привет! Вопрос касательно зукипера в разных дц. Как правильнее делать - один общий кластер или один дц делать мастером, а остальные как observers? Если общий кластер, то не будет ли запись сильно страдать? Благодарю!
-
-
У нас везде один общий крос-дц кластер
-
Докер-образ yandex/clickhouse-server не стартует с дефолтным конфигом командой, которая написана на странице https://hub.docker.com/r/yandex/clickhouse-server/
Выпадает с ошибкой <Error> Application: Net Exception: Cannot assign requested address: [::1]:8123
Покрайней мере в macos -
докер по дефолту без ипв6 вроде
-
Распределять данные по шардам случайным образом нормально, если только нет цели оптимизировать какой-то один важный случай распределённых IN или JOIN. Для примера - если вы часто делаете JOIN по UserID, то и распределять данные по кластеру лучше по UserID - тогда можно будет делать локальные JOIN-ы, так как соответствующие данные будут на одном сервере.
-
--ipv6 —fixed-cidr-v6=2001:db8:1::/64
если докер так запустить, то заработает. а кто может поправить в докере не знаю -
да я уже справился. это багрепорт )
-
Даже ты! это же опенсорс!
-
fix listening host in server docker image · yandex/ClickHouse@e552983
ClickHouse is a free analytic DBMS for big data.
-
я нашел крайнего:)
-
кажется для докера это не нужно, в него все равно никто лишний не попадет, даже если слушать *
-
-
у меня не запсутилось вообще
-
Enable IPv6 support
How to enable IPv6 support in the Docker daemon
-
сам читай в общем :)
-
Ответил внутри gist.
-
@milovidov_an круто, спасибо большое!
-
@AndreevDm спасибо! Попробуем так и сделать :)
-
Joined.
-
Добрый вечер! А есть ли функциональность полнотекстового поиска?
Или считается что для целей быстрой аналитики он слишком громоздкий? -
-
-
Поиска по словоформам нет.
-
Спасибо!
-
Joined.
- 20 April 2017 (275 messages)
-
добрый день. ребята подскажите плиз как по неделям сгруппировать ?
-
-
можно пример ?
-
-
:) select toRelativeWeekNum(a), count() from (select [toDate('2017-01-01'), toDate('2017-01-02'), toDate('2017-01-03')] as a) array join a group by toRelativeWeekNum(a)
SELECT
toRelativeWeekNum(a),
count()
FROM
(
SELECT [toDate('2017-01-01'), toDate('2017-01-02'), toDate('2017-01-03')] AS a
)
ARRAY JOIN a
GROUP BY toRelativeWeekNum(a)
┌─toRelativeWeekNum(a)─┬─count()─┐
│ 2452 │ 2 │
│ 2451 │ 1 │
└──────────────────────┴─────────┘
2 rows in set. Elapsed: 0.002 sec. -
-
а можно ли как-то в human виде диапазаон увидеть? а то выводит 2464 2449 2445
-
-
toMonday()
-
что значат эти числа))
-
-
-
-
ну в документации же написано, что номер недели, начиная с некоторой даты
-
-
А что мешает хранить номер влна в int16?
-
-
их 100 на железку
-
Да, это так.
-
-
не совсем понял. начиная с какой даты он берет?
2464
2449
2445
2454
2465
2443
2455
2444 -
-
так вам таки номер, или список активных вланов?
-
кол-во недель, прошедших с 1 января 1970
-
-
номер, с поиском позже
-
кстати, да. я, прочитав описание, рассчитывал на второй аргумент, относительно которого можно считать число недель )
-
может, указать это в документации, а то "начиная с некоторого фиксированного момента в прошлом" слишком размыто и запутанно?
-
Я тоже.
-
а в каком-то формате вывести нельзя? например 2017-01-01 - 2017-01-07 ?
-
-
-
-
👍🏻похоже на правду)) приду попробую
-
toMonday() же, нет?
-
а в каком-то формате вывести нельзя? например 2017-01-01 - 2017-01-07 ?