Size: a a a

ClickHouse не тормозит

2021 March 02

M

Mishanya in ClickHouse не тормозит
Alexander
Подскажите, можно как-то быстро очистить таблицу в кх? Есть юнит тесты в сервисе, который юзает кх и в конце каждого кейса надо чистить таблицу. Сейчас делается запрос TRUNCATE и на это уходит 3 секунды, что очень много и значительно увеличивает время прохождения тестов. Записей в таблице буквально несколько десятков.
truncate ?
источник

A

Alexander in ClickHouse не тормозит
Mishanya
truncate ?
Да, он и выполняется 3 секунды на таблице с десятком строк
источник

A

Alexander in ClickHouse не тормозит
Может есть способ быстрее
источник

L

Lamobot in ClickHouse не тормозит
Alexander
Может есть способ быстрее
Новая таблица на каждый тест и в параллель чистить старую/старые.
источник

DK

Dmitry Krylov in ClickHouse не тормозит
Подскажите, как можно использовать предыдущие значения из строк для вычисления текущего значения?

Например, есть табличка:

x
---
3
8
5
12

Я хочу получить колонку y, которая равна y[-1]*2 + x (или 1, если x = 3).

То есть вот такое:

x   y
--- ---
3   1
8   10  -- т.е. 1*2 + 8
5   25   -- т.е. 10*2 + 5
12  62 -- 25*2 + 12

Хотелось бы как-то так: SELECT x, if(x = 3, 1, neighbor(y, -1) * 2 + x) as y FROM tbl, но там же y ещё не определён.
источник

M

Mishanya in ClickHouse не тормозит
Dmitry Krylov
Подскажите, как можно использовать предыдущие значения из строк для вычисления текущего значения?

Например, есть табличка:

x
---
3
8
5
12

Я хочу получить колонку y, которая равна y[-1]*2 + x (или 1, если x = 3).

То есть вот такое:

x   y
--- ---
3   1
8   10  -- т.е. 1*2 + 8
5   25   -- т.е. 10*2 + 5
12  62 -- 25*2 + 12

Хотелось бы как-то так: SELECT x, if(x = 3, 1, neighbor(y, -1) * 2 + x) as y FROM tbl, но там же y ещё не определён.
источник

DK

Dmitry Krylov in ClickHouse не тормозит
А как мне в agg_state передавать *2 ?
источник

DK

Dmitry Krylov in ClickHouse не тормозит
Мне не столько *2 нужно, сколько вообще свою, более сложную, функцию f(x) вызывать
источник

KS

Konstantin Sevastian... in ClickHouse не тормозит
Dmitry Krylov
Мне не столько *2 нужно, сколько вообще свою, более сложную, функцию f(x) вызывать
arrayMap() выглядит тем что нужно
источник

DK

Dmitry Krylov in ClickHouse не тормозит
А как в arrayMap() обратиться к предыдущему элементу?
источник

DK

Dmitry Krylov in ClickHouse не тормозит
Она может только f(x) сделать
источник

DK

Dmitry Krylov in ClickHouse не тормозит
Если бы поддерживались "ленивые вычисления", то да, можно было бы arrayZip, и потом arrayMap...
источник

KS

Konstantin Sevastian... in ClickHouse не тормозит
Dmitry Krylov
А как в arrayMap() обратиться к предыдущему элементу?
[1,2,3,1] arr,
arrayEnumerate(arr) arr_num,
arrayMap(x,y->x -  arr[arr_num - 1], arr, arr_num)
источник

V

Vladimir in ClickHouse не тормозит
Привет! Подскажите, пожалуйста, можно ли где-то почитать/посмотреть о текущем стейте внешних merge join
источник

DK

Dmitry Krylov in ClickHouse не тормозит
Konstantin Sevastianov
[1,2,3,1] arr,
arrayEnumerate(arr) arr_num,
arrayMap(x,y->x -  arr[arr_num - 1], arr, arr_num)
Это не то, нужно не к arr обращаться, а к результатам предыдущего вычисления того же массива
источник

DK

Dmitry Krylov in ClickHouse не тормозит
arrayMap(x,y->x -  res[arr_num - 1], arr, arr_num) as res
источник

DK

Dmitry Krylov in ClickHouse не тормозит
Типа такого
источник

DK

Dmitry Krylov in ClickHouse не тормозит
Но это не работает
источник

DK

Dmitry Krylov in ClickHouse не тормозит
DB::Exception: Missing columns: 'res' while processing query
источник

В

Виктор in ClickHouse не тормозит
Добрый день. Подскажите как оптимизировать выборку через aggregatingmergetree?

Есть таблица logs(datetime, host, url, response_time) order by (host, datetime)
И такой запрос:
select host, url, sum(response_time), avg(response_time), count(1) from logs where datetime > now - interval 1 hour group by host, url

Я понимаю как сделать таблицу с aggregating merge tree без учета datetime - то есть просто накопительная информация за все время
А хотелось бы получать информацию суммарно за последний час

Есть вариант добавить колонку toYYYYMMDDHH(datetime) в примак, но тогда не будет возможности получать информацию по времени не кратном часу, то есть, например, с 13:36 до 14:36
источник