Дмитрий
25.09.2017
08:54:53
Александр
25.09.2017
08:59:46
Я бы date для ключа партиционирования брал из даты изменения, что бы можно было потом старые логи изменения заказов архивировать и выкидывать
Кирилл
25.09.2017
09:03:44
Я тоже думаю.. но у заказа важны 2 даты - и дата поступления и дата последнего изменения.. И выборки нужны в одинаковом количестве по обоим этим датам... И тут уже возникают сомнения в эффективности кликхауса для такого кейса.. Но спасибо за ответы, советы.. я пока все таки еще в раздумьях, буду тестировать запросы, сравнивать с PostgreSql.
Konstantin
25.09.2017
09:14:28
Google
Tima
25.09.2017
09:15:05
Александр
25.09.2017
09:15:08
Konstantin
25.09.2017
09:15:39
и использовать ее для 99% запросов
Tima
25.09.2017
09:18:19
Зачем нужна такая таблица с Log?
Кирилл
25.09.2017
09:18:42
Стоит ли Materialized View использовать для такого? Или лучше вставлять данные отдельно в 2 таблицы, т.к. не поддерживается Alter?
я имел в виду оставить таблицу log и завести такую же таблицу ReplacingMergeTree которая будет схлопываться со временем по orderid
Konstantin
25.09.2017
09:18:46
Кирилл
25.09.2017
09:19:44
Желательно хранить всю историю изменения заказов, чтобы по каждому можно было посмотреть кто и каким способом его менял.
Зачем нужна такая таблица с Log?
Konstantin
25.09.2017
09:20:27
Google
Tima
25.09.2017
09:21:15
Кирилл
25.09.2017
09:22:03
Спасибо. И еще такой кейс, что клик хаус предполагает что записи в таблицу происходят большими пачками 1000+ штук. А тут они могут происходить как пачками (выгрузки по Апи, Импорт Excel и т.п.) а также и менеджеры часто правят заказы штучно.. Это не страшно?
Konstantin
25.09.2017
09:22:47
а сколько у вас менеджеры могут делать импортов в секунду?)
Tima
25.09.2017
09:25:18
Но как только пойдет вставка по 1-10 запись каждую секунду - фоновые процессы слияний начнут "грузить" систему и скорость обработки запросов кратно упадёт
Кирилл
25.09.2017
09:27:05
Nikolai
25.09.2017
09:51:49
Коллеги, добрый день, у меня начала вылезать ошибка DB::Exception: Checksum doesn't match: corrupted data
Это не очень просто сделать. Сначала нужно посмотрерть на имена кусков в data/database/table. Далее в запрос можно добавить поля _part и _part_index. _part - имя куска, из которого читается строка, _part_index - некий номер куска в запросе. В частности, если при добавлении в запрос условия where _part = '...' происходит падение, то нужный кусок найден. Угадывать номер куска можно путем добавления условий на дату и _part_index. Также, если имя куска написано в _part, то он успешно прочитался.
Далее, сделать detouch куска и проверить, что запрос стал работать.
Vladimir
25.09.2017
09:53:06
Nikolai
25.09.2017
09:53:33
Так будет намного проще :)
.
25.09.2017
11:19:54
под кристал есть норм драйвер?
Nikolai
25.09.2017
11:22:02
Vladimir
25.09.2017
11:23:14
Nikolai
25.09.2017
11:29:45
Если объясните как это сделать по шагам - то смогу
если запрос падает, то в /var/log/clickhouse-server/clickhouse-server.err.log должно писаться список из чего-то вроде
0. clickhouse-server(StackTrace::StackTrace()+0x16) ...
нужно запустить запрос а потом посмотреть, есть ли что-то похожее там. например:
sudo tail -n 100 /var/log/clickhouse-server/clickhouse-server.err.log
Vladimir
25.09.2017
11:35:30
если запрос падает, то в /var/log/clickhouse-server/clickhouse-server.err.log должно писаться список из чего-то вроде
0. clickhouse-server(StackTrace::StackTrace()+0x16) ...
нужно запустить запрос а потом посмотреть, есть ли что-то похожее там. например:
sudo tail -n 100 /var/log/clickhouse-server/clickhouse-server.err.log
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x30d6226]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x137053f]
2. clickhouse-server(DB::CompressedReadBufferBase::readCompressedData(unsigned long&, unsigned long&)+0x3d2) [0x30f9012]
3. clickhouse-server(DB::CompressedReadBuffer::nextImpl()+0x33) [0x3100183]
4. clickhouse-server() [0x2a6a080]
5. clickhouse-server(DB::LogBlockInputStream::readData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, DB::IColumn&, unsigned long, unsigned long, bool)+0x416) [0x3220f56]
6. clickhouse-server(DB::LogBlockInputStream::readImpl()+0x575) [0x32224b5]
7. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2a46fc1]
8. clickhouse-server(DB::FilterBlockInputStream::readImpl()+0x1f4) [0x33b4ad4]
9. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2a46fc1]
10. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x340f46d]
11. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2a46fc1]
12. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x340f46d]
13. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2a46fc1]
14. clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::loop(unsigned long)+0x152) [0x3209972]
15. clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::thread(MemoryTracker*, unsigned long)+0x77) [0x320a047]
16. clickhouse-server() [0x3eca42f]
17. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f445e4016ba]
18. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f445da223dd]
Nikolai
25.09.2017
11:42:04
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x30d6226]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x137053f]
2. clickhouse-server(DB::CompressedReadBufferBase::readCompressedData(unsigned long&, unsigned long&)+0x3d2) [0x30f9012]
3. clickhouse-server(DB::CompressedReadBuffer::nextImpl()+0x33) [0x3100183]
4. clickhouse-server() [0x2a6a080]
5. clickhouse-server(DB::LogBlockInputStream::readData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::IDataType const&, DB::IColumn&, unsigned long, unsigned long, bool)+0x416) [0x3220f56]
6. clickhouse-server(DB::LogBlockInputStream::readImpl()+0x575) [0x32224b5]
7. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2a46fc1]
8. clickhouse-server(DB::FilterBlockInputStream::readImpl()+0x1f4) [0x33b4ad4]
9. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2a46fc1]
10. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x340f46d]
11. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2a46fc1]
12. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x340f46d]
13. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2a46fc1]
14. clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::loop(unsigned long)+0x152) [0x3209972]
15. clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::Handler, (DB::StreamUnionMode)0>::thread(MemoryTracker*, unsigned long)+0x77) [0x320a047]
16. clickhouse-server() [0x3eca42f]
17. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f445e4016ba]
18. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f445da223dd]
Спасибо!
У вас, оказывается, движок Log. То, что я писал, верно для *MergeTree. Moя ошибка.
Vladimir
25.09.2017
11:44:25
Nikolai
25.09.2017
11:49:30
Nataliya
25.09.2017
11:50:59
Full day of ClickHouse talks. See you at Percona Live, 27 September, at Sky Suite 2 https://twitter.com/ClickHouseDB/status/912283066386780160
Max
25.09.2017
12:14:01
Ребятки, а есть где то реккомендации по железу, или по расчету железа для КХ?
Kirill
25.09.2017
12:16:35
Кое что тут есть https://clickhouse.yandex/docs/en/operations/tips.html
Google
Александр
25.09.2017
12:35:32
А подскажите такую штуку: если я делаю один большой запрос и постояно обращаюсь к одной и тойже таблице в нескольких подхапросах, используя одинаковые выражения первичного ключа для фильтрации, то прочитанные блоки передаются от подзапроса к подзапросу или каждый подзапрос все равно читает данные из таблицы?
Tima
25.09.2017
12:37:01
Александр
25.09.2017
12:37:17
Ок. Шустро работает в таком случае )
Bulat
25.09.2017
12:37:59
А нет планов добавить блок with для таких случаев?
Tima
25.09.2017
12:38:03
https://clickhouse.yandex/docs/ru/introduction/performance.html?highlight=page#id2
Александр
25.09.2017
12:38:18
А есть еще возможность как то сложить таблицу в память целиком? Т.е. есть у меня таблица, которая весит например 50 гигов, оперативы у меня 256 гигов. Можно как то затолкать ее в оперативу, что бы данные читать не с таблицы?
Alexander
25.09.2017
12:39:01
есть движок таблицы memory
Александр
25.09.2017
12:39:14
Не, нужен MergeTree например
Tima
25.09.2017
12:39:38
nikoinlove
25.09.2017
12:39:58
ну селектни ее, она в пейджкеше осядет:)
а ты какую задачу этим хочешь решить?
Tima
25.09.2017
12:40:09
Vitaly
25.09.2017
12:40:15
Привет! Ты где?
Александр
25.09.2017
12:43:16
Tima
25.09.2017
12:44:13
Александр
25.09.2017
12:44:21
Запросы получаются по 700 строк в высоту ) Работает очень быстро на сервере под нагрузкой
А я так полагаю, что бы вот такое добро "IFNULL(IF (STR_TO_DATE(position_date, '%d.%m.%Y %r') >= DATE_SUB(NOW(), INTERVAL 3 MONTH), 'До 3-х мес.', IF (STR_TO_DATE(position_date, '%d.%m.%Y %r') >= DATE_SUB(NOW(), INTERVAL 1 YEAR), 'До года', IF (STR_TO_DATE(position_date, '%d.%m.%Y %r') >= DATE_SUB(NOW(), INTERVAL 3 YEAR), 'До 3-х лет', IF (STR_TO_DATE(position_date, '%d.%m.%Y %r') <= DATE_SUB(NOW(), INTERVAL 3 YEAR), 'Более 3-х лет', NULL)))), 'Прочее')" сунуть в словарь в качестве expression, нужно это завернуть в CDATA?
Michal
25.09.2017
13:22:26
Динамические часовые пояса похоже не предусмотрены? toStartOfDay(date_field, dictGetString('customer_timezones', 'tz_name', toUInt64(customerid))) = DB::Exception: Illegal column ColumnString of second (time zone) argument of function toStartOfDay, must be constant string.
Александр
25.09.2017
13:23:50
А я так полагаю, что бы вот такое добро "IFNULL(IF (STR_TO_DATE(position_date, '%d.%m.%Y %r') >= DATE_SUB(NOW(), INTERVAL 3 MONTH), 'До 3-х мес.', IF (STR_TO_DATE(position_date, '%d.%m.%Y %r') >= DATE_SUB(NOW(), INTERVAL 1 YEAR), 'До года', IF (STR_TO_DATE(position_date, '%d.%m.%Y %r') >= DATE_SUB(NOW(), INTERVAL 3 YEAR), 'До 3-х лет', IF (STR_TO_DATE(position_date, '%d.%m.%Y %r') <= DATE_SUB(NOW(), INTERVAL 3 YEAR), 'Более 3-х лет', NULL)))), 'Прочее')" сунуть в словарь в качестве expression, нужно это завернуть в CDATA?
Собственно да :) Нужно завернуть в CDATA. Спасибо за expression! Без него было бы плохо )
Vladimir
25.09.2017
13:23:56
Подскажите, пожалуйста, как лучше организовать "доливку" данных. Я собираю данные из логов метрики, данные там добавляются даже спустя пару дней. Вот мне нужно положить вчера, и завтра перезалить вчера. Но как это позавчера удалить, чтобы залить снова не понимаю. Месяц целиком перезаливать прийдётся?
Igor
25.09.2017
13:24:22
Господа, подскажите мне очень интересно, а инсталляции clickhouse в яндексе в какой таймзоне работают? в MSK или в UTC?????
Google
Igor
25.09.2017
13:24:39
думаем какую бы TIME ZONE по дефолту поставить
Vladimir
25.09.2017
13:26:03
Настройка - основные - Часовой пояс. я так думаю
Дмитрий
25.09.2017
13:35:46
Vladimir
25.09.2017
13:38:57
Ждать не хочется, потому что данные за вчера нужны уже сегодня, а устаканиться может только через пару дней. С дельтой попробую, спасибо, а ReplacingMergeTree не гарантирует отсутствия дупликатов(
Дмитрий
25.09.2017
13:39:33
Optimize final ‘table’ for partion ‘date’
Документация к сожалению не под рукой
Michal
25.09.2017
13:40:38
Дмитрий
25.09.2017
13:40:45
Спасибо!
Vladimir
25.09.2017
13:45:33
Будет ли это более оптимально, чем если я удалю всю партицию и залью из уже имеющихся файликов?
У меня процесс построен так, что я раз в день запрашиваю данные из логов метрики за последние 5 дней (5 запросов). Сравниваю размер выгрузки с тем, что делал раньше и если отличается - перекачиваю файл. Вот нужно как то теперь это синхронизировать с кх, чтобы побыстрее работало
Aleksey
25.09.2017
13:49:36
Привет, поскажите пожалуйста, как внешние данные к запросу добавить? У меня странная ошибка Code: 62. DB::Exception: Syntax error: failed at position 1 (line 1, col 1): spark.ru
hom, expected CHECK
Vladimir
25.09.2017
14:39:29
Aleksey
25.09.2017
14:42:52
cat data | clickhouse-client --user=xxx --password=xxx --host=xxx --external --file=- --name=_data --structure='host String'
$ cat data
one
two
three
вот так работает
но мне надо каким-то макаром еще огромный запрос пропихнуть
cat data | clickhouse-client --user=xxx --password=xxx --host=xxx --external --file=- --name=_data --structure='host String' --query="select * from _data"
Vladimir
25.09.2017
14:50:27
Может быть я не туда смотрю, но в доках клиента командной строки вообще не вижу таких аргументов (--file, —structure). Может быть вам создать таблицу в базе и туда залить данные просто? Потом удалить, если больше не нужны
Aleksey
25.09.2017
14:50:56
Не могу я создать таблицу) Нет прав)
https://clickhouse.yandex/docs/ru/table_engines/external_data.html
Google
Vladimir
25.09.2017
14:56:27
попробуйте запрос передвинуть в начало, перед external
Aleksey
25.09.2017
14:56:49
да с запросом все работает
Vladimir
25.09.2017
14:56:50
Есть дурацкии вопрос, но что-то я подзавис.
Есть таблица с 2мя столбцами: value и key.
Мне надо чтобы если key=1 считало AVG(value), а если key=2 то SUM(value), ну тоесть 2 запроса как бы
select avg(value) from MyTable where key=1;
select sum(value) from MyTable where key=2;
Хочется в 1 запрос (а значит и скан по диску) поститать. Рождается такое "кака"
select avg(value) as avg, sum(value) as sum, key where key in (1, 2) group by key.
Но тут получается мы считаем также sum для key=1 и avg для key=2 что также неоптимально.
Можно что-то мудренее (чтобы работало быстрее и ресурсов тратило маньше) придумать?
Aleksey
25.09.2017
14:59:32
но я хочу запрос постом передать
Nikolai
25.09.2017
15:03:01
Vladimir
25.09.2017
15:03:42
Понял. Спсб. Где-то внутри точит червячек, пока задавлю :)
papa
25.09.2017
15:10:51
Vladimir
25.09.2017
15:12:02
нет, но я пока на реальных данных и с реальной нагрузкой на щапись не могу проверить.
тут просто соразу как-то неоптимально получилось, а кнут вроде не это имел в виду
papa
25.09.2017
15:15:00
sum/avg это по процу достаточно дешево, а if в clickhouse считает обе свои части, ну и джампы/конвейеры. вот это все, еще неизвестно что дороже окажется.
если у вас key в ключе и данные по нему локализованы, то может вообще быстрее будет два запроса сделать.
Ilyas
25.09.2017
15:41:25
так а в чём проблема запроса с условными агрегатными функциями? если вот так сделать:
select sumIf(val, key=1), avgIf(val, key=2) from MyTable
два запроса - это 2 скана таблицы, один запрос - один скан
понятно что условный агрегат скорее всего дороже безусловного, но если делать отдельными запросами - там тожебудут условия
Vladimir
25.09.2017
15:43:35
sumIf и avgIf не видел. Похоже на то что надо. Что быстрее тоже интересно будет. Надо документацию перечитать, забывать стал
Petr
25.09.2017
16:23:34
Kirill
25.09.2017
16:26:43
ClickHouse client version 1.1.54245.
у меня ClickHouse client version 1.1.54288. игнор ошибок работает нормально всегда...
clickhouse-client --help | grep allow видит свойства по игнору ошибок? Вообще наверное лучше в любом случае проапдейтиться. Там много всяких фиксов было в промежутке.
Petr
25.09.2017
16:27:13
Ок, попробую
Рулон
26.09.2017
07:52:21
Приветик! решил обновить CH atp upgrade (stable). Клиент обновился, сервер нет )
Kirill
26.09.2017
08:01:38
рестарт сделайте