Size: a a a

ClickHouse не тормозит

2021 March 18

KB

Kirill Bespalov in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
с view проблема что лишние поля читаются, очень медленно может быть, если в aggregatingmergetree 10 дименшинов, и во вью 10 полей групбай, а в запросе нужно только 2.
ого, спасибо, буду знать!
источник

S

Slach in ClickHouse не тормозит
Повелитель Бури
И еще вопрос: кто как работает с s3 ? Примаунтить диск через s3fs или как внешнюю функцию?
вместо s3fs
https://github.com/kahing/goofys
но тоже будет не сильно быстро

сам по себе s3 не быстрый так то =)
источник

Р

Руслан in ClickHouse не тормозит
Здравствуйте, подскажите, есть таблица mysql, содержащая записи с id - name, Dictionary таблица в кликхауз, данные синхронизировались, все нормально. Пытаюсь добавить эти данный в таблицу merge tree при select по id:

dictGet('db.name_dictionary', 'name', id) as name

пишет ошибку:

hird argument of function dictGetString must be (UInt64): while executing

Пробовал в таком виде:  dictGet('db.name_dictionary', 'name', toUInt64(id)) as name - тоже самое. Подскажите, в какую сторону копать? Спасибо
источник

S

Slach in ClickHouse не тормозит
Руслан
Здравствуйте, подскажите, есть таблица mysql, содержащая записи с id - name, Dictionary таблица в кликхауз, данные синхронизировались, все нормально. Пытаюсь добавить эти данный в таблицу merge tree при select по id:

dictGet('db.name_dictionary', 'name', id) as name

пишет ошибку:

hird argument of function dictGetString must be (UInt64): while executing

Пробовал в таком виде:  dictGet('db.name_dictionary', 'name', toUInt64(id)) as name - тоже самое. Подскажите, в какую сторону копать? Спасибо
какой LAYOUT у dictionary? complex hash?

tuple(id) попробуйте

dictGet('db.name_dictionary', 'name', tuple(id)) as name

вот так попробуйте
источник

Р

Руслан in ClickHouse не тормозит
Slach
какой LAYOUT у dictionary? complex hash?

tuple(id) попробуйте

dictGet('db.name_dictionary', 'name', tuple(id)) as name

вот так попробуйте
LAYOUT(COMPLEX_KEY_HASHED()). Спасибо, попробую
источник

MM

Mikhail Mayorov in ClickHouse не тормозит
Имеется в Clickhouse временная кривая, около 7М точек за 3 месяца. Надо для отображения на графике на фронте упростить её до 4К. Кто-то решал подобную задачу? Можете ссылками на статьи поделиться?
источник

MM

Mike Minaev in ClickHouse не тормозит
Mikhail Mayorov
Имеется в Clickhouse временная кривая, около 7М точек за 3 месяца. Надо для отображения на графике на фронте упростить её до 4К. Кто-то решал подобную задачу? Можете ссылками на статьи поделиться?
Ну мне кажется что тут нужно определиться с шагом дескритизации и сделать запрос вида select toStartOfHour(timestamp) ts, avg(metric) from table group by ts. Вместо avg можно брать каантиль какую-нибудь.
источник

S

Slach in ClickHouse не тормозит
Mikhail Mayorov
Имеется в Clickhouse временная кривая, около 7М точек за 3 месяца. Надо для отображения на графике на фронте упростить её до 4К. Кто-то решал подобную задачу? Можете ссылками на статьи поделиться?
ну, аггрегируйте, время в DateTime? или DateTime64?
для DateTime как то так
вместо avg может быть max или что-то еще

SELECT avg(value) AS avg_value, toStartOfInterval(event_time, (toUInt32('start_date') - toUInt32('end_time') / 4000) SECONDS) AS rounded_event_time
FROM table
GROUP BY rounded_event_time
источник

MM

Mikhail Mayorov in ClickHouse не тормозит
Супер! Меня больше тут стращало разбиение на кучки, не знал о существовании toStartOfHour и toStartOfInterval. Спасибо!
источник

-

-_- in ClickHouse не тормозит
Это подойдëт, если кривая равномерная. Есть ещё SAMPLE, может подойдëт под Вашу задачу
источник

SC

Sergey Churin in ClickHouse не тормозит
Dmitry Titov
А в system.replicas сколько total_replicas
~2000
источник

-

-_- in ClickHouse не тормозит
ORDER BY  возможен в обратном порядке?
источник

РМ

Рязанский Михаил... in ClickHouse не тормозит
DESC
источник

-

-_- in ClickHouse не тормозит
Точно, спасибо
источник

РМ

Рязанский Михаил... in ClickHouse не тормозит
-_-
ORDER BY  возможен в обратном порядке?
Ну, а если сортировка в массиве
то - перед элементом
источник

MC

Mary Charikova in ClickHouse не тормозит
Dmitry Titov
Скорее всего groupArray  но в подзапросе нужно будет сделать ORDER BY timestamp

SELECT
   [1, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3] AS a,
   arraySplit((x, y) -> (y != 0), a, arrayDifference(a)) AS d,
   arrayFilter(x -> (x != 0), arrayMap(x -> countEqual(x, 2), d)) AS v

Query id: 0d09384e-b8bf-4863-87e3-bb22abad52e4

┌─a─────────────────────────┬─d───────────────────────────────────┬─v─────┐
│ [1,2,2,2,2,2,4,2,2,2,2,3] │ [[1],[2,2,2,2,2],[4],[2,2,2,2],[3]] │ [5,4] │
└───────────────────────────┴─────────────────────────────────────┴───────┘
спасибо огромное, решение почти идеально вписалось в то, что мне нужно) один вопрос: конкретно в этом запросе считаются размеры всех массивов, которые содержат 2-ки. Как можно добавить условие, чтобы считались только размеры тех массивов, перед которыми идет [1]?

К примеру,
[1],[2,2,2,2] -> 4
[0,0],[2,2,2] -> пропускаем
источник

SC

Sergey Churin in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
19.14.6.12 -- можно сделать alter table delete where 0 , он пересоздаст все парты (в зукипере
сработало, спасибо👍
источник

DT

Dmitry Titov in ClickHouse не тормозит
Mary Charikova
спасибо огромное, решение почти идеально вписалось в то, что мне нужно) один вопрос: конкретно в этом запросе считаются размеры всех массивов, которые содержат 2-ки. Как можно добавить условие, чтобы считались только размеры тех массивов, перед которыми идет [1]?

К примеру,
[1],[2,2,2,2] -> 4
[0,0],[2,2,2] -> пропускаем
arraySplit((x, y) -> (y != 0), a, arrayDifference(arraySlice(a,indexOf(a,1))) AS d,
источник

MC

Mary Charikova in ClickHouse не тормозит
Dmitry Titov
arraySplit((x, y) -> (y != 0), a, arrayDifference(arraySlice(a,indexOf(a,1))) AS d,
Я так поняла, что в этом случае размер arrayDifference(arraySlice(a,indexOf(a,1))) и размер
a
отличаются, а arraySplit такое не принимает
источник

DT

Dmitry Titov in ClickHouse не тормозит
Mary Charikova
Я так поняла, что в этом случае размер arrayDifference(arraySlice(a,indexOf(a,1))) и размер
a
отличаются, а arraySplit такое не принимает
Заалиасить результат слайса можно

SELECT
   [1, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 3] AS a,
   arraySplit((x, y) -> (y != 0), arraySlice(a, indexOf(a, 1)) AS s, arrayDifference(s)) AS d,
   arrayFilter(x -> (x != 0), arrayMap(x -> countEqual(x, 2), d)) AS v

Query id: a22562b9-2769-4af3-8132-4e94a2838451

┌─a─────────────────────────┬─d───────────────────────────────────┬─v─────┐
│ [1,2,2,2,2,2,4,2,2,2,2,3] │ [[1],[2,2,2,2,2],[4],[2,2,2,2],[3]] │ [5,4] │
└───────────────────────────┴─────────────────────────────────────┴───────┘
источник