
antuan
16.07.2018
12:43:17
такое ощущение, что у вас симлинк)

Kirill
16.07.2018
12:49:41

Mike
16.07.2018
12:50:36
сейчас симлинков нет вообще, только файлы. дифолтные конфиги + conf.d с некоторыми настройками

Google

Bogdan
16.07.2018
12:51:48

Kirill
16.07.2018
12:55:10
Все на 127.0.0.1 ? ) Тогда надо смотреть что не так, у нас оно отрабатывает как надо
Попробуйте выставить debug=1 там в stdout будет отдаваться отладочная информация

Bogdan
16.07.2018
12:56:08
может ли это быть из-за того что я четыре транзакции одновременно начинаю?
ибо судя по всему из-за этого

Kirill
16.07.2018
12:57:16
Возможно, на каждую транзакцию открывается новое соединение, но при фейле он должен попробовать переключиться

Bogdan
16.07.2018
12:58:25
что будет если транзакций больше чем открытых соединений?

Kirill
16.07.2018
12:58:57
Их не может быть больше

Mike
16.07.2018
13:33:39
На тестовой машине поставил чистый КХ, никакие конфиги не менял, положил в /etc/clickhouse-server/ файлик с конфигом словаря из мануала - получаю 2018.07.16 16:32:45.479147 [ 4 ] <Error> ExternalDictionaries: Cannot create external dictionary 'hosts' from config path /etc/clickhouse-server/dnl_dictionary.xml: Poco::Exception. Code: 1000, e.code() = 0, e.displayText() = Not found: dictionary.structure.attribute.null_value, e.what() = Not found
1.1.54385

Michal
16.07.2018
13:38:07
<attribute>
<name>str</name>
<type>String</type>
<null_value></null_value>
</attribute>

Mike
16.07.2018
13:41:04

Google

Nickolay
16.07.2018
15:31:19
есть пару десятков таблиц типа ReplicatedSummingMergeTree и Distributed к ним в кластере
нужно получить выборку вида
table, sum(first_not_primary_key_column) as total
first_not_primary_key_column - первая колонка не входящая в первичный ключ (в каждой таблице может быть своя)
имена всех ReplicatedSummingMergeTree таблиц имеют вид LIKE ag%_local
имена Distributed - LIKE ag% (как ReplicatedSummingMergeTree но без _local)
такое можно сделать одним запросом?

Alexey
16.07.2018
15:56:04


Dann
16.07.2018
15:56:46
Всем привет, у меня вопрос по загрузке данных на python из Pandas.DataFrame в ClickHouse с помощью clickhouse-sqlalchemy.
У меня есть дневные логи в виде CSV-файлов, в которых есть числовые и строковые значения. Я хочу обработать их и загрузить в ClickHouse. Вначале каждый файл я загружаю в DataFrame (средний размер ~ 300к х 50), занимаюсь препроцессингом (генерю новые столбцы, заполняю пропущенные значения и тд), выставляю numpy-типы для каждого столбца и с помощью df.to_sql(table_name, connection, if_exists='append', index=False) хочу закинуть df в ClickHouse. И вот на последнем пункте начинается какая-то магия.
Для некоторых файлов выскакивает Exception следующего вида:
In: df.to_sql(table_name, sqla_engine.connect(), if_exists='append', index=False)
Out: Orig exception: Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected , before: 2, 1521736320, \'176.119.230.53\', \'\', 35366408187, 57, 0, 57, \'131/160/15/0/0/6/2/3/0.1/1\', 131, 160, 15, 0, 0, 6, 2, 3.0, 0.10000000149011612, 1, 2794413, \'http: (at row 280606)
, e.what() = DB::Exception
Но если взять только несколько строк (например, df[280600:280610].to_sql(...)), среди которых будет та, на которую указывает Exception, то все отработает.
Если разбить df на части так, чтобы проблемная строка была не в первой части, то все также сработает.
Данные замечания справедливы для любых проблемных файлов. Но эти все варианты не могут быть приняты как окончательное решение, так как непонятно, как идентифицировать заранее такие проблемные для ClickHouse строки.
Проверял строковые значения на наличие всяких специальных и непечатуемых символов, ничего криминального не нашел.
Пробовал выставлять в настроках сервера input_format_values_interpret_expressions=1 и стало только хуже, начинал ругаться уже на Cannot parse input: expected \' before: на первой строчке.
Собственно, вопрос в том, с чем это может быть связано и как это чинить?


Alexey
16.07.2018
15:57:43
max_query_size ?

Nickolay
16.07.2018
15:58:02


Alexey
16.07.2018
15:58:38
Всем привет, у меня вопрос по загрузке данных на python из Pandas.DataFrame в ClickHouse с помощью clickhouse-sqlalchemy.
У меня есть дневные логи в виде CSV-файлов, в которых есть числовые и строковые значения. Я хочу обработать их и загрузить в ClickHouse. Вначале каждый файл я загружаю в DataFrame (средний размер ~ 300к х 50), занимаюсь препроцессингом (генерю новые столбцы, заполняю пропущенные значения и тд), выставляю numpy-типы для каждого столбца и с помощью df.to_sql(table_name, connection, if_exists='append', index=False) хочу закинуть df в ClickHouse. И вот на последнем пункте начинается какая-то магия.
Для некоторых файлов выскакивает Exception следующего вида:
In: df.to_sql(table_name, sqla_engine.connect(), if_exists='append', index=False)
Out: Orig exception: Code: 27, e.displayText() = DB::Exception: Cannot parse input: expected , before: 2, 1521736320, \'176.119.230.53\', \'\', 35366408187, 57, 0, 57, \'131/160/15/0/0/6/2/3/0.1/1\', 131, 160, 15, 0, 0, 6, 2, 3.0, 0.10000000149011612, 1, 2794413, \'http: (at row 280606)
, e.what() = DB::Exception
Но если взять только несколько строк (например, df[280600:280610].to_sql(...)), среди которых будет та, на которую указывает Exception, то все отработает.
Если разбить df на части так, чтобы проблемная строка была не в первой части, то все также сработает.
Данные замечания справедливы для любых проблемных файлов. Но эти все варианты не могут быть приняты как окончательное решение, так как непонятно, как идентифицировать заранее такие проблемные для ClickHouse строки.
Проверял строковые значения на наличие всяких специальных и непечатуемых символов, ничего криминального не нашел.
Пробовал выставлять в настроках сервера input_format_values_interpret_expressions=1 и стало только хуже, начинал ругаться уже на Cannot parse input: expected \' before: на первой строчке.
Собственно, вопрос в том, с чем это может быть связано и как это чинить?
у меня примерно такое было, когда не влазило в max_query_size, попробуйте увеличить с запасом


Alexey
16.07.2018
15:59:04

Dann
16.07.2018
16:00:23
max_query_size ?
У меня дефолтное значение, оно равно 256 КБ. То есть если у меня df весит 500 МБ, то стоит этот лимит увеличить до условных 16 МБ и грузить df по частям, рассчитав размер этих частей под max_query_size?

Alexey
16.07.2018
16:00:45
в профиле в users.xml

Dann
16.07.2018
16:01:38
Понял, спасибо за быстрый ответ)

Alexey
16.07.2018
16:04:56
Понял, спасибо за быстрый ответ)
по идее, этот лимит отвечает только за запрос до VALUES, сами данные обрабатываются отдельным потоковым парсером, и не учитываются в этом ограничении. Но у меня примерно такая проблема была на больших дампах, которые обрезались и был Exception с такой ошибкой. Увеличение этого лимита помогло.

Dann
16.07.2018
16:11:41

Ivan
16.07.2018
16:32:56
Господа, всем добрый вечер. Подскажите, насколько плохо селектить из буферной таблицы?

Michal
16.07.2018
16:33:27

Yuran
16.07.2018
16:33:40

Ivan
16.07.2018
16:33:55
Вот это конструктив)
А если мне данные в основной базе нужны очень быстро после их инсертов, а буфер какое-то время наполняетсся и сбрасывается - как быть?

Yuran
16.07.2018
16:35:22
Может быть, я неправильно понял документацию, на самом деле

Google

Alexey
16.07.2018
16:35:49
А может быть движок Merge поможет?
Движок Merge позволяет сделать условия на таблицу (с помощью виртуального столбца _table), но возможности динамически выбирать, какие столбцы использовать - нет.

Yuran
16.07.2018
16:35:58
> При добавлении данных в Buffer, один из буферов блокируется. Это приводит к задержкам, если одновременно делается чтение из таблицы.
https://clickhouse.yandex/docs/ru/table_engines/buffer/
Означает ли это, что пока идет чтение, запись в этот кусок невозможна — вопрос открытый

Ivan
16.07.2018
16:37:21

Yuran
16.07.2018
16:37:30

Ivan
16.07.2018
16:37:57

Yuran
16.07.2018
16:38:02
Из буферной таблицы можно читать, пока у вас один сервер. Иначе вы будете читать с буферной таблицы случайного сервера

Ivan
16.07.2018
16:38:05
А мне надобно ~500мс

Alexey
16.07.2018
16:38:20
А где в доке написано именно про блокировку

Yuran
16.07.2018
16:38:29
А мне надобно ~500мс
Если пишете мало данных, то можете пару раз в секунду вставлять, но лучше так не делать, конечно.

Ivan
16.07.2018
16:38:29

Yuran
16.07.2018
16:39:24
Может, вам log-таблицв помогут

Wolf
16.07.2018
16:39:29
высокочастотный трейдинг что ли ?

Michal
16.07.2018
16:39:47

Ivan
16.07.2018
16:39:50

Alexey
16.07.2018
16:40:07
Там написано, что чтение затруднено, но не наоборот

Ivan
16.07.2018
16:45:15
А буфер не может сбрасывать менее, чем раз в 1 секунду?

napaHouk
16.07.2018
17:01:52
nagibator1999VGwkFaQuffyl7q2emvld

Google

Yuran
16.07.2018
17:19:00
CREATE TABLE test AS test_table
ENGINE = Buffer(database, table, 2, 0.5, 0.5, 1000, 1000, 1000, 1000)
Вроде создалось с дробным значением для min_time и max_time, так что наверное так можно

Ivan
16.07.2018
18:31:08

Vladislav
16.07.2018
20:29:26
Всем привет.
А это нормальное поведение?
SELECT
date
FROM
Stats
where
toString(adId) IN ('44')
GROUP BY
date
Code: 49, e.displayText() = DB::Exception: Set for IN is not created yet!, e.what() = DB::Exception
SELECT
date
FROM
Stats
where
toString(adId) IN ('44','bla-bla-bla')
GROUP BY
date
нормальный результат
SELECT
date
FROM
Stats
where
adId IN (44)
GROUP BY
date
нормальный результат

Vadim
16.07.2018
23:45:46

Jen
17.07.2018
05:49:25
насколько substring дорогая операция?

Kirill
17.07.2018
07:06:12

Jen
17.07.2018
07:06:24
дорогая в использовании

Kirill
17.07.2018
07:07:11

Alexey
17.07.2018
07:13:54
??
А как надо чтоб +5%

Александр
17.07.2018
09:59:39
Привет ! Есть сложный SELECT который очень долго висит, где посмотреть кроме select * from system.processes не залип ли он ?

Vitaly
17.07.2018
10:03:46
А чем тебе это место не нравится?

Igor
17.07.2018
10:12:06
Через headers http можно прогресс смотреть

Александр
17.07.2018
10:16:43

Bogdan
17.07.2018
10:31:44
Коллеги, подскажите пожалуйста
Имеется:
два шарда и две реплики
в каждом инстансе создана таблица ReplicatedMergeTree
в каждом инстансе создана Distributed таблица которая смотрит на таблицы ReplicatedMergeTree выше
internal_replication стоит в значении false
как лучше записывать данные в кликхаус? в distributed таблицу, либо же в локальные таблицы ReplicatedMergeTree?
как вообще работает ReplicatedMergeTree, если internal_replication выключен? не реплицирует что-ли?

Kirill
17.07.2018
10:34:12

Google

Bogdan
17.07.2018
10:36:22

Kirill
17.07.2018
10:37:31

Alex
17.07.2018
10:38:30
А, ещё на распределённые ALTER влияет

Bogdan
17.07.2018
10:41:15
если происходит инсерт в distributed таблицу при том, что internal replication выключен, то получается происходит запись во все четыре инстанса, а потом ещё сама таблица пытается зареплицировать?
ведь получается что distributed таблица сама всё записала везде

Alex
17.07.2018
10:42:19
Да. Но так как Replicated таблица ещё и дедуплицирует вставки, дубликатов не будет. Всё равно так лучше не делать :)

Bogdan
17.07.2018
10:43:45
выходит короче так, что distributed во все инстансы записал, потом ещё Replicated по этим новым данным прошёлся и понял что за него работу уже сделали и можно сидеть курить
ну и лишние ресурсы по сути потратил на дедупликацию
спасибо большое за разъяснение!

Alex
17.07.2018
10:44:49
Да, всё так

Ololo
17.07.2018
10:45:50

Евгений
17.07.2018
11:28:33
Привет. Может сможете подсказать?
Год назад пытались переехать на CH, встретились с отсутствием JOIN'ов, из-за чего все данные уместили в одну таблицу.
Получилось что-то в духе:
Id0, Id1, Id2 ... *какие-то поля, которые известны только при событии-сборке* ... event1, event2 ...
Где eventN это 0 или 1 - произошло событие или нет.
Возможно ли сейчас расскидать это по разным таблицам и Join'ить их по id? И есть ли какие подводные у кликхаусовских джоинов в плане производительности/памяти?

Alexey
17.07.2018
11:33:21
Раскидайте по разным таблицам, старую не убирайте, посравнивайте

Евгений
17.07.2018
11:34:29

Alexey
17.07.2018
11:35:16