Size: a a a

ClickHouse не тормозит

2020 September 27

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Denny Crane [not a Yandex bot]:
https://stackoverflow.com/a/60155974/11644308

прунинг не использует результат выражения PARTITION BY (toStartOfDay(toDate(created_at)), some_name) , оно вообще не хранится

в каждом парте есть мин и макс значения created_at

поэтому для where created_at >= можно найти список партов легко

а для where toStartOfDay(toDate(created_at)) все нетривиально, и нужна магия (искать поиском по слову магия в этом чате)
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
в версии 20.8 прунинг партиций улучшен до небес.  Amos Bird воплотил нереальную магию.
теперь прунинг работает в случае

PARTITION BY toYYYYMM(toDate(intDiv(d,1000)))

select uniqExact(_part), count() from sDD where toYYYYMM(toDateTime(intDiv(d,1000),'UTC')-1)+1 = 202010;
источник

SM

Serhii Mikhno in ClickHouse не тормозит
Smoked Cheese
Ещё в вашей версии кх TTL будет удалять только по 1 парту за раз, обновитесь до последней 20.3
а что по багам? Я со среды в отпуск на 2 недели - как то очень не хочется рисковать 🙂
источник

SC

Smoked Cheese in ClickHouse не тормозит
20.3 так-то LTS, новых багов завозить не должны, только фиксить
источник

SC

Smoked Cheese in ClickHouse не тормозит
(т.е. багов вместе с новыми фичами)
источник

s

sdlm in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
А почему 19.9 и как запрос выглядит целиком?
19.9 - потому что с тех пор не обновлялись (

оригинальный запрос, который выдаёт рандомные числа в третьей колонке, при каждом запуске разные
select cnt,
      count(distinct ordinary_user) as ordinary_users_cnt,
      count(distinct special_user) as special_users_cnt
from (
       select amp.user_uid as ordinary_user,
              count(*)     as cnt
       from events.amplitude_event as amp
                all inner join events.user_action as action on action.user_uid = amp.user_uid
       where dateDiff('hour', action.signup_time, event_time) < 12
       group by ordinary_user
) as first_query
all left join (
       select user_uid as special_user
       from events.user_action
       where dateDiff('hour', signup_time, action_time) between 12 and 36
       group by special_user
   ) as second_query on first_query.ordinary_user = second_query.special_user
group by cnt
order by cnt


изврат, что бы получить таки правильные цифры
select cnt,
      count(distinct ordinary_user) as ordinary_users_cnt,
      count(distinct special_user) as special_users_cnt
from (
     select amp.user_uid as ordinary_user,
            amp.user_uid as special_user,
            count(*)     as cnt
     from events.amplitude_event as amp
              inner join events.user_action as action on action.user_uid = amp.user_uid
     where dateDiff('hour', action.signup_time, event_time) < 12
       and dateDiff('hour', signup_time, action_time) between 12 and 36
     group by user_uid, special_user

     union all

     select amp.user_uid as ordinary_user,
            null         as special_user,
            count(*)     as cnt
     from events.amplitude_event as amp
              inner join events.user_action as action on action.user_uid = amp.user_uid
     where dateDiff('hour', action.signup_time, event_time) < 12
       and (
             dateDiff('hour', signup_time, action_time) not between 12 and 36
             or action_time is null
         )
     group by user_uid, special_user
        )
group by cnt
order by cnt


сори если запросы недостаточно упрощены, но вобщем суть цифр примерно такая:
хочется увидеть общее кол-во пользователей совершивших какое-либо действие в интервале 0-12 часов, с разбивкой по кол-ву событий
и отдельно увидеть сколько из них совершили специальное действие в следующие 24ч.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
sdlm
19.9 - потому что с тех пор не обновлялись (

оригинальный запрос, который выдаёт рандомные числа в третьей колонке, при каждом запуске разные
select cnt,
      count(distinct ordinary_user) as ordinary_users_cnt,
      count(distinct special_user) as special_users_cnt
from (
       select amp.user_uid as ordinary_user,
              count(*)     as cnt
       from events.amplitude_event as amp
                all inner join events.user_action as action on action.user_uid = amp.user_uid
       where dateDiff('hour', action.signup_time, event_time) < 12
       group by ordinary_user
) as first_query
all left join (
       select user_uid as special_user
       from events.user_action
       where dateDiff('hour', signup_time, action_time) between 12 and 36
       group by special_user
   ) as second_query on first_query.ordinary_user = second_query.special_user
group by cnt
order by cnt


изврат, что бы получить таки правильные цифры
select cnt,
      count(distinct ordinary_user) as ordinary_users_cnt,
      count(distinct special_user) as special_users_cnt
from (
     select amp.user_uid as ordinary_user,
            amp.user_uid as special_user,
            count(*)     as cnt
     from events.amplitude_event as amp
              inner join events.user_action as action on action.user_uid = amp.user_uid
     where dateDiff('hour', action.signup_time, event_time) < 12
       and dateDiff('hour', signup_time, action_time) between 12 and 36
     group by user_uid, special_user

     union all

     select amp.user_uid as ordinary_user,
            null         as special_user,
            count(*)     as cnt
     from events.amplitude_event as amp
              inner join events.user_action as action on action.user_uid = amp.user_uid
     where dateDiff('hour', action.signup_time, event_time) < 12
       and (
             dateDiff('hour', signup_time, action_time) not between 12 and 36
             or action_time is null
         )
     group by user_uid, special_user
        )
group by cnt
order by cnt


сори если запросы недостаточно упрощены, но вобщем суть цифр примерно такая:
хочется увидеть общее кол-во пользователей совершивших какое-либо действие в интервале 0-12 часов, с разбивкой по кол-ву событий
и отдельно увидеть сколько из них совершили специальное действие в следующие 24ч.
надо проверять в 19.16, ранее такие джойны могли неправильно работать.
и джойны в кх по умолчанию для порождают не NULL а 0 в special_user для all left join
а вы можете их вот тут посчитать count(distinct special_user) as special_users_cnt
источник

AG

Andrew Grigorev in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
Denny Crane [not a Yandex bot]:
https://stackoverflow.com/a/60155974/11644308

прунинг не использует результат выражения PARTITION BY (toStartOfDay(toDate(created_at)), some_name) , оно вообще не хранится

в каждом парте есть мин и макс значения created_at

поэтому для where created_at >= можно найти список партов легко

а для where toStartOfDay(toDate(created_at)) все нетривиально, и нужна магия (искать поиском по слову магия в этом чате)
Спасибо! Прям глаза открыл, я не правильно понимал партиции в CH :). Надо как-нибудь сесть и освежить знания уже.
источник

s

sdlm in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
надо проверять в 19.16, ранее такие джойны могли неправильно работать.
и джойны в кх по умолчанию для порождают не NULL а 0 в special_user для all left join
а вы можете их вот тут посчитать count(distinct special_user) as special_users_cnt
да, фикс сработал!
ну да, подставлять 0 вместо null при left join, это несколько неожиданно, я бы это ещё оч долго искал
спасибо огромное!!!
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
sdlm
да, фикс сработал!
ну да, подставлять 0 вместо null при left join, это несколько неожиданно, я бы это ещё оч долго искал
спасибо огромное!!!
поищите тут в чате про join_use_nulls

https://github.com/ClickHouse/ClickHouse/issues/15075#issuecomment-696069373
источник

s

sdlm in ClickHouse не тормозит
круть, спасибо за ссылку, стало понятнее что происходит
источник
2020 September 28

ЕО

Евгений Овчинников... in ClickHouse не тормозит
Привет, подскажите комманды для неинтерактивной установки clickhouse-server, пожалуйста, чтобы не требовалось руками вводить пароль для default.
источник

cc

coderxl coder in ClickHouse не тормозит
/report
источник

DA

Dima Admin in ClickHouse не тормозит
Евгений Овчинников
Привет, подскажите комманды для неинтерактивной установки clickhouse-server, пожалуйста, чтобы не требовалось руками вводить пароль для default.
https://stackoverflow.com/a/45478171 - попробуйте таким способом

[root@xxx ~]# debconf-get-selections| grep clickhouse-server
clickhouse-server clickhouse-server/default-password password
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Евгений Овчинников
Привет, подскажите комманды для неинтерактивной установки clickhouse-server, пожалуйста, чтобы не требовалось руками вводить пароль для default.
источник

ЕО

Евгений Овчинников... in ClickHouse не тормозит
вот то что нужно, спасибо
источник

A

Azat Khadiev in ClickHouse не тормозит
было бы круто, если в документации была информация о том, в какой версии это появилось
https://clickhouse.tech/docs/en/sql-reference/statements/create/role/
например здесь, я знаю что где-то в 20 версии
источник

A

Azat Khadiev in ClickHouse не тормозит
но хотелось бы точнее
источник

A(

Andrew (backEnd) in ClickHouse не тормозит
А какой движок для обработки потока запросов лучше/быстрее? буффер или кафка?
источник

ЕО

Евгений Овчинников... in ClickHouse не тормозит
DEBIAN_FRONTEND=noninteractive apt-get install -y clickhouse-server
echo clickhouse-server clickhouse-server/default-password 'password' | debconf-set-selections
apt-get install -y clickhouse-server
источник