TGViewer
Чашечка Java Чашечка Java @a_cup_of_java · 8.35K subscribers
Post #6335 1.39K
Искусство ETL. Пишем собственный движок SQL на Spark [часть 7]

В предыдущих сериях (FAQ • 1 • 2 • 3 • 4 • 5 • 6 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных.
В данной части поговорим о том, как добавить в собственный диалект SQL поддержку процедур. Например,

-- library.tdl

CREATE PROCEDURE dwellTimeByMode(@signals, @target, @outPrefix,
@modes = ['pedestrian', 'non_pedestrian', 'car', 'bike'],
@groupid='cell10') AS BEGIN
LOOP $mode IN $modes BEGIN
SELECT * FROM $signals INTO "{$signals}/{$mode}" WHERE mode=$mode;

CALL dwellTime(@signals_userid_attr=userid,
@target_userid_attr=userid,
@target_grouping_attr=$groupid
) INPUT signals FROM "{$signals}/{$mode}", target FROM $target
OUTPUT INTO "{$outPrefix}/{$mode}";

ANALYZE "{$signals}/{$mode}";
ANALYZE "{$outPrefix}/{$mode}";
END;
END;

--- ... --- ... --- ... ---

-- script.tdl

CALL dwellTimeByMode(@signals=$this_month, @target=$population, @outPrefix=$this_month);


Нафига это надо?
Ну, допустим, у нас уже есть некоторое количество SQL ETL кода, наработанного за время эксплуатации инструмента в продакшене, и становится заметно, что значительная часть скриптов на разных проектах совпадает, и из раза в раз повторяется. Логично было бы вынести все эти совпадающие куски в библиотеку, чтобы держать в одном месте, да и вызывать с какими надо параметрами, когда надо. Вот прям как на примере выше.


Читать: https://habr.com/ru/articles/838034/?utm_campaign=838034

@a_cup_of_java | Другие наши каналы
  • ❤ 2
More from @a_cup_of_java
  1. Oct 13, 2026Post #8692
  2. Oct 13, 2026Showboat и Rodney помогают показать работу ИИ-агента Саймон Уиллисон собирает демонстрации…
  3. Oct 13, 2026Spring Boot Actuator: свои проверки здоровья и доступ к диагностике В Spring Boot 4 провер…
  4. Oct 13, 2026Хаотичный планировщик помог найти ошибку в тесте JFR В январском разборе Йоханнес Бехберге…
  5. Oct 13, 2026Развёрнутое пояснение: 1. Spring создаёт OrderService с областью singleton: этот экземпляр…
  6. Oct 13, 2026Post #8687
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →