Size: a a a

ClickHouse не тормозит

2020 May 25

D

Dj in ClickHouse не тормозит
Dj
старый вопрос у меня так и не решился... жду рацпредложений от гуру )
—-
всем добрый вечер, очередная головоломка )
как за-семи-джойнить две таблицы  (а точнее отфильтровать одну при помощи второй) по совпадению в префиксе.
пока смог только так, но по итогу выпадает с аут оф мемори (видимо arrayExists  копирует входной массив на каждую строку в where).

пример
with (
 select groupArray(objfilter) from (
   select 'lvl1=2,lvl2=3,lvl3=5' as objfilter UNION ALL
   select 'lvl1=1,lvl2=3,lvl3=5,lvl4=43' as objfilter
 )
) as fltArr
select fltArr, * from
(
select 'lvl1=2,lvl2=3,lvl3=5' as objpath UNION ALL
select 'lvl1=2,lvl2=3,lvl3=5,lvl4=2' as objpath UNION ALL
select 'lvl1=2,lvl2=3,lvl3=5,lvl4=44' as objpath UNION ALL
select 'lvl1=3,lvl2=3,lvl3=6' as objpath UNION ALL
select 'lvl1=2,lvl2=3' as objpath UNION ALL
select 'lvl1=1,lvl2=3,lvl3=5' as objpath  
) t
WHERE arrayExists(
               selectedObj ->
                    (startsWith(objpath, selectedObj)
                       or startsWith(selectedObj, objpath)),
               fltArr);
проблема, именно в том что arrayExists копирует массив... а развернуть и сделать join по startsWith нельзя (
источник

Д

Дмитрий in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
т.е. данные еще не удалились? проверяли селектом?

что возвращает вот этот запрос

select * from system.parts where bytes_on_disk > (select toInt64(value) from system.merge_tree_settings where name = 'max_bytes_to_merge_at_max_space_in_pool')
селектом проверяю, количество строк не меняется, по крайней мере с того момента как все зависло. по запросу, сейчас выполню, обновлю пост.

upd: запрос 0 строк возвращает)
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Дмитрий
селектом проверяю, количество строк не меняется, по крайней мере с того момента как все зависло. по запросу, сейчас выполню, обновлю пост.

upd: запрос 0 строк возвращает)
в логе КХ какие сообщения были про мутацию?

может это просто большие парты и поэтому так долго.
еще можно по mutations.block_numbers.partition_id понять какие это парты и посмотреть их размер.

вы бекапы с помощью freeze делали когда-нибудь?
источник

Д

Дмитрий in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
в логе КХ какие сообщения были про мутацию?

может это просто большие парты и поэтому так долго.
еще можно по mutations.block_numbers.partition_id понять какие это парты и посмотреть их размер.

вы бекапы с помощью freeze делали когда-нибудь?
id мутации: 253930565
сообщения грепом по id мутации, последние n строк: https://pastebin.com/raw/UzE27EUB
возможно парты большие, как понять какой парт, по логам?
бекапы - нет.
источник

OG

Oleksiy Golovko in ClickHouse не тормозит
@den_crane arrayCumSum отличная штука! Спасибо за пример 🙂 У меня есть еще одно усложнение теперь. А есть ли подобная функция для работы с массивами? Другими словами, представьте, что в каждой строке есть колонка типа Array и в ней какие-то значения. Можно ли получить результат arrayCumSum на этой колонке (например конкатенируя массивы)?
источник

D

Dj in ClickHouse не тормозит
Oleksiy Golovko
@den_crane arrayCumSum отличная штука! Спасибо за пример 🙂 У меня есть еще одно усложнение теперь. А есть ли подобная функция для работы с массивами? Другими словами, представьте, что в каждой строке есть колонка типа Array и в ней какие-то значения. Можно ли получить результат arrayCumSum на этой колонке (например конкатенируя массивы)?
источник

D

Dj in ClickHouse не тормозит
Oleksiy Golovko
@den_crane arrayCumSum отличная штука! Спасибо за пример 🙂 У меня есть еще одно усложнение теперь. А есть ли подобная функция для работы с массивами? Другими словами, представьте, что в каждой строке есть колонка типа Array и в ней какие-то значения. Можно ли получить результат arrayCumSum на этой колонке (например конкатенируя массивы)?
arrayCumSumArray t.e.
источник

OG

Oleksiy Golovko in ClickHouse не тормозит
Unknown function arrayCumSumArray. Maybe you meant: ['arrayCumSum'].
источник

OG

Oleksiy Golovko in ClickHouse не тормозит
это есть в новой версии?
источник

M

Munir in ClickHouse не тормозит
Подскажите плиз. Вроде раньше читал про метод columns(), который можно использовать вместо перечисления столбцов в select - сейчас найти не могу. Его уже нет или у него другое название?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Дмитрий
id мутации: 253930565
сообщения грепом по id мутации, последние n строк: https://pastebin.com/raw/UzE27EUB
возможно парты большие, как понять какой парт, по логам?
бекапы - нет.
наверное по select distinct  data_version system.parts
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Oleksiy Golovko
@den_crane arrayCumSum отличная штука! Спасибо за пример 🙂 У меня есть еще одно усложнение теперь. А есть ли подобная функция для работы с массивами? Другими словами, представьте, что в каждой строке есть колонка типа Array и в ней какие-то значения. Можно ли получить результат arrayCumSum на этой колонке (например конкатенируя массивы)?
groupArray заменить на groupArrayArray
источник

D

Dj in ClickHouse не тормозит
Oleksiy Golovko
Unknown function arrayCumSumArray. Maybe you meant: ['arrayCumSum'].
простите, не вник, arrayCumSum не аггрегатная функция, её нельзя суффиксить
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Munir
Подскажите плиз. Вроде раньше читал про метод columns(), который можно использовать вместо перечисления столбцов в select - сейчас найти не могу. Его уже нет или у него другое название?
нет есть SELECT COLUMNS('(?!^cat$)(^.*$)') FROM T
источник

OG

Oleksiy Golovko in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
groupArray заменить на groupArrayArray
не уверен что получится, мне нужно считать  уникальные элементы нарастающим итогом т.е. если массив [[1,2], [2,3], [1,2,3]] то результат - [2,3,3]
источник

D

Dj in ClickHouse не тормозит
Oleksiy Golovko
не уверен что получится, мне нужно считать  уникальные элементы нарастающим итогом т.е. если массив [[1,2], [2,3], [1,2,3]] то результат - [2,3,3]
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Oleksiy Golovko
не уверен что получится, мне нужно считать  уникальные элементы нарастающим итогом т.е. если массив [[1,2], [2,3], [1,2,3]] то результат - [2,3,3]
ну есть много чего flatten , groupUniqArrayArrayArray, arrayReduce без примера сложно сказать

и я не понял логики как считать 2,3,3

SELECT arrayCumSum(arrayDistinct(flatten([[1, 2], [2, 3], [1, 2, 3]])))

┌─arrayCumSum(arrayDistinct(flatten([[1, 2], [2, 3], [1, 2, 3]])))─┐
│ [1,3,6]                                                          │
└──────────────────────────────────────────────────────────────────┘
источник

AF

Alexander Fedotov in ClickHouse не тормозит
Всем привет! А почему
SELECT '<A'

может выводить пустую строку вместо ‘<A’? За угловой скобкой при этом не важно что (версия CH 19.16.3.6)
источник

OG

Oleksiy Golovko in ClickHouse не тормозит
@den_crane Логика такая - для каждого элемента top-level массива найти количество уникальных элементов к этому моменту:
1. [1,2] -> 2
2. [2,3] -> 3 (1,2 были известны к этому моменту, т.е. добавился только один - 3)
3. [1,2,3] -> 3 (все элементы уже были)
источник

SB

Sergey Bugaev in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
идея про флаг правильная, скачиваться будет недостающее
Merci, все получилось
источник