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

Добрый день! Недавно наша компания начала пытаться в кликхаус. И у меня

возник вопрос - а правильно ли мы его используем?
Суть такова:
(упрощённо) У нас есть рейсы по заказам с мунициаплитетом и назначенными на них машинами (municipality_uuid -> order_uuid -> run_uuid -> vehicle_uuid)
vehicle_uuid может меняться.
Мы создали таблицу с сырыми данными по изменениям order_runs_raw с полями municipality_uuid, order_uuid, run_uuid, vehicle_uuid, updated_at
Для этой таблицы матвьюху order_runs с полями municipality_uuid, order_uuid, run_uuid, argMaxState(vehicle_uuid, order_runs_raw.updated_at), maxState(updated_at) ORDER BY municipality_uuid, order_uuid, run_uuid
для того чтобы иметь актуальный vehicle_uuid для каждого рейса в соответствии с последними изменениями

Далее возникла задача выводить изменения по разным часам
матвьюха order_runs_hourly с полями municipality_uuid, order_uuid, run_uuid, toStartOfHour(updated_at) as updated_at_hour, argMaxState(vehicle_uuid, order_runs_raw.updated_at), maxState(updated_at) ORDER BY municipality_uuid, order_uuid, run_uuid, updated_at_hour

Далее необходимо для различных уровней агрегации выводить список используемых в рейсах за час машин (при чём за последний updated_at в часу, а не все машины вместе с заменёнными)
Т.е. нужна матвьюха типа municipality_uuid, order_uuid, updated_at_hour, массивМашин ORDER BY municipality_uuid, order_uuid, updated_at_hour

Не могу понять как реализовать последнюю вьюху да и правильный ли вообще подход

14 ответов

10 просмотров

> (упрощённо) У нас есть рейсы по заказам с мунициаплитетом и назначенными на них машинами (municipality_uuid -> order_uuid -> run_uuid -> vehicle_uuid) Вы обеспечиваете рейсами муниципалитеты небольшой галактики?) если вам необходимо использовать 16 байтовый айди? > для того чтобы иметь актуальный vehicle_uuid для каждого рейса в соответствии с последними изменениями Почему не replacingMergeTree И сколько у вас вообще строк в таблице?

Kiteg-Derbenev Автор вопроса
Dmitry [Altinity] Titov
> (упрощённо) У нас есть рейсы по заказам с муници...

юиды с легаси пошли replacingMergeTree если я правильно понимаю - удаляет записи в фоне, а не сразу. Таким образом можем получить дубликаты, что не подходит учитывая что по этой табличке будем потом составлять отчёты и машины которые были заменены на рейсе не должны попасть в пересчёт

Kiteg Derbenev
юиды с легаси пошли replacingMergeTree если я прав...

MV и тд это тоже просто insert trigger и удаляет в фоне https://kb.altinity.com/altinity-kb-schema-design/materialized-views/

Kiteg Derbenev
юиды с легаси пошли replacingMergeTree если я прав...

выбирайте последние данные всегда, и у вас не будет дубликатов

Kiteg Derbenev
юиды с легаси пошли replacingMergeTree если я прав...

используйте SELECT ... FINAL дубликаты будут удаляться из результатов выборки

Slach [altinity]
используйте SELECT ... FINAL дубликаты будут удаля...

а FINAL сильно влияет на производительность запроса ?

Anton Farygin
а FINAL сильно влияет на производительность запрос...

а сколько строк у вас в таблице? может вам clickhouse вообще не нужен?

Anton Farygin
а FINAL сильно влияет на производительность запрос...

https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-final-clause-speed/ https://kb.altinity.com/engines/mergetree-table-engine-family/replacingmergetree/ Зависит от обстоятельств

Kiteg-Derbenev Автор вопроса
Slach [altinity]
а сколько строк у вас в таблице? может вам clickho...

от нескольких сотен до пара тысяч ордеров в день, в каждом из них по сотне рейсов

Slach [altinity]
а сколько строк у вас в таблице? может вам clickho...

у меня около трёх миллиардов, но вопрос не про меня. Я тоже использую MV у которых данные схлопываются. и почему-то FINAL не использую, хотя наверное можно было бы попробовать.

Dmitry [Altinity] Titov
https://kb.altinity.com/altinity-kb-queries-and-sy...

спасибо, проверим на наших кейсах после обновления до свежей lts

Anton Farygin
у меня около трёх миллиардов, но вопрос не про мен...

я не про MV я про ReplacingMergeTree выборка из этой таблицы если у вас возможны дубликаты в разных вставках, должна быть с FINAL либо всякие там any, argMin , argMax функции использовать

Kiteg-Derbenev Автор вопроса
Dmitry [Altinity] Titov
> (упрощённо) У нас есть рейсы по заказам с муници...

А чем собственно может помочь ReplacingMergeTree? Из-за того что запрос во вьюхах выполняется только в рамках вставляемых данных - в массив во вьюхе будут попадать все значения, т.к. массив то сам из себя старые значения удалять не будет

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
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
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
Карта сайта