@clickhouse_ru

Страница 269 из 723
Александр
25.09.2017
08:59:46
Я бы date для ключа партиционирования брал из даты изменения, что бы можно было потом старые логи изменения заказов архивировать и выкидывать

Кирилл
25.09.2017
09:03:44
Я тоже думаю.. но у заказа важны 2 даты - и дата поступления и дата последнего изменения.. И выборки нужны в одинаковом количестве по обоим этим датам... И тут уже возникают сомнения в эффективности кликхауса для такого кейса.. Но спасибо за ответы, советы.. я пока все таки еще в раздумьях, буду тестировать запросы, сравнивать с PostgreSql.

Google
Konstantin
25.09.2017
09:15:39
Он не всегда будет там "один"
не всегда, но меньше чем в основной таблице

Скорее всего JOIN будет очень медлено работать
я имел в виду оставить таблицу log и завести такую же таблицу ReplacingMergeTree которая будет схлопываться со временем по orderid

и использовать ее для 99% запросов

Tima
25.09.2017
09:18:19
я имел в виду оставить таблицу log и завести такую же таблицу ReplacingMergeTree которая будет схлопываться со временем по orderid
В таблице типа Log всегда читаются все данные, там нет такой оптимизации как в семействе движков *MergeTree

Зачем нужна такая таблица с 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?

Google
Tima
25.09.2017
09:21:15
я бы в 2 таблицы писал =)
+1. В Яндекс.Метрика так и сделано, одна из двух таблиц содержит часть данных другой

Кирилл
25.09.2017
09:22:03
Спасибо. И еще такой кейс, что клик хаус предполагает что записи в таблицу происходят большими пачками 1000+ штук. А тут они могут происходить как пачками (выгрузки по Апи, Импорт Excel и т.п.) а также и менеджеры часто правят заказы штучно.. Это не страшно?

Konstantin
25.09.2017
09:22:47
а сколько у вас менеджеры могут делать импортов в секунду?)

Tima
25.09.2017
09:25:18
Спасибо. И еще такой кейс, что клик хаус предполагает что записи в таблицу происходят большими пачками 1000+ штук. А тут они могут происходить как пачками (выгрузки по Апи, Импорт Excel и т.п.) а также и менеджеры часто правят заказы штучно.. Это не страшно?
Смысл вставки пачками в том, что после вставки ClickHouse в фоне что-то ещё делает с этими данными. Если вставка "поштучно" идёт не часто, раз в несколько часов - проблем не будет

Но как только пойдет вставка по 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 куска и проверить, что запрос стал работать.

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
Спасибо! У вас, оказывается, движок Log. То, что я писал, верно для *MergeTree. Moя ошибка.
Это я не уточнил сразу, да, Log - с него проще начинать знакомиться с системой, плнирую оперативно от него уходить

Nikolai
25.09.2017
11:49:30
Это я не уточнил сразу, да, Log - с него проще начинать знакомиться с системой, плнирую оперативно от него уходить
да, Log проще, но при ошибках в записи таблица бьется, и чтения тоже ломаются. Для серьезных задач лучше использовать MergeTree.

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
А подскажите такую штуку: если я делаю один большой запрос и постояно обращаюсь к одной и тойже таблице в нескольких подхапросах, используя одинаковые выражения первичного ключа для фильтрации, то прочитанные блоки передаются от подзапроса к подзапросу или каждый подзапрос все равно читает данные из таблицы?

Александр
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
А нет планов добавить блок with для таких случаев?
Есть такое https://github.com/yandex/ClickHouse/blob/b7f8ac1f2db2553fb02779a2b13ee09e6e99c9af/dbms/tests/queries/0_stateless/00490_with_select.sql Но это не CTE

nikoinlove
25.09.2017
12:39:58
ну селектни ее, она в пейджкеше осядет:) а ты какую задачу этим хочешь решить?

Vitaly
25.09.2017
12:40:15
Привет! Ты где?

Александр
25.09.2017
12:43:16
ну селектни ее, она в пейджкеше осядет:) а ты какую задачу этим хочешь решить?
У меня просто есть маленькая таблица в которой не много строк, но много nested строк в разных колонках. Я ее разворачиваю в разных подзапросах и бывает по многу раз )

Tima
25.09.2017
12:44:13
У меня просто есть маленькая таблица в которой не много строк, но много nested строк в разных колонках. Я ее разворачиваю в разных подзапросах и бывает по многу раз )
Возможно вам поможет материализованная вьюха, она хранит данные на диске. Возможно в вашем случае это поможет

Александр
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.

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
Подскажите, пожалуйста, как лучше организовать "доливку" данных. Я собираю данные из логов метрики, данные там добавляются даже спустя пару дней. Вот мне нужно положить вчера, и завтра перезалить вчера. Но как это позавчера удалить, чтобы залить снова не понимаю. Месяц целиком перезаливать прийдётся?
Если у вас данные только приходят нужно ли перезаливать их? Почему недостаточно дописать дельту? Или писать в кх когда уже все устаканилось. Не очень понятно какую проблему решаете. Если бывают апдейты - посмотрите в сторону ReplacingMergeTree.

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
Optimize final ‘table’ for partion ‘date’
OPTIMIZE TABLE xxxx PARTITION 201709 FINAL;

Дмитрий
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

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
но я хочу запрос постом передать

Vladimir
25.09.2017
15:03:42
Понял. Спсб. Где-то внутри точит червячек, пока задавлю :)

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 не видел. Похоже на то что надо. Что быстрее тоже интересно будет. Надо документацию перечитать, забывать стал

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
рестарт сделайте

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