184 похожих чатов

Кстати, кто-нибудь знает, как бороться с GROUP BY на больших

пачках?

У нас стоит ReplacingMergeTree, т.е. в базе данных есть дубликаты, которые неизвестно когда мёржатся. Нужно брать самые актуальные значения по полю <time>. Я использую argMax(<field>, time). Но так же нужна группировка по ID'шнику (ведь есть дубликаты). Clickhouse уже при паре миллионов записей начинает задыхаться (потребляет очень много памяти).

К примеру:

В базе данных есть поле, отвечающее за тип события. API позволяет запросить данные, удовлетворяющие условию: все данные, у которых данные события <values> являются последними.

Грубо говоря, есть данные:

message_id | event_type | event_time
-----------|------------|---------------------
000F010D | 15, | 04:16:04.258567879Z
000F010D | 16 | 04:18:31.027178631Z
000F010D | 12 | 04:55:31.027178631 -- последнее событие
FFF11111 | 1, | 05:16:04.258567879Z
FFF11111 | 2 | 05:18:31.027178631Z
FFF11111 | 15 | 05:18:32.027178631Z
FFF11111 | 15 | 05:18:38.027178631Z
FFF11111 | 11 | 05:55:39.027178631 -- последнее событие
AAAAAAAA | 1, | 06:16:04.258567879Z
AAAAAAAA | 11 | 06:55:39.027178631 -- последнее событие

Запрос:

SELECT
...,
argMax(last_event_type, last_event_time) as max_last_event_time
FROM table_1
WHERE (...)
GROUP BY message_id
HAVING max_last_event_time in (12, 11)
LIMIT 0, 10;

Вернет:

message_id | event_type | event_time
-----------|------------|---------------------
000F010D | 12 | 04:55:31.027178631 -- последнее событие
FFF11111 | 11 | 05:55:39.027178631 -- последнее событие
AAAAAAAA | 11 | 06:55:39.027178631 -- последнее событие

Я делаю подзапрос без GROUP BY с ограничением выборки (в 1000), к примеру. И уже её группирую. Получается по факту некорректно, но это пока единственный способ не задохнуться.

2 ответов

7 просмотров

https://clickhouse.com/docs/en/sql-reference/statements/select/group-by#group-by-in-external-memory Плохой вариант, но может поможет

Владислав-Белоусов Автор вопроса
C
https://clickhouse.com/docs/en/sql-reference/state...

Спасибо! Попробую на днях!

Похожие вопросы

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Всем привет! Кто нибудь парсил в ручную JSON без библиотек и фреймворков? Есть может ссылки на оптимальный алгоритмы работы с текстом и примеры таких парсеров?
Lem
27
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
Есть сайт. Там была древняя версия эво. Стоял плагин, который каждый коммент в Jot делал отдельной страницей. После обновления все слетело, теперь старница открывается отдельн...
Artem
1
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
Добрый день. А shovel'ы можно как-то сконфигурировать в definitions.json? Пробовал что-то вроде: { "users": [ { "name": "agent", "password_hash": "RBCbTzQd...
Aleksey
1
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
11
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
Карта сайта