🧱 ELT Pipelines & Medallion Architecture
Bronze/Silver/Gold, Auto Loader, Delta Live Tables
🥉🥈🥇 Medallion Architecture
Bronze — сырое получение данных, без каких-либо изменений (append-only). Silver — очищенные, прошедшие валидацию и дедупликацию данные. Gold — агрегации на уровне бизнеса, готовые для отчётности. Каждый слой в формате Delta.
📥 Auto Loader
Автоматическая инкрементальная загрузка новых файлов из облачного хранилища (S3/ADLS/GCS). Формат cloudFiles. Вывод и эволюция схемы. Семантика exactly-once через checkpoint. Миллионы файлов — эффективно.
🔄 Delta Live Tables (DLT)
Декларативный фреймворк для пайплайнов. Декоратор `@dlt.table`. Live Tables (полное обновление) и Streaming Live Tables (инкрементальные). Expectations — ограничения качества данных. Автоматическое управление зависимостями и обработка ошибок.
MERGE INTO (UPSERT)
MERGE в Delta — это upsert (update + insert). Сопоставляет источник с целевой таблицей: при совпадении выполняет update, при несовпадении — insert. Используется для SCD Type 1 (перезапись) и Type 2 (история).
💡 Ключевые моменты
- Bronze: сырые данные, Silver: очищенные, Gold: агрегированные
- Auto Loader: обнаружение новых файлов, инкрементальная загрузка, checkpoint
- DLT: декларативный подход, expectations, автоматические зависимости
- MERGE INTO: операция upsert
- Streaming pipeline: Auto Loader → Bronze → Silver → Gold
📋 Пример кода
-- Auto Loader (Bronze ingestion)
CREATE OR REFRESH STREAMING TABLE bronze_orders
AS SELECT
current_timestamp() as ingestion_time,
*
FROM cloud_files(
"s3://bucket/orders/",
"json",
map("cloudFiles.inferColumnTypes", "true")
);
-- DLT Silver table (with expectations)
@dlt.table
@dlt.expect_or_drop("valid_amount", "amount > 0")
@dlt.expect_or_fail("not_null_id", "id IS NOT NULL")
def silver_orders():
return (dlt.read_stream("bronze_orders")
.dropDuplicates(["id"])
.filter("status != 'CANCELLED'")
)
-- MERGE INTO (upsert)
MERGE INTO silver_customers AS target
USING new_customers AS source
ON target.id = source.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
🎯 Советы для экзамена
- Auto Loader vs COPY INTO: Auto Loader — масштабируемый (миллионы файлов), потоковый; COPY INTO — пакетный, проще
- DLT expect_or_drop: плохие строки фильтруются, пайплайн продолжает работу. expect_or_fail: пайплайн останавливается
- Bronze = сырые данные, схема минимальна или отсутствует. Silver = валидированные, типизированные. Gold = бизнес-агрегации
- MERGE INTO (upsert): основной паттерн для CDC (Change Data Capture) данных и SCD Type 1/2
- DLT pipeline — работает на DLT-специфичном кластере (управляется отдельно, не ручной кластер)
⚠️ Частые ошибки
- Выполнять трансформации в слое Bronze — Bronze хранит сырые данные без каких-либо изменений
- Незнание разницы между `@dlt.table` и потоковым `@dlt.append_flow` в DLT
- Если checkpoint Auto Loader потерян — все файлы будут прочитаны повторно (нарушается exactly-once)
🧠 Для запоминания: "BSG Medals" = Bronze (raw) → Silver → Gold — как медали, каждый уровень чище предыдущего. "MERGE = Match then Update or Insert"
Проверьте себя по теме «ELT Pipelines & Medallion Architecture»
Бесплатные интерактивные тесты, пробный экзамен и полные уроки — на платформе CertMaster.
Начать бесплатно →