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 ответов

13 просмотров

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...

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

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

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

https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Ребят в СИ можно реализовать ООП?
Николай
33
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
core\config\database\connections\default.php На всякий случай проверь всё же файл <?php return [ 'driver' => env('DB_TYPE', 'mysql'), //$database_type 'host' => env('D...
Andrey K
2
Всем доброго вечера. Разрабатываю 32 раз. приложение в Delphi. Столкнулся с тем, что стандартный  TFilestream  не работает с большим файлом > 2 ГБайт (после вызова функции see...
Vadim Gl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
добрый день. Подскажите, есть сайт на 1.4.7 и я хочу обновиться, особо ничего не меняя. мне выбирать версию 1.4.35 или третью ветку? и можно ли обновлять "как есть", или нужно...
Digital Cat
12
народ, плиз хелп, всю голову сломал себе уже... разве может быть так, что GetProcAddress( GetModuleHandle( "kernel32.dll" ), "SetThreadDescription" ) вернёт ненулевое значение...
Iluha Companets
12
Кто кодит под Лазарем на винде, у вас аналогично VCL переопределяются CreateWnd и CreateParams для конкретных классов контролов и все заданные флаги влияют?
А Андрей
11
Карта сайта