home.social

#pipeline_automation — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #pipeline_automation, aggregated by home.social.

  1. Иногда приходится¹ копаться² в кишках³ Apache Spark

    ¹ …просто потому, что другого варианта добиться необходимого результата тупо не существует. ² и да, довольно-таки глубоко. ³ нет, серьёзно! Давайте рассмотрим следующий бизнесовый кейс. Дано: реально большие данные. Очень много датасетов по много терабайтов каждый, — в сумме объём тянет на петабайты. Лежат в облаке, но это не важно. Важно, что мы эти данные покупаем в «сыром» виде, каким-то образом «готовим», а потом перепродаём конечному потребителю. Требуется: при подготовке каждого из датасетов разделить его согласно значениям одного или нескольких полей, составляющих его записи, на несколько. И это одна из особенно часто встречающихся в нашем процессе операций. Довольно-таки сложный, продвинутый ETL у нас. Поясню на типичном примере.

    habr.com/ru/articles/913244/

    #кейс #etl #apache_spark #java #pipeline_automation #hadoop_stack #big_data #big_data_tools #big_data_solutions #sql #никто_не_прочитает_эту_статью #написанную_для_отчётности_по_гранту

  2. Искусство 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 кода, наработанного за время эксплуатации инструмента в продакшене, и становится заметно, что значительная часть скриптов на разных проектах совпадает, и из раза в раз повторяется. Логично было бы вынести все эти совпадающие куски в библиотеку, чтобы держать в одном месте, да и вызывать с какими надо параметрами, когда надо. Вот прям как на примере выше.

    habr.com/ru/articles/838034/

    #etl #apache_spark #java #pipeline_automation #hadoop_stack #big_data #big_data_tools #big_data_solutions #sql #никто_не_прочитает_эту_статью #написанную_для_отчётности_по_гранту

  3. Инфраструктура для data engineer Kafka

    В этой статье я хочу показать как можно использовать Kafka в дата-инженерии и как её " пощупать ". Рекомендуется всем кто не знает что такое Kafka.

    habr.com/ru/articles/836302/

    #kafka #data_engineering #realtime #analytics #data #анализ_данных #data_lake #streaming #pipeline #pipeline_automation

  4. Искусство ETL. Пишем собственный движок SQL на Spark [часть 6]

    В предыдущих сериях ( FAQ • 1 • 2 • 3 • 4 • 5 ) мы весьма подробно рассмотрели, как написать на Java собственный интерпретатор объектно-ориентированного диалекта SQL поверх Spark RDD API, заточенный на задачи подготовки и трансформации наборов данных. В данной части поговорим о том, как добавить в выражения SQL поддержку функций. Например, SELECT
    MAX(score1, score2, score3, score4, score5) AS max_score,
    MIN(score1, score2, score3, score4, score5) AS min_score,
    MEDIAN(score1, score2, score3, score4, score5) AS median_score,
    score1 + score2 + score3 + score4 + score5 AS score_sum
    FROM raw_scores INTO final_scores
    WHERE ABS(score1 + score2 + score3 + score4 + score5) > $score_margin; — тут у нас функции MAX , MIN и MEDIAN принимают любое количество аргументов типа Double и возвращают Double , а ABS только один такой аргумент. Вообще, кроме общей математики, в любом уважающем себя диалекте SQL как минимум должны быть функции для манипуляций с датой/временем, работы со строками и массивами. Их мы тоже обязательно добавим. В classpath, чтобы движок мог их оттуда подгружать. До кучи, ещё и операторы типа >= или LIKE , которые у нас уже были реализованы, но хардкодом, сделаем такими же подключаемыми. Предупреждение о сложности материала Уровень сложности данной серии статей в целом высокий. Базовые понятия в тексте совсем не объясняются, да и продвинутые далеко не все. Однако, эта часть несколько проще для ознакомления, чем предыдущие. Но всё равно, понимать её будет легче, если вы уже пробежались по остальным хотя бы по диагонали.

    habr.com/ru/articles/808483/

    #etl #apache_spark #java #pipeline_automation #hadoop_stack #big_data #big_data_tools #big_data_solutions #sql #любите_ли_вы_твёрдую_НФ?