
Александр
20.06.2017
18:50:04
Спасибо вам всем за все что вы делаете :)

Alexey
20.06.2017
18:50:06
https://github.com/yandex/ClickHouse/blob/master/docs/en/development/build.rst

Александр
20.06.2017
18:52:09
Очень жить мешает :)

Google

Alexey
20.06.2017
18:56:09
Неправильное выкидывание ненужных столбцов из подзапросов. Пока не исправили. Эта функциональность сделана неудобно и возникает желание сделать исправление более глобально. Может быть, получится исправить быстрее, если очень надо.

Александр
20.06.2017
18:56:53
Просто если это пофиксить, то это сэкономит тонну процессорного времени
Из-за невозможности выполнить подобный запрос приходится считать результаты таких запросов на прикладном уровне, а это иногда бывает не быстро

Alexey
20.06.2017
18:59:09
А можете ещё приложить структуры таблиц (SHOW CREATE TABLE)?

Александр
20.06.2017
18:59:26
Да, сейчас напишу в issue
Закинул
Могу так же семпл данных приложить

Alexey
20.06.2017
19:07:41
Пригодится.

Александр
20.06.2017
19:08:06
Ок, тогда подготовлю сейчас семпл в csv и закину тоже
Добавил семпл с данными. Там 2.5 млн строк

Alexander
20.06.2017
19:38:55
Как же все сложно в обычном sql:
... where sym in (select arrayJoin(arrayMap(x->cityHash64(x), ['AAA','BBB'])))
вместо векторного:
... where sym in cityHash64 each ['AAA','BBB']

papa
20.06.2017
19:42:41
я бы делал has(arrayMap(x->cityHash64(x), ['AAA','BBB']), sym)

Google

papa
20.06.2017
19:43:02
хотя наверно то же самое будет.

Alexander
20.06.2017
19:45:03
Совсем не ясно почему колонка (что в векторной базе = вектор), тут не считается вектором (массивом) по сути.
С has вообще не очень понятно как работает, те и не должно по идее работать, но главное в 200 раз медленнее

papa
20.06.2017
19:48:53
синтаксически список в правой части in это вообще тупл, т.е. не массив, хотя проверки относительно него делаются как для массива, проверяется существования общего типа всех компонентов. массивы же не считаются отношениями, это такой вектор-строка, в отличие от вектора-столбца, который представляет собой таблица с одной скалярной колонкой. arrayReduce немного маскирует это отличие, но не всегда помогает.

Alexander
20.06.2017
19:49:40
Has возвращает булевый массив, но он будет не соответствовать длине sym => странно что where его вообще принимает.

papa
20.06.2017
19:50:21

Alexander
20.06.2017
19:51:17
Я не понимаю как where может работать при таком подходе, :) может только тиражирует все на каждую строку, отсюда и скорость.

papa
20.06.2017
19:51:26
SELECT has([1, 2, 3], 1)
┌─has([1, 2, 3], 1)─┐
│ 1 │
└───────────────────┘
а у вас sym это массив?

Alexander
20.06.2017
19:52:11
А, извиняюсь, параметры в голове местами переставил. Тогда странно что так медленно
Нет, сим - это колонка.
Чуть позже пришлю запрос как он в кдб выглядит и какой он получается (пока не получается).


papa
20.06.2017
19:59:12
SELECT *
FROM
(
SELECT number AS x
FROM system.numbers
LIMIT 100000000
)
WHERE has(
(
SELECT arrayMap(x -> cityHash64(x), ['AAA', 'BBB'])
), x)
Ok.
0 rows in set. Elapsed: 1.693 sec. Processed 100.01 million rows, 800.06 MB (59.07 million rows/s., 472.52 MB/s.)
SELECT *
FROM
(
SELECT number AS x
FROM system.numbers
LIMIT 100000000
)
WHERE has(arrayMap(x -> cityHash64(x), ['AAA', 'BBB']), x)
Ok.
0 rows in set. Elapsed: 4.484 sec. Processed 100.01 million rows, 800.06 MB (22.30 million rows/s., 178.43 MB/s.)в три раза отличается.
SELECT *
FROM
(
SELECT number AS y
FROM system.numbers
LIMIT 100000000
)
WHERE y IN
( SELECT arrayJoin(arrayMap(x -> cityHash64(x), ['AAA', 'BBB']))
)
Ok.
0 rows in set. Elapsed: 0.389 sec. Processed 100.01 million rows, 800.06 MB (257.02 million rows/s., 2.06 GB/s.)еще четыре раза. любопытно.
видимо в таком виде этот кусок не реплицируется на каждую строку.


Alexander
20.06.2017
20:05:00
Ну с точки зрения векторизации последний вариант понятно будет быстрее.

papa
20.06.2017
20:16:58
ну можно сделать вывод, что во-первых сервер не вычисляет cityHash64 от констант, иначе первый вариант работал бы как второй, а также для has с первым аргументом-константой как минимум в одном случае оптимальнее переписывать в in.

Alexander
20.06.2017
20:18:18
Не понял про константы.
Переписал
Признаться не так ужасно , кроме этой обработки массива, ну и словаря конечно, + скорость очень порадовала. сначала думал, ну вот, в 5 раз от кдб отстаёт, а потом смотрю - дату забыл поставить.

Google

papa
20.06.2017
20:20:41
Не понял про константы.
has(arr,val) эквивалентно val in (select arrayJoin(arr)) если arr не зависит от строки. если arr сам столбец, то так не получится.

Alexey
20.06.2017
20:20:42
Парни, нужна помощь
какой-то разрыв шаблонов получается

papa
20.06.2017
20:21:57
а какие времена ответов. и где во втором запросе cityhash

Alexander
20.06.2017
20:23:29
Ля, я не так написал, сейчас.


Alexey
20.06.2017
20:23:31
и так CH кластер:
<s3_r1>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>xdray-1</host>
<port>9000</port>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>xdray-2</host>
<port>9000</port>
</replica>
</shard>
<shard>
<weight>1</weight>
<internal_replication>false</internal_replication>
<replica>
<host>xdray-3</host>
<port>9000</port>
</replica>
</shard>
</s3_r1>
на каждом сервере создана локальная таблица с таким конфигом:
...
ENGINE = ReplicatedMergeTree('/clickhouse/tables/s3_r1/omega/omega_sccp_local','{replica}',
EventDate, cityHash64(sccp_src_local_ref, sccp_dst_local_ref),
(EventDate, session_type, Timestamp, sccp_cr_m3ua_opc, sccp_cr_m3ua_dpc,
cityHash64(sccp_src_local_ref, sccp_dst_local_ref)), 8192);
т.е. Replicated, но реальных реплик нет
поверх создана таблица типа:
CREATE TABLE omega.omega_sccp AS omega.omega_sccp_local
ENGINE = Distributed(s3_r1, omega, omega_sccp_local, cityHash64(sccp_src_local_ref,sccp_dst_local_ref,sccp_cr_m3ua_opc,sccp_cr_m3ua_dpc));
при вставке строки в таблицу идет копирование на каждый шард
т.е. вставляешь 1 строку, получаешь 3
причем это дубликаты
и запрос из omega.omega_sccp их честно выдает


Alexander
20.06.2017
20:25:06

Alexey
20.06.2017
20:25:09
в чем фокус?

Alexander
20.06.2017
20:28:41
@orantius время ответа: КХ - около 200мс, что в общем-то много все равно. В кдб - 48мс

Alex
20.06.2017
20:29:03
в чем фокус?
У вас replicated таблицы являются репликами друг друга.
Поскольку они в разных шардах, это неправильно.

Alexander
20.06.2017
20:29:34
Ситихеш - это временное решения для быстрой нормализации строк.

Alex
20.06.2017
20:30:11
То есть путь (первый параметр движка) должен быть разный в разных шардах.

Alexey
20.06.2017
20:30:14

Google

Alexander
20.06.2017
20:32:03
Вопрос: клиент выдает время так сказать итоговое на клиенте: те + сеть?

Alexey
20.06.2017
20:32:38
ща гляну как это выглядит в ZK

Alexander
20.06.2017
20:52:35
А как взять два последние элемента из массива? И потом разгруппировать

papa
20.06.2017
20:55:11
прекрасный вопрос. мы однажды столкнулись с тем, что arrayElement в качестве индекса принимает константу, а длина массива не константа.
сейчас это сделано через отрицательные индексы, такой себе питон.
а разгруппировать это что, arrayJoin?

Alexander
20.06.2017
20:57:30
Отрицательные индексы хорошо, но что-то с ходу не вижу функции как вырезать два элемента последних
И главное как потом это все развернуть.
Т.е. по идее что-то вроде argMax<два>(...) в итоге. Если надо не последнее значение, а два или три последних

papa
20.06.2017
20:59:32
а что должно получиться, массив из двух элементов?

Alexander
20.06.2017
21:00:27
Ну в итоге должен появиться не массив, а будет по две или сколько надо строки на каждую группировку. Для случая одной строки argMax использую.

papa
20.06.2017
21:05:00
звучит как вот такая штука, arrayJoin([x[-2], x[-1]]) , но вообще то что вы описываете похоже на работу с историей каких-то событий, это обычно заканчивается либо крайне нечитаемыми креативами, либо тупиком.

Alexander
20.06.2017
21:05:54
Не, всё нормально работает в проде.

Andrey
20.06.2017
21:08:56

Alexander
20.06.2017
21:11:34
Предположительно это эквилибристикой с arrayEnumerate можно изобразить.

Mike
20.06.2017
21:41:45
CH завёлся на Windows 10 в местном бэше %)
TZ='Europe/Moscow'; export TZ;
sudo nohup clickhouse-server —config-file=/etc/clickhouse-server/config.xml &

prll
20.06.2017
21:46:32
из пакета или собранный?

Google

Mike
20.06.2017
21:48:56
Из пакета xenial

Maksim
20.06.2017
22:08:55
Скажите пож. если заменить все значения в строковых полях на числовые айдишки. и сделать справочник в кх c этими айдишками. можно ли как-то ускорить выборку таким образом? т.к. группировка будет по числам. но нужно чтобы возвращал текст
например сейчас в столбце записано region Moscow. заменить на region 2 группируем по регионам и достаем по 2 - Moscow

Alexander
21.06.2017
02:15:46
@maksim_melnichuk ес-но. мне казалось что я тут об этом каждый второй день пишу: про словари, про нормализацию строк и тд и тп. собственно у меня выборка по строкам ~2с, по UInt64 - ~0.1с

Igor
21.06.2017
02:16:30
там еще enumы были вроде, только пользоваться ими раньше было как-то неудобно, помню

Alexander
21.06.2017
02:19:01
t1 (sym MATERIALIZED cityHash64(symN), symN String). и каждую выборку делаю where ... AND sym = cityHash64(строка).
а имя - выбираю из дикта, где лежат опять же cityHash и имя

Denis
21.06.2017
04:36:37
Доброго времени суток, подскажите о чем говорит исключение (Too much parts. Merges are processing significantly slower than insert ....) и какие действия надо сделать что бы оно не возникало или возникало реже. Заранее признателен

Igor
21.06.2017
05:40:44
какая версия сервера?

Denis
21.06.2017
05:44:35
ClickHouse server version 1.1.54236

Александр
21.06.2017
06:37:08

Vladimir
21.06.2017
06:39:16

Alexander
21.06.2017
06:53:29
Вопрос по внутренностям: а читает с диска КХ в несколько потоков? Или, например, одним потоком отдельный блок данных.

Denis
21.06.2017
06:58:19
спасибо за ответ

Evgeny
21.06.2017
07:14:26
подскажите, кто что использует для построения разных чартов с CH. интерактивные приложения какие то подключаются? или опенсорс может какой есть. интересует что-то вроде дешбордов и тп

Igor
21.06.2017
07:15:26
tabix в чарты недавно научился
superset умеет с sqlalchemy работать, а для алхимии есть пара драйверов вроде

Vladimir
21.06.2017
07:17:11
Grafana что-то простое умеет еще

Александр
21.06.2017
07:17:44