@clickhouse_ru

Страница 178 из 723
Evgeny
21.06.2017
07:26:16
спасибо, буду смотреть

Evgeny
21.06.2017
07:29:27
вот это https://github.com/Vertamedia/clickhouse-grafana кажется интересным. спасибо

Maksim
21.06.2017
07:39:20
@maksim_melnichuk ес-но. мне казалось что я тут об этом каждый второй день пишу: про словари, про нормализацию строк и тд и тп. собственно у меня выборка по строкам ~2с, по UInt64 - ~0.1с
а как практически словарь взаимодействует с основной таблицей. это что-то типа Join ? или просто функция какая-то, которая по id возвращает строку? и быстро ли это работает

Google
Alexander
21.06.2017
08:10:06
По словарям еще нескромно порекомендую https://www.altinity.com/blog/2017/4/12/dictionaries-explained и https://www.altinity.com/blog/2017/4/20/clickhouse-dictionaries-benchmarking и видео с хайлоада, где я этому вопросу уделил едва ли не четверть времени https://habrahabr.ru/post/322620/ Словари работают быстро, особенно небольшого размера (до 500К). Это рекомендованный способ делать джойны в ClickHouse -- причем по целому ряду причин, в частности внешние словари легко обновляются, чего не скажешь о таблицах. В некоторых случаях словари могут быть медленнее аналогичного запроса с джойнами, например, когда требуется фильтр по значению из словаря. Но это "медленнее" понятие относительное, и при желании можно слегка оптимизировать схему для получения оптимального результата.

Vitaliy
21.06.2017
09:18:33
Evgeny для ad-hoc репортов (пивот таблицы - чарты) можете попробовать seektable.com есть рабочий коннектор к CH. Будет желание попробовать стучитесь в личку помогу настроить.

Vitaliy
21.06.2017
09:23:00
есть варианты для on-premise но увы не бесплатные, я думаю с этим лучше тоже в личку

Alexey
21.06.2017
09:40:02
/stat@combot

Combot
21.06.2017
09:40:02
combot.org/chat/-1001080295593

f1yegor
21.06.2017
09:43:07
если кто вдруг пишет тесты на запросы в кликхаус, на настоящих данных, как вы решаете словари? раньше я запускал clickhouse через докер с дефаулт параметрами, импортнуть нужные данные и сделать тесты на запросы. при добавлении словарей надо добавлять конфиг, делать как-то словарь.

Alexander
21.06.2017
10:27:45
$ service clickhouse-server status clickhouse-server: process unexpectedly terminated

как бы понять, почему

перезапускается, и по прежднему срет всякими эксепшенами в лог

Andrey
21.06.2017
10:48:10
а в сислоге нет ничего?

Alexander
21.06.2017
10:51:51
а в сислоге нет ничего?
пока не нашел, но возможно не там ищу

Google
Andrey
21.06.2017
10:52:11
Andrey
21.06.2017
10:52:11
Парни, а может кто-то стакивался. Пытаюсь со спарка через jdbc коннектор получить данные из КХ. Ругается постоянно на форматы java.lang.Throwable: Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position. ,, expected not empty list of expressions

Alexander
21.06.2017
10:54:07
какая ось?
все, вижу, засралось Jun 20 12:03:04 ad196 kernel: Out of memory: Kill process 15600 (clickhouse) score 835 or sacrifice child Jun 20 12:03:04 ad196 kernel: Killed process 15600 (clickhouse) total-vm:154497092kB, anon-rss:126689436kB, file-rss:20kB Jun 20 15:19:52 ad196 kernel: Out of memory: Kill process 3239 (clickhouse) score 810 or sacrifice child Jun 20 15:19:52 ad196 kernel: Killed process 3239 (clickhouse) total-vm:141219100kB, anon-rss:124798688kB, file-rss:0kB

Andrey
21.06.2017
10:54:54
Да хотя бы обычный select from table

Andrey
21.06.2017
10:55:12
ни один не работает

Andrey
21.06.2017
10:55:17
Andrey
21.06.2017
10:55:25
читаю df таким образом sqlContext.read.format("jdbc").option("url", "jdbc:clickhouse://dsn").option("dbtable", "tableName").load()

Alexander
21.06.2017
10:56:28
это было бы оч круто
object ClickhouseDialect extends org.apache.spark.sql.jdbc.JdbcDialect { override def canHandle(url: String): Boolean = url.startsWith("jdbc:clickhouse") override def quoteIdentifier(colName: String): String = s"""$colName""" } org.apache.spark.sql.jdbc.JdbcDialects.registerDialect(ClickhouseDialect)

Alexey
21.06.2017
10:57:47
Доброго времени суток, подскажите о чем говорит исключение (Too much parts. Merges are processing significantly slower than insert ....) и какие действия надо сделать что бы оно не возникало или возникало реже. Заранее признателен
Сейчас есть проблема, что при объёме данных больше 10 ТБ в месяц, куски плохо мержатся, из-за выставленных настроек по-умолчанию. Если это ваш случай, то можно прописать в config.xml в секции merge_tree, max_bytes_to_merge_at_max_space_in_pool побольше (по-умолчанию - 100 ГБ, можно увеличить до 500 ГБ, например).

Alexander
21.06.2017
10:58:03
Andrey у меня весь гемор со спарком и jdbc был из-за того, что спарк в потрохах своих при составлении запросов использует закавыченные имена столбцов, двойные кавычки

Alexey
21.06.2017
10:58:43
Andrey
21.06.2017
10:59:13
Alexander ты знаешь - помогло!!! Спасибо тебе большое! ?

Alexander
21.06.2017
11:00:55
Нужно взять на заметку. До сих пор работал только с cassandra/hdfs
мне пришлось сначала tcpdump'ом посмотреть, что на КХ прилетает, а потом исходники спарка покурить, прежде чем я понял, что происходит, и как починить ?

papa
21.06.2017
11:01:40
в логах сервера запросы должны быть,

Google
Alexey
21.06.2017
11:01:45
он видать при подьеме начинает мержи гонять, и вылетает по памяти. Вариантов несколько. Либо увеличить память на сервере, либо попробовать ограничить память КХ.
Можно уменьшить максимальное количество потоков для мержей. В users.xml, для профиля default, настройка background_pool_size. По-умолчанию - 16. Для слабых серверов это слишком много. Можно уменьшить. Только не выставляйте меньше 2.

Alexander
21.06.2017
11:03:33
он видать при подьеме начинает мержи гонять, и вылетает по памяти. Вариантов несколько. Либо увеличить память на сервере, либо попробовать ограничить память КХ.
ограничить - это вертеть различные вариации max_memory_usage? тут где-то проскакивала настройка для тотального ограничения

Alexey
21.06.2017
11:04:45
ограничить - это вертеть различные вариации max_memory_usage? тут где-то проскакивала настройка для тотального ограничения
Для мержей ограничивать с помощью max_memory_usage, max_memory_usage_for_all_queries, не имеет смысла.

Alexander
21.06.2017
11:15:27
Для мержей ограничивать с помощью max_memory_usage, max_memory_usage_for_all_queries, не имеет смысла.
комбинируя с max_bytes_before_external_group_by, я полагаю? при дефолтовом ограничении 10Gb регулярно вижу memory limit exceed

в логах сервера запросы должны быть,
jdbc-spark-connector срет 100500 запросов, включая запрос структуры таблиц, и мне нужно было точно видеть, на что мне странные ошибки прилетают. в дампе я однозначно это увидел

papa
21.06.2017
11:17:26
да, так наверно удобнее.

Andrey
21.06.2017
12:21:59
Alexander А может ты еще знаешь как execute функции CH в spark. Нужно какой-то впил в spark.udf?

Например: toMonth(date)

Alexander
21.06.2017
12:48:35
Alexander А может ты еще знаешь как execute функции CH в spark. Нужно какой-то впил в spark.udf?
не, настолько я решил не упарываться, ограничился вьюхами

Aleksandr
21.06.2017
14:52:47
Какой предел по количеству записей/размеру есть у dictionaries?

Andrey
21.06.2017
14:54:23
Какой предел по количеству записей/размеру есть у dictionaries?
память, + еще от типа зависит. https://clickhouse.yandex/docs/ru/single/index.html#document-dicts/external_dicts

Pavel
21.06.2017
15:10:04
вопрос, а насколько эффективно хранение в типе таблицы ReplicatedMergeTree поля array<FixedString(16)> в котором может быть от нуля до десятка таких фиксированных строк? Причем, ожидается большое число одинаковых массивов (одинаковой длины и одинакового содержимого)

Alexey
21.06.2017
15:16:58
Вполне эффективно.

Pavel
21.06.2017
15:18:05
супер, спасибо :)

papa
21.06.2017
15:20:38
ip для доменов?

Alexey
21.06.2017
15:30:02
Только что ответил внутри, из-за чего может быть ошибка Too much parts. Скопирую сюда: Может быть несколько причин, почему такое происходит: 1. Данные не успевают мержатся, но всё-таки мержатся. Это будет видно по наличию большого количества одновременных мержей. Запрос SELECT * FROM system.merges, метрика ClickHouse.Metrics.Merge в Графите. В этом случае может помочь увеличение размера пачки. 2. Данные не мержатся из-за того, что превышено некоторое ограничение. В последней версии ограничение на суммарный размер кусков, которые можно мержить - 100 GB. На практике мы убедились, что это плохо - если за месяц больше 10 ТБ данных, то это приводит к тому, что есть несколько сотен кусков, которые не мержатся. Скоро увеличим по-умолчанию, а пока можно увеличить вручную - я скажу, как. Чтобы проверить - нужно посмотреть на размеры кусков: SELECT * FROM system.parts WHERE active 3. Данные не мержатся из-за бага. Суть в том, что среди реплик выбирается одна реплика-лидер, и именно она решает, какие мержи нужно делать. Раньше было много проблем - например, реплика-лидер могла отставать и не видеть куски для мержей. Или одна реплика могла уступить лидерство, а другая долго не брать его, из-за того, что это требует захвата некоторых блокировок. Все эти проблемы мы исправили и больше не наблюдали :) Но похожие вещи всё-равно могут быть. Чтобы проверить - надо посмотреть на число одновременных мержей, так же, как написано выше. Если мержей нет - значит подозрение на такую проблему.

Pavel
21.06.2017
15:37:23
Ога

Andrey
21.06.2017
16:12:06
''' Cannot parse JSON string: expected opening quote: (at row 1) "" Господа, подскажите, как расширить эту квоту?

Александр
21.06.2017
16:12:45
Судя по тексту ошибки у вас невалидный json

Google
Andrey
21.06.2017
16:21:22
Точняк. Нашёл ошибку. Спасибо.

Igor
21.06.2017
16:23:41
quote не только квота, но и "кавычка"
и квота пишется с "a" на конце :)

Maxim
21.06.2017
17:07:33
Господа, а есть ли какой-то query builder для CH. Желательно такой который интегрируется с ларавел?

Александр
21.06.2017
17:07:55
Есть

Сейчас дам ссылку

Сегодня выкачу там пару фиксов

Maxim
21.06.2017
17:08:17
https://github.com/the-tinderbox/ClickhouseBuilder

не этот?)

Александр
21.06.2017
17:08:31
Он самый

Maxim
21.06.2017
17:08:41
супер)

Александр
21.06.2017
17:08:43
Там пара косяков есть, мы правки собирали

Maxim
21.06.2017
17:09:04
Ладно, попробуем ?

Александр
21.06.2017
17:09:26
Можете пока с ветки 101_add_where_in_file

Использовать

Чуть позже тег накачу

Ладно, попробуем ?
Зарелизил версию 1.0.1. Там исправлены ошибки интеграции с Laravel / Lumen и добавлена возможность использовать локальные файлы как временные таблицы в запросах.

Maksim
21.06.2017
17:44:57
заимплементили у себя прогресс в процентах во всех отображениях выборок для пользователей. Поскольку найти как в яваскрипте получить прогрессом заголовки я не нашел, то сделал в итоге так: у нас есть демон через который делаются все запросы и в этом демоне каждый запрос получает свой идентификатор (uuid). Вот по нему начинаем раз в 100-300 мс запрашивать прогресс, а от кликхауса этот демон получает заголовки которыми менят статус этого запроса

Alexey
21.06.2017
17:49:33
> Поскольку найти как в яваскрипте получить прогрессом заголовки я не нашел Когда делал фичу, меня убеждали, что в JavaScript это возможно. Какой-то колбэк для XMLHTTPRequest.

Александр
21.06.2017
17:49:54
Возможно

Там весь стейт xhr можно контролировать

Google
Александр
21.06.2017
17:50:30
И он readyStateChange ловить заголовки

И отрисовывать прогресс

Либо можно еще круче сделать. Если кх не буферизует вывод, а чанками кидает ответ (как nginx, например) можно прям по чанкам склеивать ответ налету и в том числе парсить заголовки

Maksim
21.06.2017
17:53:22
оо, я не туда и не так смотрел значит

надо меньше пользоваться fetch

Александр
21.06.2017
17:53:36
:)

Народ отвык от ванильного xhr

Maksim
21.06.2017
17:53:55
не-не, дело не в скачивании ответа, а в получении от кликхауса информации о том, сколько времени ему ещё ковыряться по диску

Александр
21.06.2017
17:54:16
Он вроде как такой инфы не предоставляет

Maksim
21.06.2017
17:54:27
предоставляет через хедеры

Alexey
21.06.2017
17:54:34
Получения заголовков и колбэк на каждый новый заголовок?

Александр
21.06.2017
17:54:56
Он вроде показывает прогресс выполнения запроса, который может меняться при выполнении подзапросов

Maksim
21.06.2017
17:54:58
примерное количество строк в результате и сколько уже набрано строк: готово вполне приличное решение для прогресс бара

да ладно, это уже вполне неплохо: ждать ещё 10 секунд или 3 минуты

Александр
21.06.2017
17:55:54
Там не совсем колбэк на заголовки, там скорее аля сик по стриму

Там при получении каждого нового чанка с ним можно что-то делать

Я так в свое время делал прогресс выполнения каких то операций в фоне

Просто на каждую строку прилетал актуальный прогресс. Каждая строка получалась отдельным "чанком", т.к. буфер вывода опустошался после каждой итерации например или после каждой блокирующей операции

Работало :)

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