
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
а тот кто делал ее для примера, не может при оборачивании в внешние одинарные кавычки эскейпить еще раз слеши и одинарные кавычки внутри?

Vladimir
28.12.2017
10:58:23

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

Kirill
28.12.2017
11:09:44

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

Mariya
28.12.2017
13:08:16

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

Alex
28.12.2017
13:18:29


Mariya
28.12.2017
13:20:52
Привет, хочу все параметры визитов преобразовать вот таким образом:
Из
"['{""a"": [{""b"": ""123""}, {""c"": ""321""}]}']"
В
[[a, b, 123], [a, c, 321]]
Сейчас регулярками вытащил первый элемент (в примере 'a'), теперь нужно для него вытащить "подэлемент", хочу сделать visitParamExtractRaw(params, var_for_a) но КХ ругается, что должна быть константа
Кажется, проще сделать это преобразование на уровне скрипта выгрузки данных из Logs API и загружать в ClickHouse уже в нужном виде. Потому что полноценной функциональности по парсингу json в CH сейчас нет.

Vladimir
28.12.2017
13:25:28

Google

Mariya
28.12.2017
13:29:52

Vladimir
28.12.2017
13:31:24

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

Andrei
28.12.2017
14:36:13

Felixoid
28.12.2017
15:04:33
выглядело примерно так:
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

Павел Максимов
28.12.2017
17:34:50

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

Павел Максимов
28.12.2017
18:04:59

Vladimir
28.12.2017
18:05:42

Павел Максимов
28.12.2017
18:07:00

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

Alexander
28.12.2017
18:14:17

Alexey
28.12.2017
18:43:59

Andrey
28.12.2017
18:45:07

Alexey
28.12.2017
18:45:37
Что значит не соответствующее?
Если на серверах используются 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 - есть подозрение что не флашит на диск

Ilya
28.12.2017
19:15:31

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 подобное можно реализовать? Да и данные о последних логах должны быть реплицируемыми.

Kirill
28.12.2017
21:38:55


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
и собственно пишет в кх
вот в нем и считай разницу

Andrey
28.12.2017
21:54:58

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

Andrey
28.12.2017
22:05:29

Igor
28.12.2017
22:08:18