@clickhouse_ru

Страница 209 из 723
Stas
21.07.2017
14:24:18
Господа, а очень плохо если в кликхаус лить 1 терабайт в день данных (с последующей агрегацией на лету) при условии что это узкая таблица? Знаю что она колоночная бд ...

(Плохо с точки зрения производительности я имею ввиду, и далее выдирать кейсами, тк данные изменчивы и нельзя сделать жесткую широкую структуру)

Slach
21.07.2017
14:25:56
ну терабайт на одну ноду в день? аггрегация на лету что означает? AggregateMergeTree движок? через INSERT INTO SELECT ? а с исходной таблицей что делаете?

Pika
21.07.2017
14:26:39
А как такое может быть, что свежесобранный clickhouse-client размером в 700Мб? оО

Google
Stas
21.07.2017
14:27:05
ну терабайт на одну ноду в день? аггрегация на лету что означает? AggregateMergeTree движок? через INSERT INTO SELECT ? а с исходной таблицей что делаете?
Хотелось бы хранит исходные данные а далее или хранить агрегаты (aggregation таблицей например) или же агрегировать group by при выводе

В идеале много кейсов и group by

Slach
21.07.2017
14:29:02
ну если кластер сделаете в котором можно 365 терабайт в год поместить... в чем проблема то??? лейте! на одну ноду это коненчо не влезет но в целом если лить правильными чанками, если потом правильно аггрегировать, если понимать что нету UPDATE и DELETE то все вполне реально

какая хоть предметная область у данных?

Stas
21.07.2017
14:29:58
какая хоть предметная область у данных?
Статистические замеры с оборудования RAN/транспорт

ну т.е что единственное будет проблеммой - это потеря места и немного производительности из-за узкой таблицы, так? никто не реализовывал подобные кейсы на похожем объеме данных?

а и еще вопрос - искал функцию SUBSTRING что бы можно было обрезать только последние N букв, по аналогии с HIVE/MYSQL тут этого же нет а?

prll
21.07.2017
14:35:32
А как такое может быть, что свежесобранный clickhouse-client размером в 700Мб? оО
Это фича. на самом деле там и сервер. если хочется размер поменьше но возможные проблемы с переносимостью бинарников - cmake -DUSE_STATIC_LIBRARIES=0

Andrew
21.07.2017
14:36:31
Тонкий момент - терабайт это до сжатия или после?

Andrew
21.07.2017
14:37:42
исходные 700-800гигов в день, после обработки и сжатия у меня утаптывались в 80-90М на диске. Заливал 10-минутными пачками до 15G за раз.

Stas
21.07.2017
14:39:09
ок, понял, с насчет обрезки никто не знает? т.е у нас есть sample_name и я его хочу substring(sample_name,0,-1) что бы было sample_nam

Google
Andrew
21.07.2017
14:40:32
substring / substringUTF8 - на выбор

Stas
21.07.2017
14:40:48
там с минусом не работает

Code: 0, e.displayText() = DB::Exception: 2nd and 3rd arguments of function substring must be non-negative and must have UInt type., e.what() = DB::Exception

Andrew
21.07.2017
14:41:23
а что должен значить минус?

Stas
21.07.2017
14:41:41
обрезать N симвулов с конца

Andrew
21.07.2017
14:42:10
length(..) - n не спасут?

Stas
21.07.2017
14:42:28
по аналогии, простите, как в php $rest = substr("abcdef", 0, -1); // возвращает "abcde"

Andrew
21.07.2017
14:42:50
substring(sample_name,0,length(sample_name)-1)

Stas
21.07.2017
14:42:56
length(..) - n не спасут?
думаю спасут, странно, что сам сабстринг не умеет...

substring(sample_name,0,length(sample_name)-1)
кстати тоже не работает

Andrew
21.07.2017
14:46:56
SELECT substring('asdasdasd', 1, CAST((length('asdasdasd') - 1) AS UInt32)) - работает

Stas
21.07.2017
14:48:50
SELECT substring('asdasdasd', 1, CAST((length('asdasdasd') - 1) AS UInt32)) - работает
хм, спасибо, я проблему решал через splitbyString, думал есть более красивое решение, странно вообще на баг похоже, невозможности обрезки с конца...

Andrew
21.07.2017
14:49:05
Это не баг, это фича

Сравнительно редкоиспользуемая операция vs минус одна операция ветвления

Virus
21.07.2017
15:05:01
стали ловить ошибки "Code: 32. DB::Exception: Attempt to read after eof" и "Code: 210. DB::NetException: Connection reset by peer: while reading from socket (127.0.0.1:9000)", версия 1.1.54245. лечится только рестартом сервера. есть варианты решения?

Roman
21.07.2017
15:21:51
а почему не примут датасорс? )
потому что нет способа "подключить" такой плагин. Графана либо будет сбилджена с ним, либо нет. И если все таки удастся добавить свою реализацию, то авторам графаны придется ее поддерживать. Т.е. когда они решат внести изменения в алертинг, что уже происходило, то им нужно будет внести изменения в ваш код. Но в будущем планируется есть возможность подключения backend плагинов - https://github.com/grafana/grafana/issues/6841

Alexey
21.07.2017
15:56:27
стали ловить ошибки "Code: 32. DB::Exception: Attempt to read after eof" и "Code: 210. DB::NetException: Connection reset by peer: while reading from socket (127.0.0.1:9000)", версия 1.1.54245. лечится только рестартом сервера. есть варианты решения?
А что в стек трейсе в логе (можно найти по фрагменту ###). В версии 54245 есть известная проблема - используется слишком много потоков для параллельного мержа состояний агрегации. Сейчас готовим релиз, в котором это исправлено. https://github.com/yandex/ClickHouse/commit/4866a37a2b77a92e222d74bec5495599cce585bc

Это не баг, это фича
Честно говоря, я сам считаю это недоработкой и хотел бы как-то по хорошему исправить.

Fwd, здесь тоже будет полезно.

Google
Alexey
21.07.2017
15:57:14
Про устройство первичного ключа можно почитать здесь: https://medium.com/@f1yegor/clickhouse-primary-keys-2cf2a45d7324 Суть в том, что выборки по условию на диапазон полей первичного ключа работают эффективно, если это поле стоит в нём первым, или если все поля, которые указаны до него, имеют большое количество повторяющихся значений. Также стоит отметить, что перечисление большого количества полей в PK не помогает для GROUP BY. Из этого следует, что указывать много полей не имеет смысла. Для примера, в таблице событий Метрики первичный ключ - (CounterID, Date, intHash32(UserID)). Потому что в запросах как правило используется условие на равенство CounterID и на диапазон дат. А intHash32(UserID) нужен для сэмплирования - для равномерного-случайного распределения данных в рамках каждой пары CounterID, Date. Что же делать, если запросы действительно тяжёлые и нужно, чтобы они работали быстрее? Например скорость обработки данных порядка миллиардов строк в секунду на простых запросах - это максимум, который можно выжать из одного сервера. Варианты такие: 1. Всё-таки можно делать предагрегацию данных с помощью материализованных представлений. Но лучше делать их немного и только для частых запросов. Редкие пусть могут работать медленно. 2. Использовать сэмплирование, если это подходит для задачи. 3. Контролировать, чтобы тяжёлых запросов было немного - с помощью квот на использование API сервиса и тому подобного. 4. Использовать больше шардов, при условии, что запросы хорошо масштабируются. Запросы с распределёнными IN/JOIN или со слабой фильтрацией/агрегацией данных могут масштабироваться хуже чем линейно.

Alexandr
21.07.2017
16:00:15
полезно, спасибо

Evgeny
21.07.2017
20:59:27
Нашёл тут выше в чатике кусок конфига для включения отправки graphite метрик, в доке так понимаю не описано. Кто знает может рассказать что тут и зачем кроме host и port конечно ;) <yandex> <use_graphite>true</use_graphite> <graphite> <host>127.0.0.1</host> <use_fqdn>true</use_fqdn> <port>42000</port> <root_path>one_min</root_path> <timeout>0.1</timeout> </graphite> </yandex>

Хотелось бы задать префикс также для метрик

Evgeny
21.07.2017
21:04:25
А timeout в чем и Use_fqdn за что отвечает?

Vladimir
21.07.2017
21:04:56
я могу ошибаться, но use_fqdn - в метриках писать fqdn хоста, а не которокое имя

prll
21.07.2017
21:04:59
use_graphite больше не используется

Vladimir
21.07.2017
21:05:02
таймаут - время за которое должно записаться

Alexey
21.07.2017
21:05:08
Путь будет иметь вид: root_path.hostname.ClickHouse. ... Где root_path - префикс на ваше усмотрение, hostname - FQDN, если use_fqdn = true или системное имя хоста, иначе. Таймаут в секундах. Впрочем, отправка метрик всегда делается асинхронно и ничего не тормозит.

Внутри hostname точки заменяются на подчёркивания.

Evgeny
21.07.2017
21:06:06
use_graphite больше не используется
Так так ;) а как правильно теперь?

Alexey
21.07.2017
21:06:17
Можно поставить отправку с разными интервалами - например, поминутно и посекундно. Пример:

<graphite> <host>localhost</host> <port>42000</port> <timeout>0.1</timeout> <interval>60</interval> <root_path>one_min</root_path> <metrics>true</metrics> <events>true</events> <asynchronous_metrics>true</asynchronous_metrics> </graphite> <graphite> <host>localhost</host> <port>42000</port> <timeout>0.1</timeout> <interval>1</interval> <root_path>one_sec</root_path> <metrics>true</metrics> <events>true</events> <asynchronous_metrics>false</asynchronous_metrics> </graphite>

Правильно - всё что не знаете оставить по-умолчанию.

prll
21.07.2017
21:07:19
само наличие <graphite> </graphite> теперь означает использование

Evgeny
21.07.2017
21:08:08
Ну все, теперь замониторю ))

Dmitry
21.07.2017
21:33:55
а вот есть идея

сделать что-то типа

Google
Dmitry
21.07.2017
21:34:53
"тежёлые запросы on" и "тяжёлые запросы off"

чтобы временно отрубать кеш и т.п.

типа как в флаг SQL_NO_CACHE

Рулон
21.07.2017
21:48:12
Друзья, вообщем весь день я пытался сделать следующее: настроить линкед сервер от mssql до clickhouse

я открыл все порты, проверил телнетом ip сервера 8123

скачал драйвер, подключил. ошибок не отобразил

но он упорно не видит таблицы

Admin
ERROR: S client not available

Рулон
21.07.2017
21:49:48
задал пользователю default пароль

база default

просто не знаю в какую сторону копать

я проверил на клиенте, с параметрами все ок и пользователь и пароль и ip кроме порта вместо 8123 9000

может нужен другой порт?

Andrey
21.07.2017
21:56:41
8123 - http 9000 - native

Порт нужен того типа по которому работает драйвер

Рулон
21.07.2017
22:03:51
jdbc работает по 8123

tabix по 8123

логично что и odbc по 8123

удалось получить такую ошибку

There is an error in the query. Warning: A StringBuilder buffer has been overflowed by unmanaged code. The process may become unstable. Insufficient capacity allocated to the StringBuilder before marshaling it.

Google
Рулон
21.07.2017
22:10:07
это я пытался написать select 1

windows 32 bit

Alexey
21.07.2017
22:16:26
Весьма интересно. Передам разработчику драйвера, может быть будет время разобраться.

Рулон
21.07.2017
22:28:01
Огромное спасибо!

Постарался сделать подробное issue

https://github.com/yandex/clickhouse-odbc/issues/25

Если удастся пофиксить ошибку, можно натравливать на Clickhouse Power BI , Excel , SSRS , Linked server делать ?

Stas
21.07.2017
23:17:18
А никто не знает самый простой путь экспорта Oracle –> clickhouse ?

Vladislav
22.07.2017
11:32:46
А у реплик сейчас поведение отличное от шардирования в плане обновления записей из DNS? Насколько я понимаю для шардов доменные имена разрешаются один раз и кэшируются, но у реплик видимо IP получают из ZK каждый раз, а тот их обновляет при изменении A записей?

Просто реплицированный сервер в ECS нормально работает с разрешением реплик по доменным именам, даже если меняются A записи...

Алексей
22.07.2017
11:48:57
Господа, занимаюсь немного ерундой пытаюсь понять какой будет размер базы. делаю такой вот запрос SELECT name, type, data_uncompressed_bytes / data_compressed_bytes AS `compress ratio` FROM system.columns WHERE (table = 'interface') AND (name IN ('packets_out', 'packets_in', 'load_in', 'load_out')) ┌─name────────┬─type───┬─────compress ratio─┐ │ packets_out │ UInt64 │ 19.37327848858 │ │ packets_in │ UInt64 │ 19.464664471097795 │ │ load_in │ UInt64 │ 8.07884175110083 │ │ load_out │ UInt64 │ 7.127004335631084 │ └─────────────┴────────┴────────────────────┘ хочу понять почему коэффициент сжатия так сильно отличается не нулевых рядов одинаковое колво.

Igor
22.07.2017
16:59:34
всем привет. а нет ли в КХ операций сложения/вычитания массивов и аналога generate_series в pg (то есть генерация не с единицы до N как в range(N), а с произвольного числа)?

в доках не нашел ничего подобного

а, ну в принципе для вычитания и для generate_series можно использовать arrayFilter

но со сложением двух множеств вопрос остается открытым

а, сложение в принципе можно сделать так select groupArray(t) from (select arrayJoin([1,2,3,4]) as t union all select arrayJoin([5,6,7]) as t) но нет ли более простых путей? :) плюс это все таки не агрегатная функция для произвольного числа строк, а сложение именно двух массивов

Evgeny
22.07.2017
18:45:35
несколько вопросов по движку GraphiteMergeTree функция any какая логика работы? какие имена функций в принципе доступны для использования? если метрика соответвует двум и более pattern какая логика применения параметров? возможно ли в pattern не указывать retention (будет ли использоваться из default)? аналог xFilesFactor - как то возможно задать ?

Shine
23.07.2017
09:42:03
Ребят, а с последнего минского митапа презы не кидали ?

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