@clickhouse_ru

Страница 720 из 723
Yuran
25.10.2018
13:55:10
А можете пример такого запроса показать? Пытаюсь повторить примерно так: seq 0 999999 | parallel -j10 'clickhouse-client --query "SELECT nonexistent{}();"' 2>/dev/null, память значимо не растёт. То есть, нужно что-то посложнее.
Вот почти точный (за исключением имени таблицы и конкретных значений) запрос, который мы шлем (который ошибочный): SELECT floor((toUInt32(time) + 10800) / 86400 + 1) * 86400 - 10800 AS `timestamp`,HLL_maxMerge(hll, 256) AS `HLL_MAX(hll, 256)` FROM table_name WHERE stats=123 AND (time BETWEEN 1537909200 AND 1540587599) AND (date BETWEEN '2018-09-26' AND '2018-10-26') AND (timestamp != 1540512000) GROUP BY timestamp ORDER BY timestamp LIMIT 3000000 Поле time это DateTime, hll — это String, stats — Int32

table_name — распределенная таблица (на 3 шарда) над MATERIALIZED VIEW

Alex
25.10.2018
13:58:29
А HLL_maxMerge это как раз несуществующая функция?

Yuran
25.10.2018
13:58:47
да

Google
Yuran
25.10.2018
13:59:25
это всё, что мне приходит в голову в плане того, чем этот кластер отличается от других

Rail
25.10.2018
14:54:05
Всем привет, есть вопрос по сырым данным из Google analytics Читаю сейчас статью где сказано что можно вытянуть эти данные и залить их в clickhouse Может кто знает как вытащить данные из Google analytics в сыром виде?

Alex
25.10.2018
14:54:18
это всё, что мне приходит в голову в плане того, чем этот кластер отличается от других
Попробовал с похожим (насколько это возможно) запросом - всё равно не получается повторить. А с какой версии вы обновлялись? И что это за функции вообще? Это у вас какие-то самописные?

Yuran
25.10.2018
14:58:35
Попробовал с похожим (насколько это возможно) запросом - всё равно не получается повторить. А с какой версии вы обновлялись? И что это за функции вообще? Это у вас какие-то самописные?
Обновлялись с версии 18.4.0 до 18.12.17 Этой функции у нас в ClickHouse нет, она есть в другом движке (сервисе), и это баг, что мы отправляем такой запрос в ClickHouse :). Ещё из того, чем этот кластер отличается от остальных: 1. Используется 3 MATERIALIZED VIEW над Null-движком 2. Используется AggregatingMergeTree с колонками AggregateFunction(…, Int64) c функциями sum,min,max,uniq Пока ч о больше ничего в голову не приходит :).

А есть возможность на релизной сборке как-то посмотреть, на что тратится память? Может быть мы можем обновиться обратно (на какое-то время) и посмотреть чем-нибудь :)? Вопрос только чем.

Alex
25.10.2018
15:10:27
Простого способа с неинструментированным бинарником из пакета вроде бы нет.

Yuran
25.10.2018
15:10:52
А есть где-нибудь инструментированные бинарники :)?

или они дают сильную просадку по производительности?

Alex
25.10.2018
15:22:13
Надо специально делать + да, может быть просадка. Будет время, попробую сделать.

Pavel
25.10.2018
15:22:56
кстати, есть возможность вообще узнать, сколько памяти выжрет запрос, не запуская его?

Yuran
25.10.2018
15:23:36
допишите в конец SETTINGS max_memory_usage = 100000 :))

Google
Pavel
25.10.2018
15:23:49
допишите в конец SETTINGS max_memory_usage = 100000 :))
методом последовательных приближений

Yuran
25.10.2018
15:23:51
если серьезно, то я думаю, что нет

Pavel
25.10.2018
15:24:02
SET max_memory_usage=<N>

Yuran
25.10.2018
15:24:12
Можно прямо у запроса

Pavel
25.10.2018
15:24:13
но это какой-то совсем неудобный способ

Yuran
25.10.2018
15:24:23
типа SELECT … FROM … SETTINGS max_memory_usage = …

Pavel
25.10.2018
15:24:28
так я уже делал, мне не понравилось

Yuran
25.10.2018
15:25:02
а если не секрет, для чего вы хотите заранее знать потребение памяти запросом?

насколько я понимаю, ClickHouse сейчас не умеет даже просто в EXPLAIN запроса, но над этим ведется работа

Pavel
25.10.2018
15:25:57
а если не секрет, для чего вы хотите заранее знать потребение памяти запросом?
системные требования прикидывал для некоторых кейсов с замороженными данными

для худших случаев, офк

Yuran
25.10.2018
15:26:14
обычно более-менее очевидно, сколько памяти потребуется для запроса (примерно)

т.е. если используются группировки, то нужно памяти для хранения всех промежуточных значений группировочных функций для всех комбинаций ключей

для сортировки нужно памяти столько, чтобы все выбираемые колонки поместились в память (до применения лимита)

Pavel
25.10.2018
15:27:16
обычно более-менее очевидно, сколько памяти потребуется для запроса (примерно)
"очевидно" это слабая метрика, увы. я же не могу знать, сколько сожрут промежуточные состояния агрегаций заранее

Yuran
25.10.2018
15:27:45
т.е. для оценки памяти можно делать что-нибудь типа count() и умножить на ~90 Кб для uniq функций, и на пару килобайт для остальных функций

но это можно прямо измерить точно, если есть желание

Pavel
25.10.2018
15:28:10
в рамках одиночных запросов это так и работает

Yuran
25.10.2018
15:28:12
сколько каждой функции требуется

количество уникальных комбинаций ключей считается с помощью uniq(key1, …, keyN)

Google
Pavel
25.10.2018
15:29:10
это всё я знаю, я думал, кто-то уже за меня это сделал :)

но, если эксплейн пока в планах, то увы

Yuran
25.10.2018
15:29:28
я слабо представляю, как можно узнать потребление памяти запросом, не выполняя его

EXPLAIN всё равно не знает, сколько у вас данных и какая у них кардинальность

а от этого может очень сильно зависеть ответ

Pavel
25.10.2018
15:30:26
это-то так.

Yuran
25.10.2018
15:30:40
т.е. оценку с погрешностью в 10-100 раз, я думаю, дать можно

точнее — нужно выполнять запрос ?

Pavel
25.10.2018
15:30:55
т.е. оценку с погрешностью в 10-100 раз, я думаю, дать можно
ну такую можно и с потолка взять, вообще говоря =\

Yuran
25.10.2018
15:31:11
но это я говорю с точки зрения того, как бы я делал

вроде ребята, которые разрабывают ClickHouse, поумнее меня будут, поэтому можете дождаться, пока они ответят ?

Pavel
25.10.2018
15:31:58
в общем пока я брал запрос и менял max_memory_usage =) способ очевдино идиотский, но в голову ничего лучше на тот момент не пришло

Yuran
25.10.2018
15:32:16
методом дихотомии за log2(N) найдете ответ ?

Алексей (OPS)
25.10.2018
16:37:21
version был равен 0 по умолчанию

Дмитрий
25.10.2018
17:11:01
Господа, а кто-нибудь пробовал запустить кликхаус с cifs в качестве storage?

Wolf
25.10.2018
17:11:35
а какой смысл в этом ?

Дмитрий
25.10.2018
17:12:23
да так, развлечься захотелось. Может есть поддержка, знает кто-нибудь?

Wolf
25.10.2018
17:13:31
ну причем тут поддержка оно просто на диске

бери да подключай , скорости будут конечно печальные

Google
Artem
25.10.2018
17:31:43
Привет. Что лучше использовать для обновления данных: ReplacingMergeTree или ALTER TABLE UPDATE?

Дмитрий
25.10.2018
17:33:07
Code: 1000. DB::Exception: Received from clickhouse:9000, {ip}. DB::Exception: Access to file denied: insufficient permissions: {path/table/tmp_**} - причём временный кусок на диске создается, а дальше отказ. Файловая система cifs. Надо думать ...

Mihail
25.10.2018
17:52:13
Ребята! А что если данные хранятся в одной зоне, а нужно сгруппировать по другой данные по дням

Из коробки сгруппирует?

Временной зоне*

Select .. group by executedDate но с отличной от сервера таймзоной

Yuran
25.10.2018
17:56:08
насколько я понимаю, в ClickHouse поле date уже не имеет никакой временной зоны

Vladislav
25.10.2018
17:56:11
DateTime колонка нужна для этого

Yuran
25.10.2018
17:56:16
только поле DateTime можно привести к другой

Vladislav
25.10.2018
17:56:37
Date - не хранит время. И идет по поясу сервера

Mihail
25.10.2018
17:57:51
Datetime есть

Yuran
25.10.2018
17:58:12
тогда группируйте по этому полю

Mihail
25.10.2018
17:58:13
Но это я так понял будет намного дольше выполняться

Ок

Artem
25.10.2018
18:43:49
Что лучше использовать для обновления данных: ReplacingMergeTree или ALTER TABLE UPDATE?

Yuran
25.10.2018
18:45:52
Но это я так понял будет намного дольше выполняться
Разница будет примерно такая: Date: 25 rows in set. Elapsed: 6.869 sec. Processed 14.51 billion rows, 29.01 GB (2.11 billion rows/s., 4.22 GB/s.) toDate(time): 25 rows in set. Elapsed: 12.893 sec. Processed 14.51 billion rows, 87.04 GB (1.13 billion rows/s., 6.75 GB/s.)

То есть, благодаря тому, что поле date лучше сжимается и меньше по размеру в принципе, группировка по нему будет идти в ~2 раза быстрее, чем просто по time

но, как видите, разница не то, чтобы прямо очень большая, это самый худший случай, когда я делаю просто “select date, count() group by date”

Petr
25.10.2018
18:49:59
Привет, как можно посмотреть индексы таблицы ?

Google
Petr
25.10.2018
19:01:12
Mihail
25.10.2018
19:01:40
Mihail
25.10.2018
19:03:53
И в 2 раза больше памяти врядли

Там хранятся данные по датам

Поэтому группировки быстрые

Alex
25.10.2018
19:04:28
Утверждение про компрессию будет корпектным, если такой результат будет получен на сравнении группировки по Date и DateTime, выровненому по границе дней.

Страница 720 из 723