@clickhouse_ru

Страница 590 из 723
antuan
16.07.2018
12:43:17
такое ощущение, что у вас симлинк)

Mike
16.07.2018
12:50:36
такое ощущение, что у вас симлинк)
и симлинк пробовал и файл - без разницы

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

Google
Bogdan
16.07.2018
12:51:48
В alt_hosts пропишите все ваши сервера, и если какой-то из них будет недоступен клиент попытается найти рабочий сервер
самое смешное в том, что они все прописаны tcp://127.0.0.1:9011?alt_hosts=127.0.0.1:9012,127.0.0.1:9013,127.0.0.1:9014

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

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) такое можно сделать одним запросом?

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
Придётся сгенерировать запрос из UNION ALL по всем таблицам.
а где можно посмотреть пример получения списка таблиц выбора колонки и использование этого в запросе?

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?

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

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

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

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мс
Если пишете мало данных, то можете пару раз в секунду вставлять, но лучше так не делать, конечно.

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

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

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, так что наверное так можно

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 нормальный результат

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

Kirill
17.07.2018
07:06:12
насколько substring дорогая операция?
Дорагая в чем? Вообще вы скорее всего не почувствуете оверхеда от её работы.

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

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
как вообще работает ReplicatedMergeTree, если internal_replication выключен? не реплицирует что-ли?
Если internal_replication стоит в false (по дефолту) то сервер сам попробует записать во все реплики, если у вас ReplicatedMergeTree то значение нужно выставить в true

Google
Bogdan
17.07.2018
10:36:22
Если internal_replication стоит в false (по дефолту) то сервер сам попробует записать во все реплики, если у вас ReplicatedMergeTree то значение нужно выставить в true
а если internal_replication стоит в true, то что реплицирует данные (ведь я так понимаю что этим не сервер уже занимается)? Zookeper?

Kirill
17.07.2018
10:37:31
Если internal_replication стоит в false (по дефолту) то сервер сам попробует записать во все реплики, если у вас ReplicatedMergeTree то значение нужно выставить в true
ZooKeeper только хранит метаданные и очередь задач, реплицировать будет сам КХ (ReplicatedMergeTree таблица)

Alex
17.07.2018
10:38:30
а если internal_replication стоит в true, то что реплицирует данные (ведь я так понимаю что этим не сервер уже занимается)? Zookeper?
Настройка internal_replication влияет только на вставку в Distributed таблицу, саму репликацию она никак не затрагивает

А, ещё на распределённые 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
Да, всё так

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

Alexey
17.07.2018
11:35:16
т.е. это совсем не аналог join из sql?
вообще не аналог, это просто подзапрос, и в нем нужно указать все условия в where, которые вам нужны.

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