ETL kontra nowoczesny ELT: dbt, Airbyte i Fivetran
Potoki danych to układ krążenia każdej architektury opartej na danych. Bez przepływu rzetelne, udokumentowane i przetestowane dane od źródła do magazynu, modele uczenia maszynowego generują nieprawidłowe prognozy, raporty biznesowe pokazują niespójne liczby i decyzje strategie opierają się na niestabilnych podstawach. Jednak w większości włoskich firm potoki danych to wciąż plątanina skryptów SQL zaplanowanych za pomocą cron i zaktualizowanych arkuszy Excela ręcznie i procesy ETL zbudowane kilkadziesiąt lat temu, których nikt nie odważy się dotknąć.
Krajobraz zmienił się radykalnie w ciągu ostatnich pięciu lat. Pojawienie się przetwarzania w chmurze spowodowało podstawowy paradygmat przepływu danych został obalony: przekształcanie danych nie ma już sensu Zanim załadować je do magazynu, tak jak miało to miejsce w przypadku tradycyjnego ETL, gdy plik Moc obliczeniowa w chmurze jest dostępna przy znikomych kosztach, a nowoczesny magazyn jest w stanie ją wykonać złożone transformacje w ciągu kilku sekund. W ten sposób narodził się paradygmat ELT (wyodrębnij, załaduj, Transformacja), co odwraca kolejność działań poprzez przesunięcie transformacji dentro sam magazyn.
Rynek potoków danych odzwierciedla tę transformację: segment ELT rośnie w tempie 26% rocznie, przy czym łączny rynek narzędzi do potoku danych szacuje się na ok 12 miliardów dolarów w 2024 r. i prognozuje się, że do 2030 r. wyniesie 48 miliardów dolarów. Fivetran, wiodący Aktor zarządzany przez ELT osiągnął 300 milionów dolarów ARR przy 50% wzroście rok do roku. To nie jest nisza: to nowy standard.
W tym artykule przyjrzymy się bliżej obu paradygmatom i przeanalizujemy dominujące narzędzia rynku (dbt, Airbyte, Fivetran) zbudujemy kompletną architekturę referencyjną oraz przedstawimy praktyczne zalecenia dotyczące wyboru odpowiedniego stosu w zależności od rozmiaru i umiejętności zespołowe.
Czego dowiesz się w tym artykule
- Podstawowe różnice pomiędzy tradycyjnym ETL i nowoczesnym ELT, z zaletami/wadami i przypadkami użycia
- Jak działa dbt (narzędzie do budowania danych): modele SQL, testowanie, dokumentacja, pochodzenie
- dbt Core vs dbt Cloud: który wybrać i za jaką cenę
- Airbyte: Złącza typu open source, architektura i wdrażanie do samodzielnego hostingu
- Fivetran: zarządzany model SaaS i nowy cennik MAR (2025)
- Szczegółowe porównanie trzech narzędzi dla różnych scenariuszy biznesowych
- Referencyjna nowoczesna architektura ELT: Airbyte/Fivetran + Warehouse + dbt + BI
- Najlepsze praktyki dotyczące testowania, dokumentacji i orkiestracji rurociągów
Tradycyjny ETL: jak to działa i dlaczego już nie wystarcza
Przez prawie trzydzieści latETL (wyodrębnij, przekształć, załaduj) to był paradygmat dominujący w przepływie danych korporacyjnych. Proces dzieli się na trzy kolejne fazy:
- Ekstrakt: Dane są zazwyczaj pobierane z systemów źródłowych Bazy danych OLTP (ERP, CRM, e-commerce), pliki płaskie (CSV, XML) czy zewnętrzne API. Ta faza brzmi danych bez ich modyfikacji.
- Przekształcać: Wyodrębnione dane są przekształcane w plik układ pośredni, zwany obszarem przejściowym lub silnikiem ETL, oddzielny od obu źródło i miejsce docelowe. Transformacje obejmują czyszczenie, normalizację, wzbogacanie, agregacja i zgodność ze standardami magazynowymi.
- Obciążenie: Przekształcone dane są ładowane do hurtowni danych miejsca docelowego. Struktura danych jest już ostateczna, zoptymalizowana pod kątem zapytań analitycznych.
Tradycyjne narzędzia ETL
| Instrument | Sprzedawca | Orientacyjny koszt | Cel |
|---|---|---|---|
| SSIS | Microsoftu | Zawarte w SQL Server | MŚP z ekosystemem Microsoft |
| Informatyka Power Center | Informatyka | 50 000–500 000 dolarów rocznie | Bankowość/ubezpieczenia dla przedsiębiorstw |
| Integrator Danych Oracle | Wyrocznia | W pakiecie z bazą danych Oracle | Ekosystem Oracle |
| Otwarte studio Talend | Qlik | Bezpłatnie (rdzeń) / 1170 USD+/miesiąc | MŚP, otwarte oprogramowanie |
| Integracja danych Pentaho | Hitachi Vantara | Bezpłatne (CE) / niestandardowe (EE) | MŚP, otwarte oprogramowanie |
Te narzędzia działają. Stanowiły (i w wielu przypadkach nadal są) szkielet systemów czynniki krytyczne, które każdego dnia obsługują miliardy euro transakcji. Ale mają ograniczenia strukturalne, które paradygmat chmury uwydatnia coraz bardziej.
Strukturalne ograniczenia klasycznego ETL
dlaczego tradycyjny ETL zmaga się we współczesnym kontekście
- Drogie zewnętrzne komputery: Transformacje odbywają się na oddzielnym serwerze (serwer ETL), który musi być dostosowany do obciążenia szczytowego. Jeśli nocna partia przetwarza 100 milionów wierszy, serwer musi być wystarczająco mocny, aby sobie z tym poradzić oknie czasowym, nawet jeśli pozostaje ono prawie nieaktywne przez 22 godziny na dobę.
- Sztywność i koszt zmian: Dodaj pole do transformacji SSIS wymaga modyfikacji przepływu wizualnego, przetestowania go w fazie testowej i koordynowania wydania z osobą zarządzającą magazynem docelowym. W zespołach zorganizowanych zajmuje to tygodnie.
- Brak wersjonowania natywnego: Przepływy ETL nie są testowalnym kodem i wersjonowalne, podobnie jak oprogramowanie aplikacyjne. Zarządzanie staje się trudne: kto się zmienił ta transformacja? Gdy? Dlaczego?
- Złożone debugowanie: Kiedy transformacja daje nieoczekiwane rezultaty, Śledzenie problemu za pomocą wizualnego przepływu ETL może zająć wiele godzin. Nie ma Standardowy „pochodzenie danych” pokazujący, skąd pochodzi każda kolumna.
- Marnowanie energii magazynowej: Inwestujesz w płatek śniegu lub BigQuery dziesiątki tysięcy euro rocznie za moc obliczeniową, ale potem się to udaje przetwarzać dane na oddzielnym serwerze. Paradygmat ELT uznaje, że sam magazyn i najbardziej wydajny silnik transformacji.
Nowoczesny ELT: dlaczego Chmura wszystko zmieniła
L'ELT (wyodrębnij, załaduj, przekształć) odwraca kolejność dwóch ostatnich faz: danych są one najpierw wydobywane ze źródeł i ładowane do magazynu w postaci surowej i wyłącznie następnie przekształcane przy wykorzystaniu mocy obliczeniowej samego magazynu.
Ta zmiana paradygmatu była możliwa dzięki trzem zbiegającym się czynnikom:
- Ekonomiczne przechowywanie w chmurze: Amazon S3, Azure Blob Storage i Google Cloud Storage kosztują 20–23 USD za TB miesięcznie. Oszczędne przechowywanie nie ma już sensu: lepiej załaduj wszystko i zdecyduj, co dalej przekształcić.
- Oblicz elastyczność: Snowflake, BigQuery, Databricks skalują się automatycznie komputer. Złożone zapytanie o transformację jest wykonywane w ciągu kilku sekund poprzez wykorzystanie klastry setek węzłów, płacąc tylko za rzeczywisty czas wykonania.
- SQL jako język uniwersalny: Analitycy danych znają SQL znacznie lepiej autorskich narzędzi ETL. W przypadku ELT transformacje są prostymi zapytaniami SQL, które każdy członek zespołu może czytać, edytować i recenzować.
Porównanie ETL i ELT: Tabela decyzyjna
ETL vs ELT: pełne porównanie
| Rozmiar | Tradycyjny ETL | Nowoczesne ELT |
|---|---|---|
| Gdzie następuje transformacja | Dedykowany serwer ETL (zewnętrzny w stosunku do magazynu) | Wewnątrz hurtowni danych (natywny SQL) |
| Kiedy dokonać transformacji | Przed załadowaniem | Po załadowaniu do warstwy surowej |
| Obsługiwana ilość danych | Ograniczone pojemnością serwera ETL | Skalowanie z magazynem (potencjalnie nieograniczone) |
| Dane nieustrukturyzowane | Trudne lub niemożliwe | Obsługiwane (natywny JSON, półstrukturalny) |
| Język | Zastrzeżony GUI / Java / Python | Standardowy SQL (+Jinja w dbt) |
| Wersjonowanie | Trudne, często nieobecne | Natywny Git (szablony to pliki .sql) |
| Testowanie | Ręczny lub ograniczony | Zintegrowany framework testowy (test dbt) |
| Pochodzenie daty | Często nieobecny lub ręczny | Automatyczny (wizualny DAG w dbt) |
| Bezpieczeństwo / Zgodność | Wrażliwe dane nigdy nie znajdują się w magazynie w sposób jawny | Surowe dane w hurtowni: potrzebne jest maskowanie i zarządzanie |
| Opóźnienie transformacji | To zależy od serwera ETL | Zależy od magazynu (partia lub na żądanie) |
| Krzywa uczenia się | Wysoki (zastrzeżony interfejs GUI) | Niski dla tych, którzy znają SQL |
| Idealny dla | Wrażliwe dane, starsze systemy, ścisła zgodność | Najpierw chmura, zespół SQL, duża ilość danych |
Kiedy wybrać ETL czy ELT
- Wybierz ETL, gdy: masz wymagania dotyczące zgodności, które zabraniają przesyłania surowe dane w chmurze (np. PII bez anonimizacji), praca ze starszymi systemami on-premise gdy magazyn jest zbyt daleko od źródła lub masz przekształcenia obliczeniowe intensywne, które nie korzystają z hurtowni SQL.
- Wybierz ELT, gdy: Twój magazyn i chmura (Snowflake, BigQuery, Databricks, Redshift), zespół ma solidne umiejętności SQL, chcesz wersjonować transformacje za pomocą Git, pracujesz z rosnącymi wolumenami danych i chcesz skorzystać z elastyczności chmury.
- Podejście hybrydowe: Wiele firm stosuje podejście mieszane: ETL dla anonimizacja wrażliwych danych przed załadowaniem, ELT dla wszystkich transformacji kolejne analizy.
dbt: Nowoczesna warstwa transformacji stosu
dbt (narzędzie do tworzenia danych) oraz narzędzie, które zdefiniowało nowoczesny paradygmat ELT. Stworzony przez dbt Labs w 2016 roku, dbt zmienia sposób, w jaki analitycy danych zapisują transformacje: zamiast rzadkich, pozbawionych struktury procedur SQL, dbt wprowadza inspirującą platformę programistyczną po inżynierię oprogramowania, z wersjonowanymi modelami, automatycznymi testami i wygenerowaną dokumentacją automatycznie.
Podstawowa i prosta koncepcja: każdy dbt i plik .sql który zawiera WYBIERZ. dbt zajmuje się tworzeniem tabeli lub widoku w magazynie, zarządzaniem zależnościami pomiędzy modelami i zbudować DAG (Skierowany Graf Acykliczny) transformacji.
Architektura Dbt: jak to działa
dbt nie ma własnego środowiska wykonawczego obliczeń: korzysta z obliczeń magazynu docelowego. To działa jak Kompilator SQL + orkiestrator: pobiera pliki .sql Makra Jinja, kompiluje je do czystego SQL i uruchamia je w magazynie we właściwej kolejności na zadeklarowanych zależnościach. Efektem jest skonstruowany szereg tabel i widoków w magazynie powtarzalnie.
-- models/staging/stg_orders.sql
-- Modello di staging: pulizia e standardizzazione degli ordini
-- dbt crea una view (o tabella) chiamata 'stg_orders' nel warehouse
WITH source AS (
-- Riferimento alla tabella sorgente raw (caricata da Airbyte/Fivetran)
SELECT * FROM {{ source('erp', 'raw_orders') }}
),
cleaned AS (
SELECT
order_id::BIGINT AS order_id,
customer_id::INT AS customer_id,
product_id::INT AS product_id,
quantity::INT AS quantity,
unit_price::DECIMAL(10, 2) AS unit_price,
COALESCE(discount, 0.0)::DECIMAL(5, 2) AS discount,
CAST(order_date AS TIMESTAMP) AS order_date,
LOWER(TRIM(status)) AS status,
-- Importo netto calcolato
quantity * unit_price * (1 - COALESCE(discount, 0))
AS net_amount,
-- Metadati di audit
_loaded_at AS ingested_at
FROM source
WHERE order_id IS NOT NULL
AND customer_id IS NOT NULL
AND quantity > 0
AND unit_price > 0
)
SELECT * FROM cleaned
-- models/marts/finance/fct_orders_monthly.sql
-- Modello fatto: aggregazione mensile per il team finance
-- Dipende da stg_orders e dim_customers (risoluzione automatica dipendenze)
{{ config(
materialized='table',
schema='finance',
tags=['finance', 'monthly']
) }}
WITH orders AS (
SELECT * FROM {{ ref('stg_orders') }}
),
customers AS (
SELECT * FROM {{ ref('dim_customers') }}
),
monthly_metrics AS (
SELECT
DATE_TRUNC('month', o.order_date) AS month,
c.region,
c.segment,
COUNT(DISTINCT o.order_id) AS total_orders,
COUNT(DISTINCT o.customer_id) AS unique_customers,
SUM(o.net_amount) AS gross_revenue,
AVG(o.net_amount) AS avg_order_value,
SUM(o.quantity) AS units_sold
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.customer_id
GROUP BY 1, 2, 3
)
SELECT
*,
gross_revenue / NULLIF(unique_customers, 0) AS revenue_per_customer
FROM monthly_metrics
ORDER BY month DESC, gross_revenue DESC
Testowanie w dbt: Zapewnienie jakości danych
Jedną z najważniejszych zalet dbt jest natywny system testowania. Testy w dbt
są deklaratywne: są zdefiniowane w pliku YAML i są wykonywane automatycznie po każdym
uruchom za pomocą polecenia dbt test.
# models/staging/schema.yml
# Definizione dei test per il modello stg_orders
version: 2
models:
- name: stg_orders
description: >
Ordini puliti e standardizzati dal sistema ERP sorgente.
Caricati ogni ora da Airbyte, trasformati da questo modello.
columns:
- name: order_id
description: "Identificativo univoco dell'ordine (PK)"
tests:
- unique # Nessun duplicato ammesso
- not_null # Ogni riga deve avere un order_id
- name: customer_id
description: "Riferimento alla dimensione clienti"
tests:
- not_null
- relationships: # Referential integrity check
to: ref('dim_customers')
field: customer_id
- name: status
description: "Stato dell'ordine"
tests:
- accepted_values:
values: ['pending', 'confirmed', 'shipped', 'delivered', 'cancelled']
- name: net_amount
description: "Importo netto dell'ordine (quantità * prezzo * (1 - sconto))"
tests:
- not_null
- dbt_utils.expression_is_true:
expression: "net_amount >= 0"
- name: order_date
description: "Data e ora dell'ordine"
tests:
- not_null
- dbt_utils.expression_is_true:
expression: "order_date <= CURRENT_TIMESTAMP"
- name: fct_orders_monthly
description: "Aggregazioni mensili per il reporting finance"
columns:
- name: month
tests:
- not_null
- name: gross_revenue
tests:
- not_null
- dbt_utils.expression_is_true:
expression: "gross_revenue >= 0"
sources:
- name: erp
description: "Dati grezzi caricati dall'ERP tramite Airbyte"
schema: raw_erp
tables:
- name: raw_orders
loaded_at_field: _loaded_at
freshness:
warn_after: {count: 12, period: hour}
error_after: {count: 24, period: hour}
dbt Core kontra dbt Cloud
dbt występuje w dwóch wariantach: dbt rdzeń (otwarte źródło, bezpłatne) e Chmura dbt (Zarządzany SaaS, płatny). Wybór zależy od Twoich potrzeb zespołu pod względem infrastruktury i zaawansowanej funkcjonalności.
dbt Core vs dbt Cloud: pełne porównanie
| Funkcjonalność | dbt Core (otwarte oprogramowanie) | Zespół dbt Cloud | dbt Cloud Enterprise |
|---|---|---|---|
| Koszt | Bezpłatny | 100 USD/miejsce/miesiąc + 0,01 USD dla modeli powyżej 15 000 lat | Niestandardowe (skontaktuj się z działem sprzedaży) |
| Wykonanie zadania | Ręczny / Zewnętrzny Orchestrator (Airflow, Dagster) | Natywny harmonogram, zintegrowany CI/CD | Zaawansowany harmonogram + monitorowanie SLA |
| Internetowe IDE | Nie (tylko redaktor lokalny) | dbt Cloud IDE (oparte na przeglądarce) | dbt Cloud IDE |
| Dokumentacja | Wygenerowane lokalnie (generowanie dokumentów dbt) | Hostowane automatycznie | Hostowany + zaawansowany katalog danych |
| Wizualny rodowód | Lokalny | Hostowane w chmurze, możliwe do udostępnienia | Hostowane w chmurze + linia międzyprojektowa |
| Współpraca zespołowa | Przez Git (podręcznik) | Przepływ pracy oparty na PR dla wielu użytkowników | RBAC, SSO, dzienniki audytu |
| Warstwa semantyczna | No | Uwzględnione (5000 metryk/miesiąc) | Uwzględnione (20 000 metryk/miesiąc) |
| dbt siatka | No | Ograniczony | Ukończono (referencje między projektami) |
| Zgodność z SOC 2 | Nie dotyczy (samodzielnie zarządzane) | Dołączony | W zestawie + PrivateLink |
| Idealny dla | Zespoły techniczne, ograniczony budżet, mają już Airflow | Zespół 2-20 osób bez infrastruktury ETL | Przedsiębiorstwo, wielozespołowość, ścisła zgodność |
Praktyczna rekomendacja: powinny zacząć włoskie MŚP z zespołem 1-3 inżynierów danych z dbt Core + Airflow lub Dagster, który zapewnia pełną elastyczność bez żadnych kosztów. Jeśli Twój zespół się powiększa lub chcesz uniknąć zarządzania infrastrukturą orkiestracyjną, Chmura dbt staje się to wygodne już przy 2-3 stanowiskach programistycznych.
Airbyte: warstwa przetwarzania typu open source
Jeśli dbt zajmuje się T (transformacja) w ELT, Airbytes zarządza the E (ekstrakcja) i L (załadunek). Założona w 2020 roku i dziś z nie tylko Fundusze o wartości 180 milionów dolarów, Airbyte i najszerzej przyjęta platforma integracji danych typu open source rynku, z Ponad 600 gotowych złączy i Python SDK do zbudowania niestandardowe złącza.
Główną siłą Airbyte nad konkurentami jest połączenie otwarte źródło (zero dostawców, kod modyfikowalny) z architekturą natywny dla chmury, który obsługuje funkcję Change Data Capture (CDC) w celu replikacji bazy danych w czasie rzeczywistym.
Architektura Airbyte'a
Airbyte składa się z kilku współpracujących ze sobą komponentów. Nadchodzi każda synchronizacja w wykonaniu A Pracownicy który tworzy instancję dwóch oddzielnych kontenerów Docker: Złącze źródłowe (co czytamy ze źródła) i Miejsce docelowe Złącze (który zapisuje do miejsca docelowego). Dane przepływają między nimi poprzez ja Protokół Airbyte’a, standardowy format JSON.
# Esempio: Configurazione connettore Airbyte via API (YAML/JSON)
# Creazione di una connessione PostgreSQL -> Snowflake
# 1. Configurazione Source (PostgreSQL)
POST /api/v1/sources/create
{
"sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750",
"connectionConfiguration": {
"host": "db.produzione.miazienda.it",
"port": 5432,
"database": "erp_production",
"username": "airbyte_reader",
"password": "{{ secrets.POSTGRES_PASSWORD }}",
"schemas": ["public", "orders"],
"replication_method": {
"method": "CDC",
"replication_slot": "airbyte_slot",
"publication": "airbyte_publication"
}
},
"name": "ERP Production PostgreSQL",
"workspaceId": "workspace-uuid"
}
# 2. Configurazione Destination (Snowflake)
POST /api/v1/destinations/create
{
"destinationDefinitionId": "424892c4-daac-4491-b35d-c6688ba547ba",
"connectionConfiguration": {
"host": "abc12345.eu-west-1.snowflakecomputing.com",
"role": "AIRBYTE_ROLE",
"warehouse": "AIRBYTE_WH",
"database": "RAW_DATA",
"schema": "erp",
"username": "airbyte_user",
"credentials": {
"auth_type": "key_pair",
"private_key": "{{ secrets.SNOWFLAKE_PRIVATE_KEY }}"
}
},
"name": "Snowflake Production",
"workspaceId": "workspace-uuid"
}
# 3. Creazione della connessione
POST /api/v1/connections/create
{
"sourceId": "source-uuid",
"destinationId": "destination-uuid",
"syncCatalog": {
"streams": [
{
"stream": {"name": "orders", "namespace": "public"},
"config": {
"syncMode": "incremental",
"destinationSyncMode": "append_dedup",
"cursorField": ["updated_at"],
"primaryKey": [["order_id"]]
}
},
{
"stream": {"name": "customers", "namespace": "public"},
"config": {
"syncMode": "full_refresh",
"destinationSyncMode": "overwrite"
}
}
]
},
"scheduleType": "cron",
"scheduleData": {"cron": {"cronExpression": "0 */1 * * *", "cronTimeZone": "Europe/Rome"}},
"namespaceDefinition": "customformat",
"namespaceFormat": "raw_{{SOURCE_NAMESPACE}}"
}
Airbyte: Opcje wdrażania
Airbyte oferuje trzy tryby wdrażania, każdy o innej charakterystyce koszty, kontrola i konserwacja:
Airbyte: Open Source vs Cloud vs Enterprise
| Czekam | Open Source (własny hosting) | Chmura Airbyte'a | Przedsiębiorstwo Airbyte |
|---|---|---|---|
| Koszt | Bezpłatnie (infrastruktura na Twój koszt) | Płatność za użycie (2,50–10 USD za kredyt) | Niestandardowe (skontaktuj się z działem sprzedaży) |
| Konserwacja | Opłacane przez zespół | Obsługiwane przez Airbyte | Obsługiwane przez Airbyte |
| Złącza | 600+ | 600+ | Złącza z certyfikatem premium 600++ |
| CDC | Utrzymany | Utrzymany | Obsługiwane + zaawansowane CDC |
| RBAC | Podstawowy | Dołączony | Zaawansowane (SSO, dzienniki audytu) |
| stwardnienie zanikowe boczne (ALS). | Nie dotyczy | Czas sprawności na poziomie 99,9%. | Czas sprawności na poziomie 99,99%. |
| Idealny dla | Zespoły techniczne, ograniczony budżet, wrażliwe dane | MŚP, które chcą szybkości bez operacji | Przedsiębiorstwo ze ścisłym przestrzeganiem |
# Deploy Airbyte Open Source con Docker Compose
# Prerequisiti: Docker, Docker Compose, 8GB RAM, 20GB disk
# 1. Clona il repository
git clone --depth=1 https://github.com/airbytehq/airbyte.git
cd airbyte
# 2. Avvia Airbyte (prima esecuzione: ~15 minuti per download immagini)
./run-ab-platform.sh
# Airbyte e accessibile su http://localhost:8000
# Username: airbyte / Password: password (da cambiare in produzione!)
# 3. Per deployment in produzione su Kubernetes con Helm
helm repo add airbyte https://airbytehq.github.io/helm-charts
helm install airbyte airbyte/airbyte \
--namespace airbyte \
--create-namespace \
--set global.state.storage.type=MINIO \
--set global.storage.bucket.log=airbyte-logs \
--values custom-values.yaml
# 4. Configurazione variabili di ambiente per produzione (.env)
# DATABASE_URL=postgresql://airbyte:password@postgres:5432/airbyte
# SECRET_PERSISTENCE=GOOGLE_SECRET_MANAGER
# LOG_LEVEL=INFO
# TRACKING_STRATEGY=segment
Fivetran: prostota zarządzanego SaaS
Podczas gdy Airbyte koncentruje się na elastyczności i kontroli open source, Pięćtran wybrał odwrotną ścieżkę: maksymalna prostota, zero konserwacji, złącza klasy korporacyjnej całkowicie zarządzane przez dostawcę. Założona w 2012 roku firma Fivetran jest dziś liderem w swoim segmencie ELT zarządzała firmą z ARR o wartości 300 milionów dolarów, ponad 6300 klientami i wyceną na poziomie 5,6 miliarda dolarów.
Propozycja wartości Fivetran jest jasna: połączenie Fivetran z Salesforce i Shopify lub inny system SaaS jest utrzymywany przez dedykowany zespół inżynierów Fivetran, którzy zarządzają każdą zmianą w źródłowym API, każdą przełomową zmianą, każdą aktualizacją schemat. Klient nie musi nic robić.
Nowy model cenowy Fivetran na rok 2025
W marcu 2025 roku Fivetran znacząco zaktualizował swój model cenowy. Plany Starter i Private Deployment zostały wyeliminowane i zastąpione czterema poziomami: Bezpłatne, standardowe, korporacyjne i krytyczne dla biznesu. Metryka rozliczeniowa pozostaje MAR (miesięczne aktywne wiersze), ale obliczenia uległy zmianie: teraz co połączenie jest rozliczane osobno, nie jest już sumowane według konta.
Fivetran: plany i ceny 2025
| Podłoga | WT wliczone w cenę | Dodatkowy koszt | Kluczowe funkcje |
|---|---|---|---|
| Bezpłatny | 500 000 MAR/miesiąc | Nie dotyczy | Wszystkie funkcje standardowe, do 5000 serii modeli |
| Standard | Nieograniczony (płatność za użycie) | 5 USD za usługę podstawową/połączenie + cena MAR | Ponad 600 złączy, CDC, integracja dbt, planowanie |
| Przedsiębiorstwo | Zbywalny | Niestandardowe (rabat ilościowy) | SSO/SAML, RBAC, VPN, wsparcie priorytetowe, SLA |
| Krytyczny biznesowy | Zbywalny | Zwyczaj | PrivateLink, zgodność z HIPAA, dedykowane wsparcie, 99,99% SLA |
Jak działają obliczenia MAR w Fivetran
MAR (Miesięczny aktywny wiersz) zlicza wiersze odrębny synchronizacja w ciągu miesiąca kalendarz, śledzony za pomocą klucza podstawowego. Wiersz edytowany 30 razy w miesiącu liczy się jako 1 MAR, a nie jako 30. Korzyść: Koszt nie eksploduje wraz z częstotliwością synchronizacji, ale przy zmianie liczby unikalnych rekordów.
Praktyczny przykład: Firma z 50 000 aktywnych zamówień miesięcznie i 500 000 produktów w katalogu (rzadko aktualizowanym) płaci głównie za 50 000 zamówienia zmieniające status co miesiąc, a nie na cały katalog produktów.
dbt vs Airbyte vs Fivetran: który wybrać?
Ważne jest, aby zrozumieć, że dbt, Airbyte i Fivetran nie są narzędziami alternatywnymi wzajemnie się wykluczają: rozwiązują różne problemy w ramach tego samego stosu. tak zajmuje się transformacjami, Airbyte i Fivetran zajmują się przetwarzaniem. Pytanie poprawne i: Airbyte vs Fivetran do spożycia?
Airbyte vs Fivetran: porównanie według scenariuszy
| Rozmiar | Otwarte oprogramowanie Airbyte | Chmura Airbyte'a | Standard Fivetrana |
|---|---|---|---|
| Podstawowy koszt | 0 USD (bez infrastruktury) | Płać za użycie | 5 USD/połączenie/miesiąc + TUE |
| Złącza | 600+ (utrzymywane przez społeczność) | 600+ | 650+ (klasa korporacyjna) |
| Konserwacja złącza | Społeczność / zespół wewnętrzny | Zespół Airbyte'a | Zespół Fivetran (gwarantowane SLA) |
| CDC | Obsługiwane (debezium) | Utrzymany | Obsługiwane (oparte na logach) |
| Niestandardowe złącza | SDK Pythona (bezpłatny) | SDK Pythona | Niestandardowy pakiet SDK łącznika (płatny) |
| Data pobytu | Kompletny (własny hosting) | Specyficzne dla regionu | Specyficzne dla regionu |
| Czas konfiguracji | 1-4 godziny (infrastruktura) | 30 minut | 15 minut |
| integracja dbt | Ręczny/przepływ powietrza | Rodzinny | Natywny (chmura dbt) |
| Idealny dla | Zespoły techniczne, źródła niestandardowe, lokalne RODO | Zaawansowane technologicznie MŚP, zmienny budżet | MŚP/przedsiębiorstwa ze standardowymi źródłami SaaS |
Praktyczna zasada wyboru
- Użyj Fivetrana jeśli Twoje źródła to standardowy SaaS (Salesforce, HubSpot, Shopify, Stripe, Google Analytics, Facebook Ads), z którymi zespół nie chce się uporać konserwacja złącza. Uzyskana produktywność jest warta swojej ceny.
- Skorzystaj z chmury Airbyte jeśli masz mieszankę źródeł standardowych i niestandardowych, lub jeśli zaczynasz i chcesz kontrolować koszty dzięki płatności za użycie.
- Skorzystaj z otwartego oprogramowania Airbyte jeśli masz wymagania dotyczące RODO/rezydencji danych zapobiegać przesyłaniu danych przez infrastrukturę stron trzecich lub jeśli tak jest wysoce niestandardowe źródła, które wymagają wewnętrznie napisanych złączy.
Nowoczesna architektura referencyjna ELT
Łącząc wszystkie komponenty, jest to nowoczesna architektura ELT stosowana przez wiodące firmy dzisiaj. Każda warstwa stosu ma określony cel i narzędzia odniesienia.
Nowoczesny stos ELT: warstwa po warstwie
| Warstwy | Funkcjonować | Główne narzędzia |
|---|---|---|
| 1. Połknięcie | Wyodrębnij i załaduj surowe dane do hurtowni | Fivetran, Airbyte, Stitch, niestandardowe skrypty |
| 2. Przechowywanie (surowe) | Niemodyfikowane surowe dane (warstwa brązu) | Płatek śniegu, BigQuery, kostki danych, przesunięcie ku czerwieni |
| 3. Transformacja | Modele SQL, testowanie, dokumentacja, pochodzenie | rdzeń dbt, chmura dbt |
| 4. Porcja (złoto) | Tabele zoptymalizowane pod kątem analityki i ML | Płatek śniegu, BigQuery, Databricks (magazyn) |
| 5. Orkiestracja | Harmonogramowanie, zależności, potok monitorowania | Przepływ powietrza, Dagster, Prefekt, dbt Cloud |
| 6. BI i raportowanie | Pulpity nawigacyjne, zapytania ad hoc, analityka samoobsługowa | Looker, Metabaza, Power BI, Tableau |
| 7. Jakość danych | Monitorowanie, alarmowanie, wykrywanie anomalii | testy dbt, Wielkie nadzieje, Monte Carlo |
# Esempio: Pipeline ELT completa orchestrata con Dagster
# Dagster definisce i job come grafo di asset
from dagster import asset, AssetIn, define_asset_job, ScheduleDefinition
# Asset 1: Raw data (caricato da Fivetran/Airbyte - esterno a Dagster)
# Dagster può "osservare" le tabelle caricate da Fivetran come asset esterni
@asset(
group_name="raw",
description="Ordini grezzi caricati da Fivetran (ERP)"
)
def raw_orders():
# Fivetran scrive qui automaticamente ogni ora
# Questo asset "dichiara" la tabella per il lineage visuale
pass
# Asset 2: dbt staging (trasformazione con dbt)
@asset(
group_name="staging",
deps=["raw_orders"],
description="Ordini puliti e standardizzati (modello dbt stg_orders)"
)
def stg_orders(context):
# Esegue il modello dbt stg_orders
context.log.info("Running dbt model: stg_orders")
# In pratica: dbt_cloud_run_op o subprocess dbt run --select stg_orders
return {"rows_processed": 15000}
# Asset 3: dbt marts (modello gold pronto per il business)
@asset(
group_name="marts",
ins={"staging": AssetIn("stg_orders")},
description="Fatturato mensile per il reporting finance"
)
def fct_orders_monthly(context, staging):
context.log.info(f"Building monthly metrics from {staging['rows_processed']} rows")
# dbt run --select fct_orders_monthly
return {"mart_rows": 360} # 30 giorni * 12 segmenti regionali
# Scheduling: esegue ogni ora, aggiorna tutti gli asset
elt_pipeline_job = define_asset_job(
name="elt_pipeline",
selection=["stg_orders", "fct_orders_monthly"]
)
elt_schedule = ScheduleDefinition(
job=elt_pipeline_job,
cron_schedule="0 * * * *", # Ogni ora
execution_timezone="Europe/Rome"
)
Najlepsze praktyki dotyczące wiarygodnych potoków danych
Budowanie potoku ELT, który działa w wersji demonstracyjnej i jest prosty. Zbuduj taki rurociąg skalowalne, możliwe do monitorowania i utrzymywania przez zespół w miarę upływu czasu wymaga dyscypliny i zastosowanie ustalonych praktyk inżynierskich.
1. Konwencja stratyfikacji i nazewnictwa
Przyjmij jasną i spójną strukturę katalogów dbt, która odzwierciedla architekturę wielopoziomowy (medalion lub odpowiednik):
# Struttura di progetto dbt raccomandata
dbt_project/
├── models/
│ ├── staging/ # Layer Silver: pulizia sorgenti
│ │ ├── erp/
│ │ │ ├── stg_orders.sql
│ │ │ ├── stg_customers.sql
│ │ │ └── schema.yml # Test + documentazione
│ │ ├── crm/
│ │ │ ├── stg_contacts.sql
│ │ │ └── schema.yml
│ │ └── ecommerce/
│ │ ├── stg_sessions.sql
│ │ └── schema.yml
│ ├── intermediate/ # Modelli intermedi (join complesse)
│ │ ├── int_customer_orders.sql
│ │ └── schema.yml
│ └── marts/ # Layer Gold: pronti per il business
│ ├── finance/
│ │ ├── fct_orders_monthly.sql
│ │ ├── fct_revenue_by_product.sql
│ │ └── schema.yml
│ ├── marketing/
│ │ ├── fct_campaign_performance.sql
│ │ └── schema.yml
│ └── operations/
│ ├── fct_fulfillment_kpis.sql
│ └── schema.yml
├── seeds/ # Dati statici (tabelle di lookup, mapping)
│ ├── country_codes.csv
│ └── product_categories.csv
├── snapshots/ # SCD Type 2 (Slowly Changing Dimensions)
│ └── snap_customers.sql
├── tests/ # Test custom SQL
│ └── assert_revenue_positive.sql
├── macros/ # Macro Jinja riutilizzabili
│ ├── generate_schema_name.sql
│ └── audit_columns.sql
└── dbt_project.yml # Configurazione globale
2. Testowanie jako umowa jakości
Testy DBT nie są opcjonalne: są umową gwarantującą dokonanie transformacji produkować wiarygodne dane. Każdy model powinien mieć przynajmniej te testy:
- unikalny + not_null na kluczu podstawowym: Gwarantuje integralność każdego modelu.
- relacje: Sprawdza integralność referencyjną pomiędzy modelami.
- akceptowane_wartości: Sprawdź, czy pola kategoryczne zawierają tylko prawidłowe wartości.
- świeżość u źródła: Ostrzegaj, jeśli dane nie zostaną zaktualizowane zgodnie z harmonogramem.
- dbt_utils.expression_is_true: W przypadku ograniczeń specyficznych dla danej działalności (np. przychody >= 0).
3. Wersjonowanie i CI/CD dla potoków danych
# .github/workflows/dbt-ci.yml
# CI/CD per validare i modelli dbt a ogni PR
name: dbt CI Pipeline
on:
pull_request:
branches: [main]
paths:
- 'dbt_project/**'
jobs:
dbt-lint-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dbt
run: |
pip install dbt-snowflake==1.8.0
pip install sqlfluff==3.0.0
- name: dbt debug (connection test)
run: dbt debug
env:
DBT_SNOWFLAKE_ACCOUNT: {{ secrets.SNOWFLAKE_ACCOUNT }}
DBT_SNOWFLAKE_USER: {{ secrets.SNOWFLAKE_USER }}
DBT_SNOWFLAKE_PASSWORD: {{ secrets.SNOWFLAKE_PASSWORD }}
DBT_SNOWFLAKE_DATABASE: DBT_CI_DB
DBT_SNOWFLAKE_SCHEMA: CI_{{ github.event.pull_request.number }}
- name: sqlfluff lint (SQL style check)
run: sqlfluff lint models/ --dialect snowflake
- name: dbt compile (syntax check)
run: dbt compile
- name: dbt run (solo modelli modificati)
run: dbt run --select state:modified+
env:
DBT_DEFER_TO_PROD: true
- name: dbt test (test sui modelli modificati)
run: dbt test --select state:modified+
- name: dbt docs generate
run: dbt docs generate
- name: Cleanup CI schema
if: always()
run: dbt run-operation drop_schema --args '{"schema": "CI_{{ github.event.pull_request.number }}"}'
4. Monitorowanie świeżości danych
Uszkodzony rurociąg ELT, o którym nikt nie wie, że jest uszkodzony, jest gorszy niż brak rurociągu. Proaktywne monitorowanie świeżości danych musi być integralną częścią stosu:
Anty-wzorce, których należy unikać w rurociągach ELT
- Modele bez testów: Model dbt bez co najmniej jednego unikalnego testu + not_null i bomba zegarowa. Wcześniej czy później wygeneruje zduplikowane lub zerowe dane, które unieważnią raporty.
- Brak schema.yml: bez dokumentacji stają się modelami niezrozumiałe dla każdego, kto ich nie napisał, łącznie z ich autorem po 6 miesiącach.
- Pełne odświeżanie zawsze: Zamiast tego zawsze ładuj ponownie całą tabelę wykonywanie przyrostowego dołączania/upsertowania jest kosztowne i delikatne w przypadku dużych zbiorów danych.
- Logika biznesowa w warstwie pomostowej: Inscenizacja wymaga jedynie oczyszczenia i standaryzować. Agregacje i logika biznesowa trafiają na rynek. Wymieszaj warstwy tworzy zależności, którymi trudno zarządzać.
- Ignorując linię dat: Gdy w raporcie widnieje błędna liczba, bez udokumentowanego śledzenia pochodzenia problem zajmuje godziny. Dzięki dbt docs dotrzesz tam do źródła za pomocą kilku kliknięć.
- Brak alertów dotyczących świeżości: Jeśli Fivetran przestanie synchronizować w nocy i nikt tego nie monitoruje, poranne raporty pokażą dane z wczoraj bez żadne ostrzeżenie nie jest widoczne dla użytkowników biznesowych.
Zalecenia dla włoskich MŚP
Krajobraz potoków danych może wydawać się przytłaczający dla włoskiego MŚP ograniczone zasoby i małe zespoły. Dobra wiadomość jest taka, że nie musisz przejmować całego stosu na raz. Oto progresywna ścieżka w trzech fazach:
Ścieżka wdrożenia dla MŚP (3 fazy)
| Faza | Oś czasu | Polecany stos | Orientacyjny koszt miesięczny |
|---|---|---|---|
| Faza 1: Fundacja | Miesiąc 1-3 | Bezpłatny Fivetran + piaskownica BigQuery + rdzeń dbt | 0 € - 200 € |
| Faza 2: Produkcja | Miesiąc 4-9 | Fivetran Standard + Snowflake/BigQuery + dbt Core + Zarządzanie przepływem powietrza | 800 € - 3000 € |
| Faza 3: Schody | Miesiąc 10+ | Fivetran Enterprise + Snowflake + dbt Cloud + Dagster Cloud | 3000 € - 15 000 € |
Faza 1 - Podstawa: Zacznij korzystać z bezpłatnego planu Fivetran (500 000 MAR/miesiąc) połączyć 2-3 źródła krytyczne (ERP, CRM, e-commerce). Użyj BigQuery w wersji sandbox (bezpłatne do 10 GB przestrzeni dyskowej + 1 TB zapytań/miesiąc). Zainstaluj dbt Core lokalnie i napisz pierwsze 10-15 wzorów. Celem jest nauczenie się wzorców i wykazanie wartości do przedsiębiorstwa bez inwestycji początkowej.
Faza 2 – Produkcja: Kiedy PoC wykazał wartość, przeskaluj do Fivetran Standard do zarządzania wieloma konektorami, przenieś się do magazynu w chmurze z SLA (produkcja Snowflake lub BigQuery) i dodaj orkiestrację za pomocą zarządzanego przepływu powietrza (Cloud Composer na GCP lub MWAA na AWS). Miesięczny koszt jest niski, a wpływ na biznesie i mierzalne.
Faza 3 – Schody: Kiedy zespół zajmujący się danymi powiększy się do 3-5 osób, to się opłaca dodaj dbt Cloud do współpracy IDE i automatycznego CI/CD oraz Dagster Cloud do bardziej wyrafinowana orkiestracja z obserwowalnością. W tym momencie rurociąg staje się strategiczny zasób korporacyjny zarządzany zgodnie z profesjonalnymi standardami inżynieryjnymi.
Wnioski i dalsze kroki
Ewolucja od ETL do ELT to nie tylko zmiana kolejności liter: to jedna fundamentalna zmiana w sposobie projektowania, rozwijania i konserwacji rurociągów dane firmy. Chmura sprawiła, że przetwarzanie danych stało się elastyczne i wygodne, przez co stało się przestarzałe wstępne załadowanie modelu transformacji na serwery dedykowane.
Nowoczesny stos magazynowy dbt + Airbyte/Fivetran + w chmurze reprezentuje najnowocześniejszy stan wiedzy roku 2025 i jest stosowany przez tysiące firm, od start-upów po listę Fortune 500. Konkretne korzyści są wymierne: możliwość wersjonowania potoków jako kodu, automatyczne testy które gwarantują jakość automatycznie generowanych danych, dokumentacji i pochodzenia, i skalowalne koszty, które rosną wraz z firmą, zamiast wymagać inwestycji z góry.
Kluczowe punkty do zapamiętania
- ETL nie umarł: nadal ma to sens w przypadku wrażliwych danych, które nie muszą przesyłaj dane w formie niezaszyfrowanej do chmury lub do lokalnych źródeł, przy czym wymagane jest małe opóźnienie.
- ELT i nowy standard w przypadku architektur opartych na chmurze: ładuj wszystko w stanie surowym, przekształcaj tam, gdzie masz najwięcej władzy (magazyn).
- db oraz warstwa transformacji: przynosi najlepsze praktyki inżynierii oprogramowania (wersjonowanie, testowanie, dokumentacja) do świata SQL.
- Airbytes oraz wybór oprogramowania typu open source dla zespołów technicznych z niestandardowymi źródłami lub wymogi dotyczące przechowywania danych zgodnie z RODO.
- Pięćtran oraz zarządzany wybór dla tych, którzy chcą zerowej konserwacji swoich urządzeń łączniki do standardowych źródeł SaaS (Salesforce, HubSpot, Shopify itp.).
- Dla włoskich MŚP: zacznij od Fivetran Free + BigQuery + dbt Core w celu sprawdzenia wartości przed inwestycją w kompletną infrastrukturę.
Następny artykuł z serii poświęcony jest temu tematowiorkiestracja rurociągów: Porównanie przepływu powietrza, Dagstera i Prefecta. Jeśli dbt jest silnikiem transformacji, a Airbyte/Fivetran są systemem przyjmowania, koordynatorem i mózgiem, który wszystko koordynuje: kto co robi, kiedy, w jakiej kolejności i co zrobić, gdy coś pójdzie nie tak. Kluczowy element, który na to zasługuje dedykowaną dyskusję.
Ćwiczenie praktyczne: konfiguracja rdzenia dbt w 30 minut
Zanim przejdziesz do następnego artykułu, spróbuj skonfigurować dbt Core na magazynie istniejąca (również darmowa piaskownica BigQuery):
# 1. Installa dbt con il profilo per il tuo warehouse
pip install dbt-bigquery # per BigQuery
# oppure: pip install dbt-snowflake, dbt-redshift, dbt-duckdb
# 2. Crea un nuovo progetto dbt
dbt init mio_progetto_dbt
# 3. Configura il profilo (~/.dbt/profiles.yml per BigQuery)
# mio_progetto_dbt:
# target: dev
# outputs:
# dev:
# type: bigquery
# method: oauth
# project: mio-progetto-gcp
# dataset: dbt_dev
# threads: 4
# timeout_seconds: 300
# 4. Testa la connessione
cd mio_progetto_dbt
dbt debug
# 5. Crea il tuo primo modello
cat > models/staging/stg_example.sql << 'EOF'
SELECT
id,
name,
created_at,
UPPER(TRIM(email)) AS email_normalized
FROM {{ source('raw', 'users') }}
WHERE id IS NOT NULL
EOF
# 6. Esegui e testa
dbt run
dbt test
dbt docs generate
dbt docs serve # Apre il lineage visuale su http://localhost:8080







