Size: a a a

ClickHouse не тормозит

2021 January 18

K

KiLEX 萊赫 in ClickHouse не тормозит
Dmitry Burlakov
Ребята, а есть ли какие нить альтернативы, как сделать подобный запрос:
Хочется выбрать первые строки по каждому пользователю, из довольно увесистого лога.

select
      user,
      createdAt,
      at as first_log_at,
      abs(first_log_at - createdAt) as create_time_lag_sec,
      country,
      platform,
      version as start_version
from isp
where createdAt between toDate('2020-01-01') and today()
order by at
limit 1 by user

Текущий вылетает по памяти:
Code: 241, e.displayText() = DB::Exception: Memory limit (for query) exceeded: would use 9.31 GiB (attempt to allocate chunk of 4195401 bytes), maximum: 9.31 GiB: (avg_value_size_hint = 14.086669921875, avg_chars_size = 7.304003906249999, limit = 8192): (while reading column version): (while reading from part /var/lib/clickhouse/data/raven/log_r/4383f25745ae9ef993e861ad0c5bed11_0_26_48/ from mark 192 with max_rows_to_read = 8192): While executing MergeTreeThread (version 20.11.3.3 (official build))

Вот такой вот запрос работает без проблем: но min(version) != version на первой записи
select user,
      country,
      platform,
      createdAt,
      min(version) as start_version,
      min(at) as first_log_at,
      abs(first_log_at - createdAt) as create_time_lag_sec
from raven.isp
where isp.createdAt > toDate('2020-01-01')
group by user, country, platform, createdAt;
разрешить клику свопить ответ на диск?
источник

DB

Dmitry Burlakov in ClickHouse не тормозит
KiLEX 萊赫
разрешить клику свопить ответ на диск?
вариант... спасибо, попробуем
источник

K

KiLEX 萊赫 in ClickHouse не тормозит
источник

K

KiLEX 萊赫 in ClickHouse не тормозит
источник

K

KiLEX 萊赫 in ClickHouse не тормозит
но тут речь о group by.
источник

G

Gizmo in ClickHouse не тормозит
Есть таблица

user_id | event | time_event
1| start | 2021-01-18 09:20:00
1| ev1 | 2021-01-18 09:37:00
1| ev2 | 2021-01-18 09:58:00
1| exit | 2021-01-18 10:11:00
2| start | 2021-01-18 10:02:00
2| ev1 | 2021-01-18 10:37:00

Как подсчитать, что за определенное время (например, 1 час), пользователь успевает сделать больше 3х событий.

Пытаюсь делать таким запросом
SELECT toStartOfInterval(time_event, INTERVAL 1 HOUR) AS time, user_id, COUNT(*) AS cnt 
FROM table
GROUP BY time, user_id
HAVING COUNT(*) > 3

Но в этом случае промежуток времени это час с 00:00 до 00:59, а не от первого события отсчитывается. Может кто сориентирует как правильно сделать?
источник

K

KiLEX 萊赫 in ClickHouse не тормозит
а как представляете себе результат? в голове не укладывается
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Andrey Grigorian
Здравствуйте, коллеги. Нужна помощь с добавлением индекса.

clh01 :) alter table traffic add index packetDate_ packetDate type minmax granularity 8192

ALTER TABLE traffic
   ADD INDEX packetDate_ packetDate TYPE minmax GRANULARITY 8192


Query id: 2e43efe9-d10a-4720-862a-6a529b9ddd53

Ok.

0 rows in set. Elapsed: 0.022 sec.

clh01 :) alter table traffic materialize index packetDate_

ALTER TABLE traffic
   MATERIALIZE INDEX packetDate_


Query id: 33c7de4e-b068-4b41-99e2-88afb045d4ca

Ok.

0 rows in set. Elapsed: 0.013 sec.

clh01 :) optimize table traffic final

OPTIMIZE TABLE traffic FINAL

Query id: cf81bec4-650d-4150-801b-cc4f4d306cba

Timeout exceeded while receiving data from server. Waited for 300 seconds, timeout is 300 seconds.
Cancelling query.
Ok.
Query was cancelled.

0 rows in set. Elapsed: 3431.730 sec.
minmax granularity 8192 --- это ошибка , это кол-во гранул из первичного ключа, у вас получается 8192*8192
minmax granularity 1 or(2) -- ожидается
источник

DB

Dmitry Burlakov in ClickHouse не тормозит
Спасибо!
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Mishanya
Здравствуйте!
подскажите, в каких случаях может пригодиться LowCardinality ? Как он работает ? Где храняться данные и в каком виде ?  Можно ли сальтерить с обычной строки в LowCardinality ?
В доке как-то супер мало информации.
Спасибо
https://youtu.be/rqf-ILRgBdY?list=PLO3lfQbpDVI-hyw4MyqxEk3rDHw95SzxJ

>Можно ли сальтерить с обычной строки в LowCardinality ?
да можно
источник

M

Maxim in ClickHouse не тормозит
Привет всем. Подскажите, пожалуйста, чем
ALTER TABLE table_name DROP PARTITION partition_expr
принципиально отличается от
ALTER TABLE table_name DROP PART partition_expr
?
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Maxim
Привет всем. Подскажите, пожалуйста, чем
ALTER TABLE table_name DROP PARTITION partition_expr
принципиально отличается от
ALTER TABLE table_name DROP PART partition_expr
?
PARTITION состоит из множества PART

а откуда взялось
ALTER TABLE table_name DROP PART partition_expr
я не думаю что это работает
источник

NT

Nikita Tikhomirov in ClickHouse не тормозит
А как рассчитать количество допустимых партиций на хост?
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
лучше не используйте никогда  DROP PART
пока вы не понимаете что он делает
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Nikita Tikhomirov
А как рассчитать количество допустимых партиций на хост?
никак. Если вы не знаете ответа, используйте партиционирование toYYYYMM
источник

M

Maxim in ClickHouse не тормозит
Это из документации) https://clickhouse.tech/docs/ru/sql-reference/statements/alter/partition/#alter_drop-partition
А можно ли удалять партиции по какому-то общему признаку, используя Like в предикате, или только явно указывая?
Мне необходимо удалить много партиций, все они подходят под условие like '%2021-01-18%' например
источник

NT

Nikita Tikhomirov in ClickHouse не тормозит
Ну я сделал партицирование, там максимальное кол-во партиций возможно - 100
источник

NT

Nikita Tikhomirov in ClickHouse не тормозит
100 партиций, это много\мало?)
источник

M

Maxim in ClickHouse не тормозит
это не много
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Maxim
Это из документации) https://clickhouse.tech/docs/ru/sql-reference/statements/alter/partition/#alter_drop-partition
А можно ли удалять партиции по какому-то общему признаку, используя Like в предикате, или только явно указывая?
Мне необходимо удалить много партиций, все они подходят под условие like '%2021-01-18%' например
>А можно ли удалять партиции по какому-то общему признаку, используя Like в предикате, или только явно указывая?
нельзя.

>Мне необходимо удалить много партиций, все они подходят под условие like '%2021-01-18%' например
можно написать что-то типа

select concat('alter table ',table, ' drop partition id \'', partition_id, '\';')
from system.parts
where active = 1 and table like 'яяя'  and partition like '%2020-09%' group by database,table,partition_id
order by database,table,partition_id
источник