
Aloneibreak
23.05.2017
16:45:01
например
select count() as raw, sum(uniq_weekly), sum(uniq_daily) from idstats where country_name = 'us'
дает что-то вроде 147933 │ 17636 │ 59033
но
select count(*) as raw, sum(uniq_weekly) as uniq_weekly, sum(uniq_daily) as uniq_daily, count(substep) as download from idstats any left join events using uid where substep = 'Download' and country_name = 'us'
дает 5735 │ 684 │ 2303 │ 5735
что как бы вообще не верно

Roman
23.05.2017
17:29:28

Boris
23.05.2017
19:18:30

Google

Aloneibreak
23.05.2017
19:18:54

Boris
23.05.2017
19:21:47
Да, действительно тут дело не в этом.
Возможно, разные условия в where?


Sergei
23.05.2017
20:40:15
Подскажите плиз, что не так
CREATE TABLE default.uri_stat_cache_new ( date Date,
week_num UInt32,
hash1 UInt64,
hash2 UInt64,
modify_date AggregateFunction(max, DateTime),
url AggregateFunction(argMax, String, DateTime),
domain AggregateFunction(argMax, String, DateTime),
title AggregateFunction(argMax, String, DateTime),
site_id AggregateFunction(argMax, UInt32, DateTime),
count AggregateFunction(sum, UInt32)
) ENGINE = AggregatingMergeTree(date, (hash1, hash2, week_num), 8192)
INSERT INTO uri_stat_cache_new(date, week_num, hash1, hash2, modify_date, url, domain, title, site_id, count) SELECT date, week_num, hash1, hash2, maxState(event_date), argMaxState(url, event_date), argMaxState(domain, event_date), argMaxState(title, event_date), argMaxState(site_id, event_date), sumState(count) FROM uri_stat_cache GROUP BY date, week_num, hash1, hash2;
Данные заливает, но
вот этот запрос
SELECT week_num, hash1, hash2, update_date, count, argMaxMerge(url, update_date) FROM (SELECT week_num, hash1, hash2, maxMerge(modify_date) AS update_date, argMaxState(url, modify_date) AS url, sumMerge(count) AS count FROM uri_stat_cache_new GROUP BY week_num, hash1, hash2) LIMIT 10;
выдает: DB::Exception: Incorrect number of arguments for aggregate function argMaxMerge.
если убираю argMaxMerge(url, update_date) все ОК


Alexey
23.05.2017
21:35:39
Все функции -Merge принимают один аргумент - состояние агрегатной функции. Для функции argMax, состояние уже содержит запомненные аргументы arg и max, и для объединения состояний (как и для любых других агрегатных функций) ничего больше не нужно.

Alexander
23.05.2017
21:46:02
Мда, через native скорость упала ещё в разы, до ~20 в секунду. Может дело в библиотеке клиента - не знаю. Так как cpu почти не загружен. ... компрессия ... отключена.

Alexey
23.05.2017
21:55:08
Нет никакого смысла отправлять по одной строке в формате Native. Этот формат ориентирован именно на пачки данных.

Alexander
23.05.2017
21:56:11
Хочется lowlatency
Вчера оказалось что post тоже не подходит по причине того что там каждый раз шифруется пароль.
Но что-то в 25 строк в секунду верится с трудом. Да, у native немного больше оверхед на мету, но 25/с тут явно не в этом дело.

Alexey
23.05.2017
21:58:47
Latency вставки - от сотен мс. Latency чтения от единиц мс. в самых простых случаях.

Alexander
23.05.2017
22:18:09
Но тем не менее http+rowbinary всё же около 3000 выдаёт. Понимаю что не особо рекомендуемое использование, но всё же.

Vladimir
23.05.2017
23:32:44

Pavel
23.05.2017
23:53:19
А чем буфер таблица не угодила?

Google

Alexander
24.05.2017
00:25:32
Так я в Buffer и вставляю. Я так понимаю он и должен собрать данные чтобы потом не было очень много мерджей.

Vladimir
24.05.2017
00:26:38
@inv2004 в общем случаи нельзя оптимизировать под latency и скорость вставки пачками одновременно. Кх оптимизирован под последнее
И не надо из него делать то к чему он не предназначен

Alexander
24.05.2017
00:30:09
Да, Я понимаю, просто хотел понять предел какой возможный. В данный момент он не ясен: при вставке post - упирается в sha пустого пароля но все же 3к, а вот с native не считает пароль, но производительность всё равно упала аж в 100 раз.
Я просто объясню. Есть задача, на которую неплохо ложится кдб, которая имеет ~ аналогичную векторную структуру, при этом является довольно универсальной. У КХ тоже есть преимущества, но просто хочется понять основные моменты которые он сможет покрыть, а что не сможет. При этом, КХ и кдб кажутся довольно близкими родственниками.

Андрей
24.05.2017
08:25:48
Добрый день! Подскажите пожалуйста, каким образом можно указывать таймзону в виде смещения от UTC вместо использования имён часовых поясов при работе с датами?

Vladimir
24.05.2017
08:59:25
Например, найти имена поясов, соответствующих смещению
Таймзона — это же больше, чем смещение по utc

Maksim
24.05.2017
08:59:50
вот с апдейтами самая грустная ситуация в вещах типа user agent
у нас очень много нераспознающихся useragent и приходится править тот код, который парсит, а следовательно приходится апдейтить таблицу
апдейтить её нельзя

Andrey
24.05.2017
09:01:32
Useragent можно писать в рядом стоящую sql базу, а в CH вытаскивать через словарь например

Vladimir
24.05.2017
09:02:09
Ну так да
Или сделать внешний словарь в кх в памяти на цсв

Maksim
24.05.2017
09:02:51
сейчас у нас 275961 разных useragent

Vladimir
24.05.2017
09:03:01
Немного

Andrey
24.05.2017
09:03:24

Vladimir
24.05.2017
09:03:34
Поместится во что угодно

Maksim
24.05.2017
09:04:02
а если я захочу сделать распределение по операционным системам, то это будет норм?

Vladimir
24.05.2017
09:04:20
А почему это должно стать не норм?

Google

Maksim
24.05.2017
09:04:21
кликхаус сделает 270 тыс лукапов к словарю, приклеит и всё агрегирует?
сейчас у нас поле операционная система лежит в строке

Vladimir
24.05.2017
09:04:37
Э

Maksim
24.05.2017
09:04:38
а тут будет снаружи

Igor
24.05.2017
09:04:49
так словарь же целиком в оперативку грузится вроде, потом лукапы в оперативку дешевые получаются, не?

Pavel
24.05.2017
09:04:54
ну словарь же по факту С++ ный хэш
а это ОЧЕНЬ БЫСТРО

Vladimir
24.05.2017
09:05:04
Кликхаус внешние словари подтягивает в память с некоторой частотой. Это хэш-таблица

Maksim
24.05.2017
09:05:13
оок
звучит что надо именно так делать

Vladimir
24.05.2017
09:05:39
Только правильно настройте частоту обновления и всё такое

Pavel
24.05.2017
09:05:40
std::unordered_map C++11: 2.0 mega ops per second
ну вот как-то так в синтетических тестах оно работает :)
std::map: 0.8 mega ops per second
ну и это на 1 поток процессора, ессна

Alex
24.05.2017
09:06:20

Sergei
24.05.2017
09:08:39
Подскажите пожалуйста, когда стоит увеличивать гранулированность индекса? Как я понимаю чем больше строк в куске тем меньше места занимает вся таблица?

Андрей
24.05.2017
09:11:17

Владимир
24.05.2017
10:42:54
Такой вопрос, нормально ли кликхаус скушает такую выборку в селекте - concat(toString(round(click/show*100)), '%') as CTR, или лучше такие вычисления делать уже в коде? (на тестовом стенде, естественно всё работает прекрасно, интерсно именно не будут ли тупить вычисления на больших объёмах данных)

Felixoid
24.05.2017
11:32:53
Если я мигрирую zookeeper с трёх нод на другие три в несколько этапов:
0. Машинки 1, 2 и 3 надо перевезти на 1, 4 и 5 с переналивкой первой.
1. Наливаю машины 4 и 5, добавляю их в кластер, жду, пока догонится ZK
2. Переналиваю машину 1, восстанавливаю на ней ЗК
3. Убираю ноды 2 и 3
Если я в этот момент пропишу в clickhouse все 5 нод, то он себя будет нормально чувствовать при пертурбациях?
Если прописать дополнительные две ноды до того, как они станут доступны, как он поведёт себя в этом случае?

Google

Evgeny
24.05.2017
11:37:27
столкнулся вот с таким багом, который уже в статусе “закрыт”
https://github.com/yandex/ClickHouse/issues/246
мои комментарии внизу тикета. кто может что посоветовать?

Maksim
24.05.2017
11:50:26

Vladimir
24.05.2017
11:51:15
Ну вам не нужна миграция, чтобы попробовать запросы, которые используют внешние словари

Maksim
24.05.2017
11:53:01
Ага, вот я об этом

Alexey
24.05.2017
15:03:39
Если я мигрирую zookeeper с трёх нод на другие три в несколько этапов:
0. Машинки 1, 2 и 3 надо перевезти на 1, 4 и 5 с переналивкой первой.
1. Наливаю машины 4 и 5, добавляю их в кластер, жду, пока догонится ZK
2. Переналиваю машину 1, восстанавливаю на ней ЗК
3. Убираю ноды 2 и 3
Если я в этот момент пропишу в clickhouse все 5 нод, то он себя будет нормально чувствовать при пертурбациях?
Если прописать дополнительные две ноды до того, как они станут доступны, как он поведёт себя в этом случае?
5 живых реплик - нормально. Как раз хороший способ для миграции реплик между серверами - добавить новые реплики, потом удалить старые.
В редких случаях может быть проблема с увеличением нагрузки на сеть или с количеством одновременных соединений для скачивания данных, а также с нагрузкой на диск при скачивании с одной реплики большим количеством других.


Felixoid
24.05.2017
15:07:17


Alexey
24.05.2017
15:08:28
Гранулированность индекса влияет на время обработки коротких запросов (уменьшение index_granularity приводит к уменьшению latency) и на потребление оперативки (уменьшение index_granularity приводит к кратному увеличению потребления оперативки). Текущее потребление оперативки можно посмотреть в таблице system.parts - столбцы, относящиеся к primary key.
Если сильно уменьшить index_granularity, то latency сильно меньше не будет, но вот оперативки будет потребляться больше.
Выложили на сайт презентацию с митапа в Екатеринбурге:
https://clickhouse.yandex/presentations/meetup6/#
(пока доступна только первая, вступительная презентация)
А также с конференции UWDC в Челябинске:
https://clickhouse.yandex/presentations/uwdc/#cover


Felixoid
24.05.2017
15:14:15

Alexey
24.05.2017
15:33:58
OPTIMIZE TABLE реплицируется?
да, проверил сам )

Let Eat
24.05.2017
15:53:48
Если я мигрирую zookeeper с трёх нод на другие три в несколько этапов:
0. Машинки 1, 2 и 3 надо перевезти на 1, 4 и 5 с переналивкой первой.
1. Наливаю машины 4 и 5, добавляю их в кластер, жду, пока догонится ZK
2. Переналиваю машину 1, восстанавливаю на ней ЗК
3. Убираю ноды 2 и 3
Если я в этот момент пропишу в clickhouse все 5 нод, то он себя будет нормально чувствовать при пертурбациях?
Если прописать дополнительные две ноды до того, как они станут доступны, как он поведёт себя в этом случае?
Незнаю как в С++, но в java client динамически менять состав ZK серверов нельзя было. Оно резолвило все при старте и потом работало только с ними.

Alexander
24.05.2017
16:02:48
Можно ли как-то сделать make install, но не собирая тесты?

prll
24.05.2017
16:29:41
cmake -DENABLE_TESTS=0

Roman
24.05.2017
16:47:08

Alexander
24.05.2017
17:20:04

Google

Roman
24.05.2017
17:26:09

Alexey
24.05.2017
17:38:34

Sergei
24.05.2017
19:23:48
Скажите плиз, а есть возможность принудительно дернуть обновление словаря?

Alexander
24.05.2017
19:24:51
Просто для информации: дело было не в пароле: uuid генерился из random => прямая передача query_id позволила разогнать мелкие вставки в два раза. Теперь видно что всё упирается в new, что ок. На чём этот странный эксперимент и заканчиваю. :)

Alexey
24.05.2017
19:29:32

Alexander
24.05.2017
21:01:16

Sergei
24.05.2017
21:01:57

Alex
24.05.2017
23:35:11
Всем привет! Ребята, подскажите пожалуйста правильный вариант запроса. Есть таблица с полями id, name, amount, created_at. Нужно сделать запрос на сумму по amount за последнюю неделю с гранулярностью 15 минут. как сделать??

papa
25.05.2017
00:10:01
https://clickhouse.yandex/reference_ru.html#toStartOfFiveMinute

Геннадий
25.05.2017
05:12:50

Andrey
25.05.2017
06:50:30