Ситуация по дата моделлингу: - есть таблица с большим количеством нормализованных

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

Собственно вопрос: как это всё дело организовать таким образом чтобы можно было довольно эффективно джойнить данные учитывая что данных реально МНОГО и за раз нужный период и несколько категорий не запроцессить?

Я не придумал ничего умнее чем на каждую категорию для джоина сначала забирать дельту, дедуплицировать эту дельту и сохранять промежуточную таблицу, потом уже эти "дедуплицированные" таблицы брать на нужный период, делать финальную дедупликацию и уже потом финально проводить джоин.

Может у вас есть какие-то еще идеи как это сделать более качественно и эффективно, может какой-то data layout крутой есть или подход

Технологии я выбирать не могу, это spark + batch + parquet, без delta lake и стриминга

4 ответов

16 просмотров

Пример данных и sql (для малого количества данных)скинуть можете? Что-то плохо вкурил условия

Mi- Автор вопроса

(пример выдуман если что) events: ID,CATEGORY,VALUE,TIMESTAMP 1,FOOD_TYPE,VEGETABLES,2022-03-03 10:11:12.11 1,<100 других FOOD_TYPE с другим timestamp> 1,FOOD_PRICE,12.33,2022-03-03 10:12:12.11 1,<100 других FOOD_PRICE с другим timestamp> SELECT types.value as food_type, prices.value as price FROM (SELECT * FROM events WHERE category = 'FOOD_TYPE' <тут еще дедупликация по timestamp>) types JOIN (SELECT * FROM events WHERE category = 'FOOD_PRICE' <тут еще дедупликация по timestamp>) prices —— @kiri3L - айди слишком много разных + интервал потенциально может меняться от года до месяца и тд —— @kvadratura - может убрать уже слоумод, а?

Mi
(пример выдуман если что) events: ID,CATEGORY,VALU...

Видимо, дедупликация - это последнее значение по timestamp? И, надо полагать, join по ID? Не совсем понятно как идёт связка Я бы для начала попробовал оконкой отбирать последние значения в разрезе категории. И сделал (возможно) checkpoint. Получили таблицу Id, category, value Ну и дальше пробовал играть с производительностью - например убрал бы join и сделал union и min()по ID. PS. Можно попробовать сделать pivot, но не уверен в производительности. В БД это обычно плохое решение.

Mi- Автор вопроса
Владислав Lazycat
Видимо, дедупликация - это последнее значение по t...

Ну это в целом то что я сейчас и делаю, что касается первой части, и думаю есть ли лучше варианты

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта