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

То есть данные из двух таблиц нужно будет запрашивать одновременно?

14 ответов

22 просмотра

вам надо одновременно и count и сырые данные видеть? Обычно нужны агрегированные данные для статистики. А по сырым уже какие-то точечные запросы

palinaaaaaa-👽 Автор вопроса
Konstantin Ilchenko
вам надо одновременно и count и сырые данные видет...

да, не проблема просто суммировать count (по умолчанию 1), а сжатые данные > 1 будут, = SUM(count) — кол-во сообщений

palinaaaaaa 👽
да, не проблема просто суммировать count (по умолч...

ну так если вы можете агрегировать на лету, вам не надо делать запросы по сырым данным

palinaaaaaa-👽 Автор вопроса
palinaaaaaa 👽
да, не проблема просто суммировать count (по умолч...

а вариант сделать так: сначала записывать сырые данные, потом в полночь искать эти данные, удалять за один день через ALTER, после чего вставлять новую запись с данными за день, какие проблемы могут быть?

palinaaaaaa-👽 Автор вопроса
palinaaaaaa 👽
объем чего?

Записей. Как всего, так и удаляемых. Альтерить то надо по строке..

palinaaaaaa 👽
а вариант сделать так: сначала записывать сырые да...

звучит как реизобретение GraphiteMergeTree https://clickhouse.tech/docs/ru/engines/table-engines/mergetree-family/graphitemergetree/

palinaaaaaa-👽 Автор вопроса
Vladimir Goncharov
звучит как реизобретение GraphiteMergeTree https:/...

в нём можно будет получать информацию по дням, от определённого человека?

palinaaaaaa 👽
а вариант сделать так: сначала записывать сырые да...

зачем так хитро с графитом? Им вобще кто-то пользуется, кроме тех кто сделал? В КХ есть специально придуманная для вашей задачи AggregatingMergeThree. Почитайте про нее. Если вкратце, то вы как обычно делаете вставку в основную таблицу по 10-100к строк, затем через MV частично аггрегируете этот блок : create materialized view metrics ENGINE = AggregatingMergeTree order by (id,ts) as SELECT id , toStartOfDay(ts) ts, avgState(temp_val) temp_val, countState() qty FROM metrics GROUP BY id, ts; в результате в таблице в которую пишет MV будут лежать не конечные аггрегированные значения, а промежуточные, с типом AggregateFunction. Их можно легко слить друг с другом. Скажем для avg это два числа sum и count (потом можно поделить для получения среднего). Для слияния двух пар состояний мы складываем суммы и каунты. Для других аггрегационных функций состояния сложнее и могут занимать много места (скажем для groupArray - это все элементы массива). Для sum наоборот - все слишком просто и состояние равно результату функции, поэтому придуманы SimpleAggregateFunction, которые легче, но позволяют согласовать синтаксис типов данных в функциях выполняющих доаггрегацию (-Merge). В обычном процессе мерджинга партов все такие состояния сливаются, и вы получаете почти то, что хотели - аггрегированные за сутки данные. Причем результаты доступны в любой момент, и без скриптов что-то там стирающих в ночи.

Boris
зачем так хитро с графитом? Им вобще кто-то пользу...

А если идет удаление данных из исходной таблицы на MV это же не отражается? В таком случае надо чистить MV отдельно?

Evgeniy Sergeev
А если идет удаление данных из исходной таблицы на...

почистить будет непросто. лучше не удалять. "что написано пером - не вырубишь...." Для суммы есть старый бухгалтерский трюк под названием сторнирование - сделать отрицательную проводку. Просто вставляйте строку с минусовым значением, сумма и уменьшится.

Boris
почистить будет непросто. лучше не удалять. "что...

Это понятно, что так идеологически правильно. Но на Alter Delete из исходной таблицы MV никак не реагирует?

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта