Size: a a a

ClickHouse не тормозит

2021 February 15

ЕВ

Евгений Водянко... in ClickHouse не тормозит
Подскажите, пжл., в КликХаусе реализована возможность оптимизации выполнения select-запроса на основе комбинации доступа с помощью индекса первичного ключа и индекса пропуска? В известной СУБД "О" такое называется index combine. Там выполняется конверсия ROWID в битовые карты, а далее карты пересекаются... могу пояснить практический смысл, зачем такое, если надо.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Евгений Водянко
Подскажите, пжл., в КликХаусе реализована возможность оптимизации выполнения select-запроса на основе комбинации доступа с помощью индекса первичного ключа и индекса пропуска? В известной СУБД "О" такое называется index combine. Там выполняется конверсия ROWID в битовые карты, а далее карты пересекаются... могу пояснить практический смысл, зачем такое, если надо.
в КХ все смешнее. Тут IOT таблица, т.е. PK используется всегда! А skip индексы используются когда их можно хоть как-то присобачить к запросу, поэтому да, тут одновременно работает и то и это.
И так как оптимизатора нет и я например не могу представить как его всунуть, то skip index bloom_filter просто тупо может затормозить запрос по первичному ключу и его удаление/отключение ускорит запрос
источник

ЕВ

Евгений Водянко... in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
в КХ все смешнее. Тут IOT таблица, т.е. PK используется всегда! А skip индексы используются когда их можно хоть как-то присобачить к запросу, поэтому да, тут одновременно работает и то и это.
И так как оптимизатора нет и я например не могу представить как его всунуть, то skip index bloom_filter просто тупо может затормозить запрос по первичному ключу и его удаление/отключение ускорит запрос
Спасибо большое. Именно это и хотел.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Я был всегда очень пессиместичен по вопросу пользы от skip index.
Но как оказалось в некоторых странных usecase когда КХ используют как телескоп, skip index-ы (bloom_filter по крайней мере) работают.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Required Optional
линейная функция это a*x+b*y+c=0 все функции, которые не могут представлены так с выбором параметров a b c нелинейные, например x^2. Одно из главных свойств линейности - вы можете применить на разных подмножествах, а потом применить функцию на результаты этих подмножеств и результат будет верен на объедении этих подмножеств. Для нелинейных функций это не верно.
Пример линейной функции - сумма если возьмем множество 1 2 3 4 5  то сумма(сумма(1,2),сумма(3,4,5)=сумма(1,2,3,4,5)
Пример нелинейной функции - среднее: среднее(среднее(1,2),среднее(3,4,5)) != среднее(1,2,3,4,5) так как 3,75!=3
avgState ни что иное как tuple(sum, count) поэтому не вижу проблемы, count == sum(1) , можно считать и тянуть вверх две суммы и в самом конце поделить (считать даже summap
источник

ЕВ

Евгений Водянко... in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
Я был всегда очень пессиместичен по вопросу пользы от skip index.
Но как оказалось в некоторых странных usecase когда КХ используют как телескоп, skip index-ы (bloom_filter по крайней мере) работают.
На митапе с Авито Алексей Миловидов упоминает про сценарий, когда будет профит -- поиск по редкой комбинации. Упоминается в контексте со Сфинкосм и Эластиком.
источник

D

Dj in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
Я был всегда очень пессиместичен по вопросу пользы от skip index.
Но как оказалось в некоторых странных usecase когда КХ используют как телескоп, skip index-ы (bloom_filter по крайней мере) работают.
работают прекрасно.
на глобально высококардинальных колонках с низкой локальной кардинальностью )
там в англ чатике был про такой ЛС вопрос...
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Евгений Водянко
На митапе с Авито Алексей Миловидов упоминает про сценарий, когда будет профит -- поиск по редкой комбинации. Упоминается в контексте со Сфинкосм и Эластиком.
да типа этого usecase
источник

RO

Required Optional in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
avgState ни что иное как tuple(sum, count) поэтому не вижу проблемы, count == sum(1) , можно считать и тянуть вверх две суммы и в самом конце поделить (считать даже summap
хорошо, а если не среднее а stddevPop?
источник

RO

Required Optional in ClickHouse не тормозит
или лучше quantile :)
источник

D

Dj in ClickHouse не тормозит
Required Optional
или лучше quantile :)
будет жутко тормозить, есть вещи типа quantileTDigest, они экономнее
источник

D

Dj in ClickHouse не тормозит
@den_crane а как получить distinct - flatten-  groupArray - State для колонки массивов?
для этого примера.
https://t.me/clickhouse_ru/204548
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
SimpleAggregateFunction(groupUniqArrayArray, Array(String))

select 
   groupUniqArrayArray(x) as keys, sumMap(x, y)
from (
   select [1,3,3] AS x, [1,-1,1] as y
   UNION ALL
   select [1,4,5] AS x, [-1,1,-1] as y
)
источник

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
SimpleAggregateFunction(groupUniqArrayArray, Array(String))

select 
   groupUniqArrayArray(x) as keys, sumMap(x, y)
from (
   select [1,3,3] AS x, [1,-1,1] as y
   UNION ALL
   select [1,4,5] AS x, [-1,1,-1] as y
)
да я мало раз array писал
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Required Optional
или лучше quantile :)
источник

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
SimpleAggregateFunction(groupUniqArrayArray, Array(String))

select 
   groupUniqArrayArray(x) as keys, sumMap(x, y)
from (
   select [1,3,3] AS x, [1,-1,1] as y
   UNION ALL
   select [1,4,5] AS x, [-1,1,-1] as y
)
  select arrayDistinct(flatten(groupArray(x))) as keys, arrayReduce('groupArrayState', keys) as keysState, 
 sumMap(x, y)  from (
 select [1,3,3] AS x, [1,-1,1] as y UNION ALL
 select [1,4,5] AS x, [1,1,-1] as y)

еще так курил, но эт хуже
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
Dj
  select arrayDistinct(flatten(groupArray(x))) as keys, arrayReduce('groupArrayState', keys) as keysState, 
 sumMap(x, y)  from (
 select [1,3,3] AS x, [1,-1,1] as y UNION ALL
 select [1,4,5] AS x, [1,1,-1] as y)

еще так курил, но эт хуже
Это внутрь AggregationMergeTree не засунуть :)
источник

D

Dj in ClickHouse не тормозит
Dmitry Koreckiy
Это внутрь AggregationMergeTree не засунуть :)
как раз засунуть, эти SimpleAggregateFunction только недавно полноценными стали... до этого надо было state пихать
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Dj
  select arrayDistinct(flatten(groupArray(x))) as keys, arrayReduce('groupArrayState', keys) as keysState, 
 sumMap(x, y)  from (
 select [1,3,3] AS x, [1,-1,1] as y UNION ALL
 select [1,4,5] AS x, [1,1,-1] as y)

еще так курил, но эт хуже
источник

D

Dmitry Koreckiy in ClickHouse не тормозит
Dj
как раз засунуть, эти SimpleAggregateFunction только недавно полноценными стали... до этого надо было state пихать
а ну возможно
просто тогда https://clickhouse.tech/docs/ru/sql-reference/data-types/simpleaggregatefunction/ устарела малясь :D
источник