@clickhouse_ru

Страница 379 из 723
Vladimir
28.12.2017
10:47:51
Коллеги, добрый день! Помогите, пожалуйста написать запрос.. Есть текстовое поле, в котором в одинарных и двойных кавычках значение , нужно превратить его в массив. Проблема возниет тогда, когда внутри значения тоже есть кавычка...

select r , CAST(r as Array(String)) from ( select '[\'""a""\',\'""b""\', \'""Q\'n\'A""\']' as r )

Ругается вот таким образом: Code: 130, e.displayText() = DB::Exception: Cannot read array from text, e.what() = DB::Exception

Petr
28.12.2017
10:48:39
hex

Google
Vladimir
28.12.2017
10:52:08
hex
Проблема в том, что я на вход получаю уже строку как в примере

papa
28.12.2017
10:56:13
а тот кто делал ее для примера, не может при оборачивании в внешние одинарные кавычки эскейпить еще раз слеши и одинарные кавычки внутри?

papa
28.12.2017
10:59:04
вот это поворот

Alexey
28.12.2017
11:05:11
Доброго всем дня. Подскажите пожалуйста. Переехали на другой кластер zookeeper. Данные со старого кластера перекопировали. Все данные на чтение доступны. Приложения пишут и говорят что всё хорошо, в логах тоже идёт трейс о выполнение инсертов, но новых данных не видим. Насколько поняли идёт дедупликация данных, но по какой причине база начала это делать не понимаем. Базы ReplicatedMergeTree. в логе ошибок постоянно говорит Tried to add obsolete part 20171228_20171228_3620_3620_0 covered by 20171201_20171207_0_311 86_3462 (state Committed) В system.zookeeper видим информацию по новым кускам, но непонятен их статус и по какой причине не идёт инсерт новых данных. Кто-нибудь сталкивался?

Версия CH 1.1.54327. Обновились с 310, так как поймали проблему с DB::Exception: Unexpected state of part

Vladimir
28.12.2017
13:03:54
Коллеги, а как в КХ парсить json, если нужно подставлять данные другуго столбца? Никто не решал?

Mariya
28.12.2017
13:08:16
Коллеги, а как в КХ парсить json, если нужно подставлять данные другуго столбца? Никто не решал?
Привет, опиши, пожалуйста, подробнее задачу - пока что не очень понятно.

Vladimir
28.12.2017
13:11:57
Привет, опиши, пожалуйста, подробнее задачу - пока что не очень понятно.
Привет, хочу все параметры визитов преобразовать вот таким образом: Из "['{""a"": [{""b"": ""123""}, {""c"": ""321""}]}']" В [[a, b, 123], [a, c, 321]] Сейчас регулярками вытащил первый элемент (в примере 'a'), теперь нужно для него вытащить "подэлемент", хочу сделать visitParamExtractRaw(params, var_for_a) но КХ ругается, что должна быть константа

Mariya
28.12.2017
13:20:52
Vladimir
28.12.2017
13:25:28
Кажется, проще сделать это преобразование на уровне скрипта выгрузки данных из Logs API и загружать в ClickHouse уже в нужном виде. Потому что полноценной функциональности по парсингу json в CH сейчас нет.
Это простой в разработке, но долгий по выполнению процесс, по-этому пытаюсь решить на стороне КХ. Видимо помучаюсь ещё и прийду к варианту внешней обработки :(

Google
Mariya
28.12.2017
13:29:52
Это простой в разработке, но долгий по выполнению процесс, по-этому пытаюсь решить на стороне КХ. Видимо помучаюсь ещё и прийду к варианту внешней обработки :(
Если параметры достаточно типичны (не так, что каждая строка уникальна), то может помочь, вытащить из ClickHouse агрегаты по нераспаршенному полю Params и уже снаружи досчитать - у меня такой трюк несколько раз срабатывал :) Но тут все зависит от задачи и данных, конечно.

Alexey
28.12.2017
13:36:02
Alexander
28.12.2017
13:38:08
/clickhouse

Alex
28.12.2017
13:42:35
Да, скорее всего так нельзя делать. Счётчики для sequential нод берутся из внутреннего состояния родительской ноды, а это состояние теряется при копировании.

Alexey
28.12.2017
13:47:04
Печально. Будем теперь знать. Решение нашли пересозданием баз с копированием данных из старых.

Vyacheslav
28.12.2017
14:27:36
а кликхаус может оптимизировать доступ к диску сразу по нескольким одновременным запросам?

Felixoid
28.12.2017
15:04:33
Есть ли рекомендуемый вариант переноса на другой Zookeeper кластер?
у меня был опыт не переноса данных ЗК, но замены всех хостов в кластере ЗК (2 с изменением имени и одна нода была с переустановкой системы)

выглядело примерно так: 1 + 2 + 3 1 + 2 + 3 + 4 + 5 3 + 4 + 5 3 после этого выключилась, летели на двух в момент переналивки машины затем всё устаканилось в 3 + 4 + 5

даунтайм был, фактически, время перевыбора лидера на одного из 4 или 5. Но пришлось перепустить кластер КХ, чтобы он пришёл в себя

Беслан
28.12.2017
16:30:23
А есть какое-то ограничение на количество ключей в GROUP BY ?

За исключением здравого смысла

papa
28.12.2017
16:31:33
max_rows_to_group_by?

Беслан
28.12.2017
16:35:02
У этого параметра нет крайнего значения, которое зашито в код?

Alex
28.12.2017
16:41:06
2^64 - 1 :)

Dmitry
28.12.2017
16:48:11
Ребята, подскажите, пожалуйста, как правильно выбрать колонку для семплирования для мердж три?

Или поделитесь, где почитать. В доке не сильно понял

papa
28.12.2017
17:31:37
а может у вас и без семплирования все работает?

Павел Максимов
28.12.2017
17:31:54
Подскажите, какой ключ для семплирования использовать, например для данных из logsapi ?

Google
pavel
28.12.2017
17:32:55
1) Как проще всего скопировать имеющиеся нереплицируемые MergeTree таблицы с одного сервака на другой? DETACH -> cp -> attach А ещё? 2) MATERIALIZED VIEW - в неё можно просто INSERT-ы фигачить? Это обычная таблица, которая обладает дополнительным умением триггерить перелив в себя данных заданным в неё SELECT-ом по событиям инсерта в другую таблицу, но спокойно жрёт и обычные INSERT-ы напрямую, да?

papa
28.12.2017
17:34:00
Подскажите, какой ключ для семплирования использовать, например для данных из logsapi ?
в метрике данные организованы так: партиции по месяцам, сортировка по счетчику, дате, юзеру, семплирование по юзерам.

papa
28.12.2017
17:48:00
почему они так организованы в метрике почти все запросы имеют условие where counter_id = 42 and date between start and end and ... при таком ключе получается range scan по нужным партишнам. что касается юзеров, то их много на каждый счетчик-дату, и они хорошо распределены по своему диапазону (на самом деле у нас для этого они хешируются). это позволяет выделять группы 1/10, 1/100 .. в диапазонах значений и они с одной стороны попадают в меньшее число блоков т.е. уменьшают время на чтение, с другой стороны группы достаточно большие и случайные чтобы не слишком смещать статистики. и т.к. история одного юзера или попадает целиком или не попадает совсем, то всякие функции от юзеров не страдают.

Vladimir
28.12.2017
18:04:19
Подскажите, какой ключ для семплирования использовать, например для данных из logsapi ?
Я вам очень рекомендую сразу делать таблицы с партиционированием по дням. Это позволит перезаливать данные за последние дни, чтобы поддерживать их актуальность. У меня на хитах вот такая таблица: ENGINE = MergeTree PARTITION BY date ORDER BY (url, intHash32(client_id)) SAMPLE BY intHash32(client_id) SETTINGS index_granularity = 8192

Vladimir
28.12.2017
18:05:42
партиционирование по дням не замедлит работу КХ?
Замедлит выборки по большим диапазонам дат, но по моему опыту - не критично. Зато не приходится каждый день по месяцу перезаписывать

Andrey
28.12.2017
18:13:25
Ребят, подскажите в какую сторону копать? Есть два шарда в каждом по две реплики. Когда вставляю данные в distributed таблицу, то на выходе sum по одному из полей выдаёт сильно большее значение, чем должно быть. Таблица ReplicatedSummingMergeTree (с replicatedmergetree тоже самое). При вставку данных напрямую в шард, все корректно.

Alexey
28.12.2017
18:45:37
Использовали https://github.com/ksprojects/zkcopy Скопировали все ноды /clickhouse Счётчики там же располагаются или в другом?
На всякий случай создал для них issue: https://github.com/ksprojects/zkcopy/issues/15 Рекомендованный способ переноса кластера ZK - путём добавления новых реплик и затем удаления старых.

Что значит не соответствующее?
Если на серверах используются Replicated таблицы, то internal_replication выставляется в true, иначе в false. Подробнее в документации...

Andrey
28.12.2017
18:50:37
Alexey
28.12.2017
19:06:45
а кликхаус может оптимизировать доступ к диску сразу по нескольким одновременным запросам?
Нет, для нескольких одновременных запросов - не оптимизирует.

Dmitry
28.12.2017
19:15:16
приветствую - использую Buffer - есть подозрение что не флашит на диск

Dmitry
28.12.2017
19:31:03
нашел, даже нашел проблему - https://github.com/yandex/ClickHouse/issues/957

Konstantin
28.12.2017
20:41:26
Так что такое шард?

Google
Felixoid
28.12.2017
20:44:03
Так что такое шард?
инстанс с частью данных

kamish
28.12.2017
20:44:42
shard — осколок, если что

Konstantin
28.12.2017
20:45:31
Благодарб

Vadim
28.12.2017
20:51:14
у насекомых означает "надкрылье"

Edouard
28.12.2017
21:00:19
Так что такое шард?
Здесь интересные презентации, в том числе даны некоторые азы и ch-specific моменты, если вам интересно познакомиться именно с основами: https://www.slideshare.net/search/slideshow?searchfrom=header&q=clickhouse + https://clickhouse.yandex/presentations/meetup7/internals.pdf

Andrey
28.12.2017
21:26:55
Всем доброй ночи. Подскажите начинающему. Есть у пользователей некие логи - их много и все они пишутся в табличку Loggi. При добавлении нового лога, необходимо прочитать значение предыдущего лога и записать новый лог со значением прошедшего времени по отношению к предыдущему, но в табличке Loggi очень много значений, что существенно замедляет процесс выборки последнего лога пользователя. В данном случае имеет смысл вести отдельную табличку с последними значениями лога пользователя, но CH не позволяет update или delete. Подскажите – как в CH подобное можно реализовать? Да и данные о последних логах должны быть реплицируемыми.

Andrey
28.12.2017
21:41:24
1) это понятно, вопрос - чтобы их построить - надо найти значение предыдущей а там мммного записей

2) Очень полезно, но не то - мне надо записывать в таблицу Loggi уже с дельтой

Была идея табличку последних статусов (логов) пользователя писать в sql, но не хотелосьбы две базы городить на одном сервере

Vladimir
28.12.2017
21:44:33
ну или чего там у тебя уникального

Andrey
28.12.2017
21:45:33
допустим пользователей 10.000 и примерно каждые 2 минуты от них идут логи.

Kirill
28.12.2017
21:46:18
Держать в памяти последние значения, считать дельту и скидывать в КХ

Vladimir
28.12.2017
21:48:51
вот вот

поставить под это дело какой-нибудь даже redis

впрочем на 10к пользователей много не надо

но в общем что мешает не писать это значение, а выссчитывать по мере надобности?

Andrey
28.12.2017
21:51:43
но в общем что мешает не писать это значение, а выссчитывать по мере надобности?
Сложно объяснить, но надо писать уже с расчитанным значением.

Vladimir
28.12.2017
21:52:05
Сложно объяснить, но надо писать уже с расчитанным значением.
в той штуке что принимает логи и считай тогда

Google
Andrey
28.12.2017
21:52:08
Vladimir
28.12.2017
21:52:13
при запуске запрашивай последний

Andrey
28.12.2017
21:52:51
Vladimir
28.12.2017
21:53:06
Обработчик на JavaScript
ну а кто делает batch'и из входящих данных?

и собственно пишет в кх

вот в нем и считай разницу

Andrey
28.12.2017
21:54:58
ну а кто делает batch'и из входящих данных?
Приходит json - парсим, обрабатываем JS и пишем в БД

Vladimir
28.12.2017
21:55:14
у вас какая-то шняга которая аккумулирует данные и пишет пачками сразу есть

(если нету - повод сделать)

Igor
28.12.2017
21:58:54
Если вы знаете значение до и после - ReplacingMergeTree

10К записей в Replacing это не много -- можно початать -- записать

Andrey
28.12.2017
22:00:36
ну вы же не 1 инсерт делаете
Владимир, приходит от пользователя допустим 100 логов, мы их парсим и обрабатываем один за одним, а не паралелим. Простите за глупый вопрос а как пачку при помощи JS вставить в КХ?

Vladimir
28.12.2017
22:01:20
Владимир, приходит от пользователя допустим 100 логов, мы их парсим и обрабатываем один за одним, а не паралелим. Простите за глупый вопрос а как пачку при помощи JS вставить в КХ?
эээ, я js не знаю, но в общем в процессе пишешь в какую-то структурку и сбрасываешь в базу раз в секунду по таймеру. Вариантов много

Andrey
28.12.2017
22:05:29
Если вы знаете значение до и после - ReplacingMergeTree
Тоесть, прочитать значение из таблицы ReplacingMargeTree, расчитать разницу и записать в обратно с одинаковым ключём новую запись - соответственно старая удалиться. Я правильно понял?

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