
Igor
30.11.2016
06:47:46
я что-то не так делаю, или с Enum'ами жутко неудобно работать?
INSERT INTO events (type, ...) SELECT 'hit', ... FROM hits; - не прокатит.
надо в селекте CAST('hit' AS Enum8(...) AS type писать.
SELECT * FROM events WHERE type = 'hit'; - не прокатит, type = 1 - тоже.
или toInt8(type) = 1, или toString(type) = 'hit'.

Andrew
30.11.2016
06:55:21
sumIf(conn,site='aaa') у меня вполне себе катит
site - как раз enum

Igor
30.11.2016
07:01:36
А. то есть просто в WHERE приведение типа не работает, а в функциях норм.
SELECT countIf(type = 'hit') FROM event WHERE date = '2016-10-15'; - работает, но не используется индекс по type.
SELECT count() FROM event WHERE date = '2016-10-15' AND if(type = 'hit', 1, 0); - работает с индексом, но выглядит дико, конечно :D

Google

Andrew
30.11.2016
07:02:54
Вы что-то не так делаете.
SELECT count(*)
FROM site_activity
WHERE site = 'rt'
┌─count()─┐
│ 23727 │
└─────────┘
1 rows in set. Elapsed: 0.004 sec. Processed 174.21 thousand rows, 174.21 KB (38.49 million rows/s., 38.49 MB/s.)

Igor
30.11.2016
07:03:08
Возможно, я поэтому и спрашиваю :О

Andrew
30.11.2016
07:03:56
столбец определен как site Enum8(...)

Igor
30.11.2016
07:04:16
и там Enum8('rt' = 1) например?

Andrew
30.11.2016
07:04:28
угу

Igor
30.11.2016
07:04:46
Ыыы. Прикольно. У меня так же. Спасибо, пойду разбираться

Andrew
30.11.2016
07:04:58
с enum-ами засада когда надо расширить их количество.
версия у меня не самая свежая - 1.1.53981. Может чего и поменяли

Igor
30.11.2016
07:51:02
понял, это из-за индекса в MergeTree по Enum8-полю. В таблице без индекса всё ОК.
причем после OPTIMIZE TABLE кол-во данных, доступных по простому type = '..', меняется
где-то видел обсуждение подобного (но не связанного с енамами), то ли на гуглогруппах, то ли на гитхабе

Sergei
30.11.2016
08:04:47

Igor
30.11.2016
08:06:51
ну, похоже, но я не претендую на авторитет :) я сделал пока String от греха подальше

Google

Vladislav
30.11.2016
08:09:09
а поясните мне пожалуйста, о каких индексах вообще идет речь, если колоночная БД сама по себе подразумевает автоматическое наличие и быстрый доступ по колонке?

Sergei
30.11.2016
08:10:26

Vladislav
30.11.2016
08:16:17
Понятно, аналог по составному ключу, у которого жесткое правило ввиде "Тип столбца с датой - обязательно Date (а не DateTime)."

Sergei
30.11.2016
08:19:02
да, его индексом, наверное, некорректно называть

Dmitry
30.11.2016
08:56:34
А ключ - это как будут отсортированы записи в рамках партиции. Это надо выбирать исходя из запросов

Vitaliy
30.11.2016
09:13:41

Igor
30.11.2016
09:43:38
о, спасибо большое :)

Renat
30.11.2016
13:19:00
существует ли какой-то инструмент для накатывания миграций?

Dmitry
30.11.2016
13:20:22
https://bitbucket.org/nocproject/noc/src/5b5463bc8c62d07853dc3d995f35a1737889d3f3/core/clickhouse/model.py?at=feature%2Fmicroservices&fileviewer=file-view-default#model.py-74
мы как-то так сделали

Igor
30.11.2016
13:45:12
существует ли какой-то инструмент для накатывания миграций?
Мы начали реализовывать, https://github.com/smi2/phpMigrationsClickhouse
Но "новости" о том что скоро появится поддержка в самом CH - раскатка ALTER по всем серверам кластера => приостановили разработку.
Если интересно будет сообществу - можем продолжнить "пелить" ))

Fike
30.11.2016
13:46:36
не думали сделать это расширением к phinx?

Igor
30.11.2016
16:06:08
не думали сделать это расширением к phinx?
Первый раз увидел, мы mybatis используем для mySql) Посмотрю можно ли прикрутить, но основная проблема которая была и почему начали свое делать - несколько кластеров , разное кол-во реплик/шардов. И разные стратегии донакатывать миграцию или откатывать )

Roman
30.11.2016
17:02:24
Ребята, существует инструмент для управления миграциями и очень хороший. Liquibase. Для CH я понимаю его надо обработать напильником.

Fike
01.12.2016
08:18:29
Кроме ликвибейза есть еще куча вариантов, практически у каждого языка есть свой фаворит. Тащить джаву на сервак php-приложений не очень хорошо.

Виктор
01.12.2016
08:19:59
zk всё равно на java, мне этот аргумент кажется несколько странным

Vladimir
01.12.2016
09:09:24
Разобрался с rollup'ами - я сам накосячил в конфиге и incl не include'ил делая пустую секцию с роллапами
но теперь другие вопросы
ибо я вот подождал 12 часов при той же схеме (age=0, precision=1 -> age=3600, precision=60)

Google

Vladimir
01.12.2016
09:17:46
делаю селект:
echo "select Time from graphite where Path='haggar1.agent.0.metrics.0' and Time < toUInt32(now()-3*3600) order by Time limit 5" | clickhouse-client
ожидаю увидеть уже пороллапленные значения, а получаю посекундные. Методом тыка смог найти 2-3 интервала где они поролаплены

Dmitry
01.12.2016
10:07:52
Ролап происходит при мерже. Мерж происходит в фоне
И вызывается по обычным правилам
С optimize final можно вызвать принудительно

Vladimir
01.12.2016
11:39:07
ок, поставил делаться OPTIMIZE TABLE graphite_local PARTITION 201611 FINAL
посмотрим что станет

Dmitry
01.12.2016
11:40:20
ага. FINAL нужен для того, что бы КХ переобрабатывал уже существующие партиции

Vladimir
01.12.2016
11:40:49
но его как я понимаю имеет смысл выполнять только на что-то старше месяца?

Dmitry
01.12.2016
11:51:49
Зависит от настроек ролапа

Igor
01.12.2016
12:02:42
а url unescape функции в КХ нету?
а то вот extractURLParameter отображает плюсики вместо пробелов :(((

Anatoly
01.12.2016
12:06:30
это не эксейпинг, afair

Igor
01.12.2016
12:25:49
ну, да, чаще url encode / decode называют

Alexey
01.12.2016
12:44:25
url unescape нет. Можно добавить в список мелких фич.
extractURLParameter не разбирает %-encoding и плюсики.
Это сделано потому что в Метрике URL-ы записываются в базу частично раскодированными (раскодированы все символы кроме отдельных). А это сделано, в свою очередь, по двум причинам: - чтобы удобнее отображать данные и искать в данных; - потому что из браузеров приходят URL-ы зачастую в неизвестной, в неправильной, в испорченной кодировке, в дважды испорченной кодировке и т. п., и приходится делать много работы, чтобы привести их к человеческому виду.

Igor
01.12.2016
12:51:01
угу, я отправил фичреквест)
да я согласен, что он и не должен разбирать, просто впервые пришлось воспользоваться, чтобы получить человекопонятные параметры
спасибо!

f1yegor
01.12.2016
13:07:54
у меня очень мощный вопрос: почему ReplacingMergeTree не был задокументирован? это непроверенный engine который никогда-никогда не должен использоваться, или я просто должен создать пулл реквест с документацией?

Igor
01.12.2016
13:08:15
ыыыы! да! тоже сильно удивился в свое время

Darafei
01.12.2016
13:09:29
просто создай пулл-реквест с документацией
тогда его начнут проверять :)

Google

f1yegor
01.12.2016
13:10:16
ну может это страшная тайна которая должна умереть

Vladimir
01.12.2016
13:10:53
Если я правильно понимаю, то ReplacingMergeTree основа для GraphiteMergeTree
который тоже не задокументирован

Igor
01.12.2016
13:10:58
> We have not done these optimizations, because we don't use FINAL for production queries in serious load, only for rare queries or for small load.
> Even ReplacingMergeTree was developed by request of another department, who convinced me, that they will use it in small workload.
( https://groups.google.com/forum/#!topic/clickhouse/jYwoyPblsk8 )
т.е. похоже, что он не используется в, собственно, метрике; и работает медленнее, чем мог бы

Dmitry
01.12.2016
13:13:02
Медленно, если использовать select final (не рекомендуется)
Правильно писать все запросы с расчетом на то, что данные могут быть ещё не схлопнуты
т.е. например argMax() по версии использовать

Vladimir
01.12.2016
13:15:59
кстати, а нет способа селектить из GraphiteMergeTree сразу накладывая правила агрегации как заданы в конфиге?

Dmitry
01.12.2016
13:46:24
select final, но будет медленее

Roman
01.12.2016
13:47:25
final не работает на GraphiteMergeTree

Alexey
01.12.2016
14:43:42
Можно сделать, чтобы работал, но будет действительно медленно.

f1yegor
01.12.2016
16:12:55
когда я копирую данные из одной таблицы в другую insert from select, какой формат передачи данных? я копирую из таблицы 240гб данных на примерно 60гб. Progress: 183.94 million rows, 267.35 GB. какие накладные расходы на копирование? потому что я ожидал что количество прочитанных данных будет ~60гб, или по крайней мере ~120гб(в два раза больше)
т.е. я копирую только часть данных, которая по моим оценкам 60гб

Vladimir
01.12.2016
16:14:23

Виктор
01.12.2016
16:19:41

Dmitry
01.12.2016
16:21:09

Vladimir
01.12.2016
16:21:45
timestamp-timestamp%precision
фактически

Google

Vladimir
01.12.2016
16:22:08
равными кусками
черер precision промежутки

Roman
01.12.2016
17:03:21
Даже если бы был final, то это не помогло бы. Запрос на большой интервал может покрыть несколько маленьких с разным precision

Dmitry
01.12.2016
17:10:29
Мы сейчас эту часть допиливаем, расскажу как будет. При формирование запроса мы выбираем один presision и запросом в КХ доагрегируем до него. Presision выбирается наиболее крупный из периода куда попадает запрос. Например если у нас минутная метрика и мы хотим данные за 10 последних дней, а начиная с недели происходит угрубление до 5ти минут мы весь запрос угрубляем до 5ти минут

Alexey
01.12.2016
17:49:02

Roman
01.12.2016
18:14:41
Т.е. схема все равно у вас хранится и в клиенте тоже? Чтобы он константу мог выбрать

Alexey
01.12.2016
18:20:19
Да. Но сейчас есть FR, чтобы можно было смотреть схему в системной таблице в ClickHouse.

Roman
01.12.2016
18:22:57
Вот мне тоже хочется такого - хотябы прямо в виде xml. Только не очень понятно что делать, если клиента натравят на distributed или merge таблицу

Dmitry
01.12.2016
18:26:31
А в чем проблема?

Roman
01.12.2016
18:31:35
Смержить правила из разных таблиц может оказаться нетривиальным занятием. Они могут оказаться противоречивыми. Но наверно вы это все уже продумали

Dmitry
01.12.2016
18:33:01
Имхо это вообще не надо делать. Правила должны быть одинаковые

f1yegor
01.12.2016
18:43:05
в прогресс баре используются объемы которые лежат на диске, или которые получатся если это данные разжать?

Виктор
01.12.2016
18:48:38
вроде разжатые, но я не уверен

f1yegor
01.12.2016
18:50:21
понятно, тогда остается только понять почему данный запрос не использует индекс. хотя возможно что планировщик решил что full scan будет быстрее

Виктор
01.12.2016
18:54:37
Нет, так не бывает
Если фильтр такой есть, должно работать