🎯 Definicja
Software-Defined Assets (SDA), czyli zasoby zdefiniowane programowo, to podejście do zarządzania danymi, w którym zasoby danych (tabele, modele, metryki) są deklarowane bezpośrednio w kodzie – jako funkcje w systemie orkiestracyjnym. Koncepcja została zaproponowana i zaimplementowana przez zespół Dagster, jako fundament deklaratywnej orkiestracji danych. SDA zapewniają pełne odwzorowanie pochodzenia danych (data lineage), reproducowalność i możliwość zarządzania przepływami danych przy pomocy wersjonowanego kodu.
🔑 Kluczowe punkty
- Deklaratywna definicja zasobów danych: opisanie, co ma istnieć, a nie jak to zbudować.
- Kod jako źródło prawdy (IaC dla danych): zasoby są zdefiniowane funkcjami z nazwami, opisem i kontrolą wersji.
- Orkiestracja oparta na danych, nie zadaniach: orchestrator rozumie, czym są dane, a nie tylko operacje na nich.
- Pełna inspekcyjność i kontrola lini dziedziczenia (lineage): widoczność związku między źródłami, modelem i konsumentami danych.
- Element nowoczesnych narzędzi orkiestracyjnych z „ciemną logiką” przeniesioną do warstwy semantycznej.
📚 Szczegółowe wyjaśnienie
Na czym polega różnica?
⛔️ W podejściu klasycznym (imperatywnym):
- Tworzysz DAG (np. w Airflow), który operuje na zadaniach – nie na konkretnych danych.
- Aby zrozumieć przepływ danych, trzeba analizować kod poszczególnych zadań i zależności.
✅ W Software-Defined Assets:
- Definiujesz dane jako wyjście funkcji — np.
@asset def customer_orders()
. - Każdy zasób ma ścisły input/output i nazwę stanowiącą element globalnego modelu danych.
- Dagster orkiestruje zależności między zasobami automatycznie na podstawie ich sygnatury.
Kluczowe właściwości SDA
Właściwość | Opis |
---|---|
Deklaratywność | Skupia się na co ma być osiągnięte – a nie jak to zrealizować. |
Izolacja i testowalność | Każdy asset to funkcja – można ją testować jednostkowo. |
Wersjonowalność | Każda zmiana definicji zasobu może być kontrolowana przez system VCS. |
Obserwowalna linia dziedziczenia | Orchestrator zna, skąd pochodzą dane i kto z nich korzysta. |
Aktywna kompozycja | SDA mogą być dowolnie łączone, organizowane i komponowane. |
Zastosowania
- Budowanie wersjonowalnych i testowalnych pipeline’ów o wysokiej przejrzystości.
- Orkiestracja zestawów danych z precyzyjnym modelem zależności: danych wejściowych, miar, modeli ML.
- Automatyczna dokumentacja i monitoring linii pochodzenia danych.
- Budowa warstwy semantycznej na assetach, np. Modele w dbt jako SDA w Dagsterze.
Integracja z paradygmatem funkcjonalnym
Zasoby SDA są blisko spokrewnione z ideą funkcjonalnej inżynierii danych:
- Funkcja deterministyczna, deklaratywna, bez efektów ubocznych → zasób danych.
- Zasób danych to wynik funkcji dla określonego zestawu danych wejściowych.
- Dzięki czystości i braku stanu, możliwa jest pełna automatyzacja testów, retry’ów i restartingów.
💡 Przykład zastosowania
Zespół danych buduje pipeline do generowania prognoz sprzedaży sklepowej. Korzystając z Dagstera i podejścia SDA:
- Definiują
raw_sales
jako zasób powstały z danych z API. clean_sales
to asset oczyszczający dane — przetwarzany jako funkcja zraw_sales
.forecast_model
otrzymuje daneclean_sales
oraz metadane kalendarzowe.- Wszystkie trzy funkcje/zasoby są zdefiniowane w kodzie DAG i wersjonowane w repozytorium Git.
Dagster buduje DAG automatycznie, raportuje szczelność lineage i oferuje view panel SDAs.
📌 Źródła
- Functional Data Engineering — Maxime Beauchemin
- Dagster Logic Overview
- Community Day Video 2023 – Dagster
- Trendy w Orkiestracji Danych – Airbyte Blog
👽 Brudnopis
- SDA = asset as function → czysto funkcyjne postrzeganie pipeline’u
- Dagster = orchestrator understands data, not just steps
- DRY, testowalność, modularność, lineage visibility
- zamiast: DAG 100 tasków → assety 1:1 jako funkcje
- powrót do danych, nie procesu: co, nie jak
- SDA x dbt: asset = model
- Przyszłość orkiestracji? Headless pipelines z semantyczną warstwą assetów jako API