@clickhouse_ru

Страница 649 из 723
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й, вторая только реплику получает

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

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

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

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

Kirill
07.09.2018
07:13:33
Добрый день. Скажите, для MATERIALIZED VIEW потребовалось изменить схему и группировку, alter table естественно не сработает. Какие есть способы для решения этой задачи, если view уже крутится в проде ?
DETACH/ATTACH MATERIALIZED VIEW your_mv AS SELECT или лучше сразу создавать МШУЦ на существующую таблицу как CREATE MV TO чтоб можно было спокойно дропать и создавать

Vladimir
07.09.2018
07:13:47
в MV процентов на 15-20% меньше (500 mln vs 600 mln, а если брать доп условие WHERE то 12 mln vs 16 mln)
Думаю, вполне можно использовать такую MV, если в ней будет крутиться достаточно тяжёлая логика вроде разбора длинных строк по регулярным выражениям.

А может будет проще просто добавить новые 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
Понимаете в чем проблема. У нас данные из базовой таблицы будут удаляться. Т.е. будем оставлять данные там за несколько месяцев. И при таком раскладе (с новой вьюхой и удалением старой), мы потеряем старые данные
Под въюхой лежит обычная таблица, создайте таблицу с нужной вам структурой и сделайте на нее CREATE MATERIALIZED VIEW MV TO new_table и можно будет обновлять новое въю без удаления таблицы и прочих танцев с бубном, а данные просто перелейте

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 то проходит

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 (Pandy)
07.09.2018
12:37:44
Спасибо

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

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
Делали без default_database; на репликацию не влияет
также создавали разные базы под шарды?

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

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

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

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

Артем
07.09.2018
13:17:55
groupArray
спасибо

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
есть какая-то функция, которая по времени дельту считает между строк

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
Те надо посчитать время1-время2, время1-время3 и время4-время6
Почему 4-6, а не 5-6? И почему от меньшего большее отнимаете?

Max
07.09.2018
14:44:00
Почему 4-6, а не 5-6? И почему от меньшего большее отнимаете?
Криво написал, а так да надо от большего меньшее отнимать

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
Так отсортируйте по дате и этому номеру
Так номеров куча. Есть миллионы событий как #1 так и #2 и надо получить среднее время реагирования на событие тип 1. Реакция это событие тип 2

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

Для моего примера это в2-в1, в3-в1 и в6-в4.

Событие 2 идёт от разных пользователей поэтому их может быть много и время считаем для каждого

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

Denis
07.09.2018
15:05:06
Берём данные у который совпадают ид ,в моем случае это 12345. И надо взять по очереди событие 1 найти все события 2 пока не встретится опять событие 1. И посчитать время реакции. И так для всех данных за день. Потом вернуть среднее время реакции
Вам намного лучше будет привязывать реакцию к источнику в данных. Иначе как только увеличится запаздывания станет абсолютно непонятно, где на что отреагировали.

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
group by id argmax(x, date)
Благодарю

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)?

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

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

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

Max
07.09.2018
20:07:07
Несколько действий это как?
Это к примеру в arrayMap(x -> {var y = indexOf(anotherarr, x); var z = x > 10? 5: 9; return x*z-y}, arr)

Типа так

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)

Они не так работают https://github.com/yandex/ClickHouse/search?l=SQL&q=array
Ну да там только одна операция везде

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
Ага, те разделитель запятая

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