
strange
02.07.2018
11:12:27

Vladimir
02.07.2018
11:15:44
Извините что туплю
Может кто видит почему семплинг не помогает по скорости?

Google


Vladimir
02.07.2018
11:16:05
SELECT sum(value)
FROM Metrics
SAMPLE 1 / 10
┌───────────sum(value)─┐
│ 17577274172239137000 │
└──────────────────────┘
1 rows in set. Elapsed: 9.238 sec. Processed 3.69 billion rows, 44.23 GB (398.96 million rows/s., 4.79 GB/s.)
tsf-data11.us.sematext.com :) select sum(value) from Metrics;
SELECT sum(value)
FROM Metrics
┌───────────sum(value)─┐
│ 17577889402538699000 │
└──────────────────────┘
1 rows in set. Elapsed: 7.030 sec. Processed 3.69 billion rows, 29.48 GB (524.30 million rows/s., 4.19 GB/s.)
tsf-data11.us.sematext.com :) select sum(value) from Metrics SAMPLE 1/100;
SELECT sum(value)
FROM Metrics
SAMPLE 1 / 100
┌───────────sum(value)─┐
│ 17578875733901701000 │
└──────────────────────┘
1 rows in set. Elapsed: 9.241 sec. Processed 3.69 billion rows, 44.23 GB (398.87 million rows/s., 4.79 GB/s.)
tsf-data11.us.sematext.com :) show create Metrics
SHOW CREATE TABLE Metrics
┌─statement───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE ... ORDER BY (appId, metricId, timestamp) SAMPLE BY metricId SETTINGS index_granularity = 8192
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
1 rows in set. Elapsed: 0.001 sec.
Судя по сумме семплирования не происходит


papa
02.07.2018
11:17:09
а metricId у вас равномерно распределен по значениям своего типа?

Michal
02.07.2018
11:17:27
Т.е. в ip_trie может быть несколько подходящих под условие подсетей. Типа 10.0.0.0/8 и одновременно 10.1.2.0/23 . И если спросите про адрес 10.1.2.3 то выберет вторую подсеть, как более "специфичную" хотя первая тоже подходит.

strange
02.07.2018
11:34:51

Evgeny
02.07.2018
11:40:11
День добрый! Можно ли для клика использовать zookeeper с kerberos? Если да, то где прочитать о настройке?

Дмитрий
02.07.2018
11:48:22
господа, а как truncate table сделать?

Evgeny
02.07.2018
11:48:47
сорян ...drop partition

Дмитрий
02.07.2018
11:49:11
мне целиком табличку почистить

Stanislav
02.07.2018
11:49:40
Если туда не пишется ничего - подропать все партишны и всё

Google

Vladimir
02.07.2018
11:51:09

papa
02.07.2018
11:51:54
sample 1/100 эквивалентно условию metricId < max_value/100

Vladimir
02.07.2018
11:52:13
теперь понял
в таком случае все равно должно работать, может немного криво из-за неравномерного распределения

Alexey
02.07.2018
11:53:09

Vladimir
02.07.2018
11:53:14
судя по запросам семплинг вообще не работет

papa
02.07.2018
11:53:50
max_value это не 10000, а 2^32 или какой у вас тип у metricId

Vladimir
02.07.2018
11:54:20
упс
это все поменяло

papa
02.07.2018
11:54:59
в таких случаях можно семплировать например по inthash32(.)

Vladimir
02.07.2018
11:55:33
и как быть если надо аггрегировать по метрикИд но значении может быть так много что нужно только по 10% например

papa
02.07.2018
11:55:39
но нужно чтобы на один appId было много metricId

Vladimir
02.07.2018
11:55:46
так и есть

papa
02.07.2018
11:56:40
это при создании таблицы

Vladimir
02.07.2018
11:56:53
как эту част переписать?
ORDER BY (appId, metricId, timestamp)
SAMPLE BY (metricId);
я понимаю что при создании я имею в виду что как семплтинг ключ написать
вместо metricId
inthash32(metricId) ?

Google

papa
02.07.2018
11:58:41
угу
но если вы селектите отдеьные metricId, то наверное надо будет тоже запрос поравить чтобы индекс использовался.

Vladimir
02.07.2018
11:59:14
и это же выражение в первичном ключе?

papa
02.07.2018
11:59:53
угу, если не отсортировать, то фокус не получится.

Vladimir
02.07.2018
12:00:25
а условие metricId=xxx будет при таком ключе по ключу отрабатывать?
ORDER BY (appId, inthash32(metricId), timestamp)
SAMPLE BY (inthash32(metricId));

Tima
02.07.2018
12:01:05

Vladimir
02.07.2018
12:01:09
или в запросе надо будет писать inthash32(metricId)=xxx ?
уфф, красота будет

papa
02.07.2018
12:01:33
предположу что нет. но metricId=xxx and intHash32(metricId)=intHash32(xxx) должно.

Vladimir
02.07.2018
12:02:06
понял
спсб
спсб большое
sample 1/100 эквивалентно условию metricId < max_value/100
уфф только что понял что мне это не подходит
У меня в запросе есть условие *metricId=2* например и мне надо чтобы сумма была построена не по всем точкам а только по 10% например
Получается мне семплирование по таймстемпу надо но это вроде бы не есть гуд

Sergei
02.07.2018
12:16:15
Всем привет!
А где почитать про ORDER BY и как его лучше указывать?
Вот допустим у нас есть Immutable Event Log по userId с eventType и eventId, а так же timestamp (DateTime).
Мы используем ReplacingMergeTree (на случай если два раза одно и тоже событие запишется в ClickHouse), на данный момент вот так:
ENGINE = ReplacingMergeTree PARTITION BY toYYYYMM(timestamp) ORDER BY (userId, eventType, eventId)
на сколько это правильно \ нет? ORDER BY очень сбивает с толку названием, я так понимаю он тут больше как кассандровский PRIMARY KEY, не?

papa
02.07.2018
12:17:23

Sergei
02.07.2018
12:17:43
и создавать materialized views
в основном ad hoc запросы в стиле "а сколько у нас юзеров <...>"

papa
02.07.2018
12:19:05
юзеров - это userid?

Sergei
02.07.2018
12:19:17
Угу

papa
02.07.2018
12:19:42
тогда наверное не имеет смысла по ним сортировать, у вас же не будет на них условия.

Google

Sergei
02.07.2018
12:20:15
т.е. только по eventId?

papa
02.07.2018
12:20:49
зависит от запроса. у вас нет сортировки по дате, значит вы всегда будете читать данные месяцами
может вам так и надо.

Alex
02.07.2018
12:21:33
А вынесение event_id в PKEY не сожрёт всю память?

Sergei
02.07.2018
12:23:23

papa
02.07.2018
12:24:00
не должно, это же разреженный индекс.

Sergei
02.07.2018
12:28:15
Я конечно извиняюсь за повторение вопроса, но до конца понять так и не удалось ?
ORDER BY - это Cassandra/Dynamo-like PKEY, по которому так же происходит merge, верно?

Tima
02.07.2018
12:34:08
ORDER BY - колонки или список колонок, по которым в MergeTree (первичный ключ):
- данные всей таблицы упорядочены
- создан разреженый индекс
- в "слопывающихся" движках данные слопываются по этому ключу


Vladimir
02.07.2018
12:49:07
Сформулирую полный вопрос с вашего позволения.
Есть
CREATE TABLE XXX
...
ORDER BY (appId, metricId, timestamp)
SAMPLE BY (metricId);
Есть запросы вида
SELECT SUM(v) FROM XXX where appId=1 and metricId=1 and timestamp>YYY and timestamp<ZZZ;
Для некого metricId данных может быть очень много и запрос выполняется долго. Думали прикрутить семплинг для этого
SELECT SUM(v) FROM XXX SAMPLE 1/10 where appId=1 and metricId=1 and timestamp>YYY and timestamp<ZZZ
Но похоже все работет не так как думалось
Нужно заводить искусственную переменную sampleId значения которой равномерно будут распределены от 0 до 9
И делать так
CREATE TABLE XXX
...
ORDER BY (appId, metricId, sampleId, timestamp)
SAMPLE BY (sampleId);
Но тогда запросы без семплирования будут работать медленнее ТК мы "запохабили" немного первичный ключ, верно?
Есть какой-то способ ровнее?


Alexey
02.07.2018
12:54:20
а если помимо timestamp добавить в индекс день (day Date toDate(timestamp), и дополнительно в where также указывать day, быстрее не будет?

Vladimir
02.07.2018
12:57:08
Учитывая что у нас партицирование по дням то не должно быть быстрее как я понимаю
на уровне партиции отрежется лишнее и в ключ добавлять день не надо
Вот с семплингом засада как-то после чтения документации по другому думалось оно работает, а сейччас вроде как пришло понимание а что делать непонятно

Артем
02.07.2018
13:20:26
Кто то нибудь в курсе появились ли вложенные структуры, т.е вложенность более одного уровня ? Вроде обещали эту функциональность завести в первом квартале 2018 года

Michal
02.07.2018
13:25:44

Артем
02.07.2018
13:27:19
Я у КХ уже спрашивал) не работало) но из роуд мапа это фича исчезла

papa
02.07.2018
13:29:18

Michal
02.07.2018
13:30:38

Артем
02.07.2018
13:31:10

Google

Michal
02.07.2018
13:31:19
Многомерные массивы не придерживаются для таблиц типа mergetree
Извините, но кликхаус с вами не согласен :) :
:) create table xxx_nestes2 ( a UInt32, b Array(Array(Tuple(String,String))) ) Engine = MergeTree ORDER BY a;
CREATE TABLE xxx_nestes2
(
a UInt32,
b Array(Array(Tuple(String, String)))
)
ENGINE = MergeTree
ORDER BY a
Ok.
0 rows in set. Elapsed: 0.007 sec.
:) insert into xxx_nestes2 values (1, [[('hello','world'),('foo','bar')],[('','')]] );
INSERT INTO xxx_nestes2 VALUES
Ok.
1 rows in set. Elapsed: 0.002 sec.


Артем
02.07.2018
13:34:11
Извините, но кликхаус с вами не согласен :) :
:) create table xxx_nestes2 ( a UInt32, b Array(Array(Tuple(String,String))) ) Engine = MergeTree ORDER BY a;
CREATE TABLE xxx_nestes2
(
a UInt32,
b Array(Array(Tuple(String, String)))
)
ENGINE = MergeTree
ORDER BY a
Ok.
0 rows in set. Elapsed: 0.007 sec.
:) insert into xxx_nestes2 values (1, [[('hello','world'),('foo','bar')],[('','')]] );
INSERT INTO xxx_nestes2 VALUES
Ok.
1 rows in set. Elapsed: 0.002 sec.
Это не мои слова, так в доке написано, видимо уже устарело)

Vladimir
02.07.2018
13:36:29

Michal
02.07.2018
13:38:30

Артем
02.07.2018
13:39:35


Michal
02.07.2018
13:42:16

Vladimir
02.07.2018
13:43:56
timestamp%10=0 детерминированно будет, но что-то меня смущает
скорости не даст, читать все равно все

Michal
02.07.2018
13:44:12
Т.е. если пользователей много (или так МНОГО), то даже если половину их выбросить статистически картина меняется мало. А вот если выбросить случайную половину событий у случайных пользователей - то характерестики данных могут пострадать.

Vladimir
02.07.2018
13:44:48
в моем случае можно случайно выбросить

Michal
02.07.2018
13:46:28

Vladimir
02.07.2018
13:48:06
неправильно выразился
как раз каждое 10 по времени надо оставить например
допустим 100000 измерении в минуту
и так 30 дней
можно оставить 100 измерении в минуту но каждую минуту оставить
извините за двусмысленность