Tradycyjne narzędzia do data transformation to zazwyczaj monolityczne platformy typu all-in-one, które nie oferują dużych możliwości dostosowania i elastyczności. Od kilku lat obserwujemy trend przechodzenia w stronę bardziej wyspecjalizowanych usług, takich jak transformation, orchestration, testing, UI itd. Integracja oddzielnych narzędzi może prowadzić do dostarczania lepszych danych klientowi i poprawy ogólnego doświadczenia. Nowoczesne podejście oznacza, że proces developmentu może być iteracyjny i przyrostowy, z pełną automatyzacją i continuous delivery.
W tym artykule użyjemy narzędzi:
- dbt
- re_data
- Airflow
jako przykładu budowy nowoczesnego pipeline do data transformation.
dbt
dbt to framework workflow do transformation dla data models. Modele są tworzone za pomocą SQL statements, które opisują transformacje i są wykonywane na docelowej platformie danych: BigQuery, Databricks, Postgres, Snowflake i wielu innych. Modele mogą być budowane z innych modeli, co prowadzi do powstania frameworka z gotowymi do użycia blokami. Ta modularna natura pozwala dzielić logikę na prostsze, mniejsze części, które można ponownie wykorzystać w różnych transformacjach. W porównaniu do tradycyjnych narzędzi nie musimy powtarzać złożonej logiki w wielu pipelines – często kopiowanej z pipeline do pipeline.

Kod dbt jest przechowywany w jednym miejscu (na repozytorium git), co zapewnia single source of truth. Możemy grupować data models w packages, wersjonować je i dodawać szczegółową dokumentację. Dokumentacja może być pisana w plain text lub markdown, aby opisać projekt, sources, kolumny modeli i więcej. Wygenerowana dokumentacja to prosta strona www z sekcjami i wykresami dla lepszej widoczności i zrozumienia projektu.

Każdy model może mieć testy wykonywane podczas developmentu i w runtime. Testy to pliki SQL, które mogą sprawdzać np. not null values, unique values lub reference (czy wartości id odpowiadają tym samym id w innym modelu). Testy w dbt działają jak unit tests w programowaniu – potwierdzają, że kod działa poprawnie i pozwalają na kontrolowane zmiany w modelach.

dbt jest dostępny w 2 wersjach:
- dbt core – open-source, narzędzie command line ze wszystkimi funkcjonalnościami transformation.
- dbt cloud – w zasadzie to dbt core, ale z cloud-based UI. UI oferuje dodatkowe funkcje jak metadata, automatyczne renderowanie dokumentacji, integrację z innymi narzędziami.
Podsumowując, praca z dbt pozwala użytkownikom skupić się na business logic podczas tworzenia data models, a framework zadba o execution order i tworzenie obiektów. Data models tworzą zaufane źródło dla raportowania, ML modeling czy innych pipelines. Modularne podejście z reusable data models ułatwia rozpoczęcie pracy z analizą danych – nie musimy budować pipeline „od zera”.


re_data
re_data to open-source framework rozszerzający dbt o testy i metryki ukierunkowane na data quality. To rozwiązanie umożliwia śledzenie zmian w danych, monitorowanie wyników, inspekcję data lineage i szczegółów projektu. Wszelkie wykryte anomalie mogą być wysyłane jako powiadomienia na Slack lub email.
Metryki oparte na czasie są zbierane dla monitorowanych tabel i mogą być rozszerzane przez użytkownika o własne kalkulacje. Wbudowane metryki to zestaw standardowych obliczeń na danych tabeli, takich jak row count, min value, max value, null count itd. Metryki mogą być później testowane w celu wykrycia problemów – re_data dostarcza bibliotekę gotowych asserts. Wszystkie wyniki testów są przechowywane i mogą być później analizowane w celu znalezienia problemów z danymi.

Wersja 2:
[Konfiguracja modelu dbt z testami re_data: schema.yml]
Dzięki re_data możemy także wygenerować UI z szczegółowymi informacjami:
- alerts z problemami z danymi lub zmianami w schema
- data lineage z dodatkowymi informacjami o anomaliach
- tests history
- tabele ze szczegółami metryk i testów powiązanych z nimi

Bardziej enterprise’owym rozwiązaniem jest re_cloud. To cloud-based solution, które może zintegrować wszystkie wyniki re_data w jednym miejscu. re_cloud może integrować się z wieloma rozwiązaniami jak: BigQuery, Redshift, Snowflake, dbt, GreatExpectations i więcej. Może być pojedynczym punktem monitoringu, gdzie użytkownicy z różnych zespołów mogą sprawdzać raporty i alerty.
Airflow
Airflow to narzędzie do orchestration napisane w pythonie. Ponieważ jest wysoce konfigurowalne (można dodawać własny kod python jako plugins), możemy dodać dowolną funkcjonalność, jakiej potrzebujemy. Dzięki Airflow możemy tworzyć processing workflows, które wykonują potrzebne kroki transformation w wybranym harmonogramie.

Podsumowanie
Kombinacja dbt, re_data i Airflow daje nam:
- Praca jest rozdzielona między wyspecjalizowane zespoły, z większą jasnością kto za co odpowiada
- Dane są wiarygodne dzięki business i data quality checks, wdrożonym z ciągłym monitoringiem i alertowaniem
- Narzędzia mogą być rozszerzane o inne „bloki” w razie potrzeby, np. można dodać GreatExpectations do testowania danych wejściowych
- Proces developmentu jest iteracyjny i przyrostowy, z odpowiednią kontrolą wersji
Stanowa vs. bezstanowa: co wybrać?