
Kirill
07.09.2018
06:19:29
Доброе утро, как максимально быстро вытянуть, например, 10 000 000 записей каждая по 1кб из кликхауса? я посмотрел - capnproto на чтение не поддерживается, а go клиент kshvakov/clickhouse вроде как не поддерживает сжатие. В принципе, наверное, достаточно их читать в режиме стрима отсортированными, так что только TTFB будет критично. То есть получается нужен клиент, который умеет отдавать записи стримом, желательно на go
Go клиент (через database/sql) очень медленный на чтение, все нет времени переписать чтоб можно было напрямую использовать без стандартной библиотеки. На данный момент самое быстрое это читать через clickhouse-client или взять https://github.com/kshvakov/clickhouse/tree/master/lib и написать свое решение для чтения


Vadim
07.09.2018
06:22:17
Кто-то сталкивался с тем что на одинковой нагрузке и почти одинаковых железках в реплике, чтение с одной утилизирует 10-20% вычислительных мощностей а со второй - 150-200%
даже вставку оставил только на 1й, вторая только реплику получает

Nicholas
07.09.2018
06:26:05

Google

Nicholas
07.09.2018
06:28:14
Сам не пользовался, но коллеги говорят что самый быстрый.

Alexey
07.09.2018
06:44:27
Спасибо, буду смотреть

Маркел
07.09.2018
07:01:22
ребята, а у MATERIALIZED VIEW могут быть свои индивидуальные настройки по блокам?

Kirill
07.09.2018
07:06:14

Nick
07.09.2018
07:07:11
Добрый день. Скажите, для MATERIALIZED VIEW потребовалось изменить схему и группировку, alter table естественно не сработает. Какие есть способы для решения этой задачи, если view уже крутится в проде ?

Kirill
07.09.2018
07:13:33

Vladimir
07.09.2018
07:13:47
А может будет проще просто добавить новые MATERIALIZED столбцы в исходную таблицу

Nick
07.09.2018
07:18:12
там же не только новые столбцы, но и группировка меняется

Vladimir
07.09.2018
07:22:33

Nick
07.09.2018
07:33:02
Понимаете в чем проблема. У нас данные из базовой таблицы будут удаляться. Т.е. будем оставлять данные там за несколько месяцев. И при таком раскладе (с новой вьюхой и удалением старой), мы потеряем старые данные

Kirill
07.09.2018
07:37:19

Google

LeiDruid
07.09.2018
08:26:04
Товарищи, а такое вообще законно?
2018.08.27 15:41:11.969067 [ 11 ] <Error> void DB::BackgroundProcessingPool::threadFunction(): Code: 84, e.displayText() = DB::Exception: Directory /.1/clickhouse/data/db/archive/tmp_merge_20180827_20180827_1850553031_1850553061_6/ already exists, e.what() = DB::Exception, Stack trace:
В такие моменты пропадает часть данных

Konstantin
07.09.2018
09:06:03
подскажите почему выполняется без ответа?

Kirill
07.09.2018
09:09:25
Может так query="INSERT INTO tbl_name Values ('2018.09.07 11:58:30')" ? Запрос не выглядит валидным.

Konstantin
07.09.2018
09:11:58
на счет валидности, если напрямую отпраивть через tabix то проходит

LeiDruid
07.09.2018
09:12:41
Такое проявляется, когда io в полочку

Konstantin
07.09.2018
09:13:52
print(str(client.execute("SHOW TABLES")) работает

Kirill
07.09.2018
09:13:57

Kirill (Pandy)
07.09.2018
12:32:19
Всем привет, помогите разобраться с проблемой:
есть таблица
CREATE TABLE ws_statistic_test.internal_analytics (
server_id UInt32,
event_date Date DEFAULT toDate('1970-01-01'),
event_time DateTime,
account_id UInt32,
hero_id UInt32,
hero_level UInt32,
hero_class UInt32,
event_id UInt32,
param_1 UInt32,
param_2 UInt32,
param_3 UInt32
) ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/internal_analytics_test',
'2',
event_date,
(server_id, event_date),
8192
)
при отправке запроса
insert into ws_statistic_test.internal_analytics (server_id, event_date, event_time) values (5, toDate('2018-01-01'), toDateTime('2018-01-01 00:00:00'))
в базу записываются данные
если повторить точно такой же запрос, то возвращается ответ 200, но данные в базу не пишутся
с чем связано такое поведение?


Kirill
07.09.2018
12:35:50
Всем привет, помогите разобраться с проблемой:
есть таблица
CREATE TABLE ws_statistic_test.internal_analytics (
server_id UInt32,
event_date Date DEFAULT toDate('1970-01-01'),
event_time DateTime,
account_id UInt32,
hero_id UInt32,
hero_level UInt32,
hero_class UInt32,
event_id UInt32,
param_1 UInt32,
param_2 UInt32,
param_3 UInt32
) ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/internal_analytics_test',
'2',
event_date,
(server_id, event_date),
8192
)
при отправке запроса
insert into ws_statistic_test.internal_analytics (server_id, event_date, event_time) values (5, toDate('2018-01-01'), toDateTime('2018-01-01 00:00:00'))
в базу записываются данные
если повторить точно такой же запрос, то возвращается ответ 200, но данные в базу не пишутся
с чем связано такое поведение?
Дедупликация

Kirill (Pandy)
07.09.2018
12:37:44
Спасибо

Solresl
07.09.2018
12:48:21
Может кто подсказать как правильно натсроить CH, если есть 3 хоста, на каждом из них должен быть шард и реплика одного из других шардов?

Ivan
07.09.2018
12:49:03

Solresl
07.09.2018
12:49:50
Мм уверены что работает?
Там критичен момент, что в конфиге указывается для shard: <default_database>testcluster_shard_1</default_database>
Но Ch ругается, что не понимает параметра.

Michael
07.09.2018
12:51:26
Делали без default_database; на репликацию не влияет

Solresl
07.09.2018
12:54:34

Michael
07.09.2018
12:56:50
Нет, база одна, по две таблицы на шард. В первой - данные этого шарда; во второй - данные соседнего
В итоге от этой схемы отказались

Google

Solresl
07.09.2018
13:00:56

Michael
07.09.2018
13:04:27
Во второй таблице каждого шарда указывали путь в Зукипере к первой таблицы соседнего шарда

Solresl
07.09.2018
13:08:27
не понял, чем это отличается от схемы в статье: две таблицы на шард, путь указывается в zookeeper.

Артем
07.09.2018
13:12:10
Есть ли возможность, при группировке вместо аггрегации, создать массив в который положить значения ?

Ivan
07.09.2018
13:16:14

Артем
07.09.2018
13:17:55

Max
07.09.2018
14:39:15
Всем привет, можно ли такое сделать посредством только КХ или надо выгружать данные и городить мап-редьюс. Есть общая таблица в ней есть имя события, ид, время. Данные к примеру такие:
#1, 12345, время1
#2, 12345, время2
#2, 12345, время3
#1, 12345, время 4
#1, 12345, время 5
#2, 12345, время 6
И хочется посчитать средне время между событием 1 и событием 2
Те надо посчитать время1-время2, время1-время3 и время4-время6

Vladimir
07.09.2018
14:40:38
есть какая-то функция, которая по времени дельту считает между строк

Tima
07.09.2018
14:41:11

Max
07.09.2018
14:42:14
Проблема как понять что подавать на вход для подсчёта времени. Те время6 надо считать для времени 4 а не для 1 или 5

Tima
07.09.2018
14:43:01
Так отсортируйте по дате и этому номеру
В подзапросе. а в самом запросе примените runningDifference

Denis
07.09.2018
14:43:30

Max
07.09.2018
14:44:00

Denis
07.09.2018
14:44:30
Если бы сделали функцию lag, то на её основе решалось бы.

Max
07.09.2018
14:45:01
4 а не 5 ТК было событие которое никто не увидел, потом пришло 5 и только потом увидели уже сразу два события. В таком случае считать надо от самого старого времени

LeiDruid
07.09.2018
14:45:15
Товарищи, в логах есть вот такой еррор
executeQuery: Code: 164, e.displayText() = DB::Exception: Cannot execute query in readonly mode, e.what() = DB::Exception
при этом таблицы такой (как указана дальше) и в помине нет
Это нормально ?

Google

LeiDruid
07.09.2018
14:45:52
или что-то недочищено ?

Max
07.09.2018
14:46:53

Tima
07.09.2018
14:52:23

Max
07.09.2018
14:54:45
Берём данные у который совпадают ид ,в моем случае это 12345. И надо взять по очереди событие 1 найти все события 2 пока не встретится опять событие 1. И посчитать время реакции. И так для всех данных за день. Потом вернуть среднее время реакции
Для моего примера это в2-в1, в3-в1 и в6-в4.
Событие 2 идёт от разных пользователей поэтому их может быть много и время считаем для каждого

Denis
07.09.2018
14:59:13

Max
07.09.2018
15:01:37
А 5 выкидывать?
ТК его увидят вместе с 4, но можно и оставить. Этот вопрос пока ещё обсуждается.

Denis
07.09.2018
15:05:06

Max
07.09.2018
15:06:07
Так есть ид, которое связывает события.
Ну и то что будет много данных тип 1 а потом одно событие 2 то такая работа приложения.
С этим ничего не поделать.

I
07.09.2018
15:50:36
Подскажите, пожалуйста. У меня есть список событий с датой их создания. Некоторые события имеют общий айди. Мне необходимо получить самые "свежие" события по данному айди. Каким образом это можно сделать?

papa
07.09.2018
15:54:17
group by id argmax(x, date)

I
07.09.2018
16:05:34

Konstantin
07.09.2018
16:25:21
Кто нибудь использовал пакет clickhouse-driver?
При вставке в поле типа Datetime пакет ругается что у объекта str нет tzinfo.
Timestamp тоже не глотает

Yuri
07.09.2018
17:10:24
Подскажите, пожалуйста, ещё ничего не знаю про CH, только в процессе развертывания системы под ubuntu, раньше пользовался GA в связке с Analytics Edge. Вопрос такой: как известно, в GA выборка по срезу нескольких измерений (пол, возраст, устройство) может уменьшаться по мере наличия значений в этих изменениях (проще говоря, при срезе 2 или больше измерений, отсутствие данных в измерении приведет к исключению визита из выборки), как обстоят с этим дела в метрике и CH? Можно ли в принципе с помощью CH получить такую выборку по нескольким срезам (их может быть гораздо больше двух), при этом не сокращая ее при отсутствии данных (просто подставляя значение none)?


Tima
07.09.2018
17:12:25
Подскажите, пожалуйста, ещё ничего не знаю про CH, только в процессе развертывания системы под ubuntu, раньше пользовался GA в связке с Analytics Edge. Вопрос такой: как известно, в GA выборка по срезу нескольких измерений (пол, возраст, устройство) может уменьшаться по мере наличия значений в этих изменениях (проще говоря, при срезе 2 или больше измерений, отсутствие данных в измерении приведет к исключению визита из выборки), как обстоят с этим дела в метрике и CH? Можно ли в принципе с помощью CH получить такую выборку по нескольким срезам (их может быть гораздо больше двух), при этом не сокращая ее при отсутствии данных (просто подставляя значение none)?
Всё очень сильно зависит от ваших данных, запросов и от того, какую схему вы сделаете
Так что только заливать как есть, пробовать, экспериментироватт


Yuri
07.09.2018
17:14:04
Ух, это создаёт ещё кучу вопросов) какая зависимость от данных и запросов? Если есть куда направить почитать - такой вариант только приветствуется. Схема, на которой GA вместе с Edge провалились, пол-возраст-устройство-город

Google

Tima
07.09.2018
17:34:05
На сайте КХ, в документации, есть примеры с бенчмарками. Посмотрите как там заливаются данные, сделайте по аналогии. Потом попробуйте повторить ваши запросы на диалекте КХ

Yuri
07.09.2018
18:10:55

Pavel
07.09.2018
18:21:29

Max
07.09.2018
19:42:36
Не в курсе есть ли пример high order function на несколько действий. А то не понятно можно ли сложную логику туда запихнуть на несколько строчек?

Tima
07.09.2018
20:03:10

Max
07.09.2018
20:07:07
Типа так

Tima
07.09.2018
20:08:27
Они не так работают
https://github.com/yandex/ClickHouse/search?l=SQL&q=array

Max
07.09.2018
20:08:33
Те хочется какой то код писать. А то пока работает только одна операция arrayMap(x -> x+10, arr)

Alexey
07.09.2018
20:10:51
Можно хоть десять
Внутри

Max
07.09.2018
20:11:28

Alexey
07.09.2018
20:12:10
has(arrayMap(x -> toUInt16(replaceRegexpAll(x, '1#', '')), arrayFilter(x -> (x = '1#5'), arr_segments)), 5) as segment5
ну типа такого

Max
07.09.2018
20:13:28
Ага, те разделитель запятая