
Виктор
16.01.2017
14:44:26
наверное, ждет этого конкретного куска
Было какое-то решение

Aleksey
16.01.2017
14:45:21
Привет
В сообщении об ошибке
> Memory limit (for query) exceeded: would use 9.48 GiB (attempt to allocate chunk of 536870912 bytes), maximum: 9.31 GiB: (while reading column Message):
Лимит в 9.48 GiB — это что за лимит? Он управляется из конфига clickhouse?

Боб
16.01.2017
14:46:18

Google

Боб
16.01.2017
14:47:26
месяц это был условно. Сейчас граница уникальности проходит на сутках, но в будущем может измениться например на часы - тогда погрешности поплывую еще сильнее.

Виктор
16.01.2017
14:47:51
По memory limit: да, это из-за ограничения в конфиге на один запрос

Aleksey
16.01.2017
14:48:16
mark_cache_size — это он?

Виктор
16.01.2017
14:48:38
Нет, там что-то max_memory_usage

Vitaliy
16.01.2017
14:48:38

Aleksey
16.01.2017
14:48:55
Отлично, попробую, спасибо

papa
16.01.2017
14:58:17

Боб
16.01.2017
14:59:24
уникальные посетители, уникальные просмотры, клики.
Потом аналогичным образом возвраты надо будет считать - т.е. определять что пользователь сначала перестал пользоваться сайтом, потом вернулся.

Dmitriy Ch
16.01.2017
15:02:29
Было какое-то решение
В доке есть только про восстановление после сбоя. Мне кажется это не тот случай - вторая то таблица в порядке.

papa
16.01.2017
15:28:46


Roman
16.01.2017
15:44:50
Всем привет! Помогите разобраться с процессом создания бэкапов. В данном случае, они будут служит в качестве защиты от ошибки человека, поэтому хранится могут локально.
К примеру, нужно создавать бэкап таблицы один раз в день. В документации рекомендуется использовать FREEZE PARTITION, который создаст hardlink на файлы из data/database/table по указанной маске. Получается, что нужно один раз в день делать FREEZE PARTITION и удалять папку с предыдущим бэкапом?

Виктор
16.01.2017
15:52:20
Дмитрий, я бы попробовал https://clickhouse.yandex/reference_en.html#Recovery%20after%20failures

Google

Виктор
16.01.2017
15:52:50
Роман, вроде всё так

Roman
16.01.2017
15:55:28
В данном случае нет опасения аппаратных ошибок, поэтому репликация и ZK не используется.

Dmitriy Ch
16.01.2017
15:59:54
Виктор, спасибо

Anton
16.01.2017
17:52:41
Подскажите про runningAccumulate:
Не работает в реализации с мат. представлением - не накапливаются данные из предыдущих кусков вставки. Т.е. если я вставляю 5 строк, потом 2, то на 6-й строке при выборе из представления накопления сбрасываются. Так и должно быть или ещё не доработано? Или может у нас версия старая (сервер 1.1.54080)? Спасибо.

Боб
16.01.2017
18:14:19
А есть функция, чтобы получить значение столбца в предыдущей строке?
Вроде runningDifference, только само значение, а не разность.

Alexey
16.01.2017
18:15:32

Vladislav
16.01.2017
18:25:14
Но как я понимаю, подобное можно запилить самим немного переделав функцию runningDifference?

Alexey
16.01.2017
18:25:28
Да.

Vladislav
16.01.2017
18:27:56
спасибо

papa
16.01.2017
18:45:25
но в общем случае lag / lead должны работать для любых типов данных.

hamper ?
16.01.2017
19:11:09
Привет, а есть какие нибудь роли для ансибла под кликхаус хорошие?

Боб
17.01.2017
05:24:43


Roman
17.01.2017
06:25:33
Существует ли возможность для FREEZE PARTITION указать список партишинов, которые уже закончили слияние (основываясь на данных таблицы system.parts)? Если же вызывать FREEZE по отдельности на каждый партишин, то получим несколько папок в shadow директории, которые потом нужно будет обьединять

Aleksey
17.01.2017
10:14:48
Привет! А можно как-то заставить таблицу CollapsingMergeTree схлопнуть всё, что можно?
OPTIMIZE ведь ничего не гарантирует, как я понимаю.
Или единственный вариант - создать рядом такую же таблицу и сделать в неё INSERT INTO SELECT FROM srcTable FINAL?


Vitaliy
17.01.2017
11:03:37
Привет! А можно как-то заставить таблицу CollapsingMergeTree схлопнуть всё, что можно?
OPTIMIZE ведь ничего не гарантирует, как я понимаю.
Или единственный вариант - создать рядом такую же таблицу и сделать в неё INSERT INTO SELECT FROM srcTable FINAL?
OPTIMIZE поможет вам все схлопнуть по-максимуму. OPTIMIZE действительно можеть объеденить (и схлопнуть) не все куски, но если у вас достаточно свободного места на диске, то он все схлопнет в 1 кусок за несколько итераций зпросов OPTIMIZE.
То, что все схлопнулось в 1 кусок (то есть у вас нет дублей по первичному ключу) можно проверить сделав запрос в system.parts:
SELECT count() FROM system.parts WHERE active AND database = 'test' AND table = 'hits'
Если найдется только один part, то значит у вас все замержено и схлопнуто по-максимуму и (+заросы будут выолняться мксимально быстро).
Правда тут стоит уточнить, что вы никогда не можете схлопнуть 2 состояния, находящиеся в разных месяцах (в смысле того, что указано в ключе партиционирования).
Если таким образом у вас есть данные за несколько месяцев, то вы можете проверить то, что таблица находится в максимально смерженом состоянии выполнив запрос:
SELECT uniqExact(toRelativeMonthNum(EventDate)) FROM test.hits
и сравнив его с
SELECT count() FROM system.parts WHERE active AND database = 'test' AND table = 'hits'
они должны совпадать.


Aleksey
17.01.2017
11:36:55
Сейчас у меня
SELECT uniqExact(toRelativeMonthNum(EventDate)) FROM test.hits
возвращает 16
SELECT count() FROM system.parts WHERE active AND database = 'test' AND table = 'hits'
возвращает 69
И после OPTIMIZE TABLE test.hits второе число не уменьшается

Dmitry
17.01.2017
11:41:35
SELECT count() FROM system.parts WHERE active AND database = 'test' AND table = 'hits' AND active
system.parts по дефолту возвращает все партиции, вслючая уже неиспользуемые

Google

Dmitry
17.01.2017
11:43:03
select * from system.merges ещё можно посмотреть
OPTIMIZE TABLE только ставит merge в очередь

Aleksey
17.01.2017
11:51:21
все активны, в system.merges пусто)
Кстати, создал рядом копию таблицы, и налил в неё данные с помощью INSERT INTO SELECT.
Так вот, у неё в system.parts уже 16, т.е. это совпадает с uniqExact(toRelativeMonthNum(EventDate)), однако
select count(*) from test.hitsCopy
почти в 2 раза больше, чем
select count(*) from test.hitsCopy FINAL


Vitaliy
17.01.2017
12:18:40
Кстати, создал рядом копию таблицы, и налил в неё данные с помощью INSERT INTO SELECT.
Так вот, у неё в system.parts уже 16, т.е. это совпадает с uniqExact(toRelativeMonthNum(EventDate)), однако
select count(*) from test.hitsCopy
почти в 2 раза больше, чем
select count(*) from test.hitsCopy FINAL
Это говорит о том, что для каждой записи у вас есть запись с таким же primary key, но в другом месяце. Можете попробовать переналить таблицу, только в новой таблице сдалать ключ партиционирования EventDateDummy и писать туда всегда '0000-00-00' (или ничего явно не писать), а EventDate сделать обычным столбцом. Тогда показатели должны сойтись.

Aleksey
17.01.2017
12:31:39
p.s. на всякий случай напомню, речь идёт про
CollapsingMergeTree

Vitaliy
17.01.2017
12:35:30

Aleksey
17.01.2017
12:36:14
места много, лог гляну

f1yegor
17.01.2017
15:19:33
когда я делаю select * from system.query_log order by event_time desc limit 2 \G
можно ли в эту таблицу добавить database колонку? что бы можно было фильтровать какая база мне интересна

Vitaliy
17.01.2017
15:33:35

f1yegor
17.01.2017
15:49:51
хотите сказать что если я вызову http "/?query=optimize partition" то это выполнится мгновенно?

Vitaliy
17.01.2017
16:21:00
хотите сказать что если я вызову http "/?query=optimize partition" то это выполнится мгновенно?
Запрос OPTIMIZE TABLE replicated_merge_tree_table [PARTITION partition] [FINAL] в случае реплицированной таблицы должен выполниться достаточно быстро (время потратится только на запись мета-данных в zookeeper, сама обработка будет выполняться в фоне).
Аналогичные запросы для обычной нереплицированной таблицы будут выполняться синхронно, т.е. вы будете ждать пока выбранные куски сольются в один, что обычно требует много времени.

papa
17.01.2017
16:24:43

f1yegor
17.01.2017
21:00:57
на усмотрение реализации.
не подскажете где инструкция как собрать-скомпилировать clickhouse?

Igor
17.01.2017
21:56:26
https://github.com/yandex/ClickHouse/blob/master/doc/build.md

Google

f1yegor
17.01.2017
21:56:51
спасибо. лет 8 уже С++ не видел после универа (

Ilya
17.01.2017
22:01:43
а зачем? пакеты ж есть

f1yegor
17.01.2017
22:02:41
да я тут решил посмотреть
когда я делаю select * from system.query_log order by event_time desc limit 2 \G
можно ли в эту таблицу добавить database колонку? что бы можно было фильтровать какая база мне интересна

Alexey
17.01.2017
22:34:14
Будет неудобно, так как в запросе может использоваться много таблиц, подзапросы, табличные функции и т. п. Лучше будет добавить массив использованных таблиц, но тоже пока неудобно.

prll
17.01.2017
22:37:02

Gleb
18.01.2017
07:38:58
https://github.com/antonmks/Alenka

Рулон
18.01.2017
08:14:03
Привет Всем!
Вопрос: если движок MergeTree обрабатывает данные читаю с диска, откуда у него такая производительность?
Что будет если таблица с движком Memory не поместиться в память?

Andrew
18.01.2017
08:28:43

Igor
18.01.2017
08:31:54
и из-за того, что данные по столбцам хранятся

Vitaliy
18.01.2017
11:43:35
Что будет если таблица с движком Memory не поместиться в память?
Вставка блоков в таблицу атомарна. То есть если вы будете вставлять много данных таблицу, то вставится какое-то количество блоков с данными (и вы сможете эти данные сразу или потом читать), если при вставке очередного блока кончится память, то блок не будет записан, и INSERT завершится с ошибкой.

Alexey
18.01.2017
15:37:31
Привет. Насколько стабилен TCP-протокол ClickHouse? Есть ли где его документация?

Maksim
18.01.2017
15:38:06
Леша, кажется обсуждение этого протокола уже недели три идет =)

Alexey
18.01.2017
15:43:12
И тебе привет. :) Я только зашёл

Maksim
18.01.2017
15:44:54
ага. Перескажу вкратце: документация протокола существует в исходниках и пока он не документирован, потому что не до конца ясно чего именно от него ещё захочется, поэтому публично предлагают http

Kirill
18.01.2017
15:47:14

Alexey
18.01.2017
15:47:32
А про совместимость? Его могут сломать, сломав клиент и внешние реализации?

Kirill
18.01.2017
15:48:34
еще https://github.com/artpaul/clickhouse-cpp

Google

Kirill
18.01.2017
15:49:19
сервер смотрит на версию которую клиент отсылает и ведет себя соответственно, это на сколько я понял, нам самим нужен был гошный клиент, пришлось писать )

Alexey
18.01.2017
15:49:58
https://godoc.org/github.com/kshvakov/clickhouse – так тут API нет вообще

Kirill
18.01.2017
15:50:58
sql.Open("clickhouse") дальше все как с обычными драйверами

Alexey
18.01.2017
15:51:53
Оок, спасибо

Kirill
18.01.2017
15:51:57
для insert begin/commit, все что внутри пишется в буфер, при комите отправляется на сервер

Igor
18.01.2017
15:52:16
ну, точнее с такими, что клиент/сервер меняют свое поведение в зависимости отправлено версии друг друга

Alexey
18.01.2017
15:54:06
Отлично. Спасибо всем

Alexey
18.01.2017
16:09:37
То есть, протокол меняется, но сервер и клиент поддерживает совместимость.

Anton
18.01.2017
17:34:27
как можно обработать ситуацию, когда скалярный подзапрос не вернул значение? Пример: SELECT * FROM Tab1 WHERE dt=(SELECT MAX(dt) FROM Tab2), где Tab2 ещё пустая.

Vladislav
18.01.2017
17:35:21
Завернуть в функцию проверки?

Anton
18.01.2017
17:36:46
проверки на что?

Vladislav
18.01.2017
17:42:08
А что надо?