В чём разница между ETL и ELT?

«В чём разница между ETL и ELT?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ETL (Extract, Transform, Load) и ELT (Extract, Load, Transform) — это две архитектурные парадигмы для процессов загрузки данных в хранилища. Ключевое различие — последовательность и место выполнения этапа трансформации (Transform).

Аспект ETL (Классический подход) ELT (Современный подход)
Порядок Извлечь → Преобразовать → Загрузить Извлечь → Загрузить → Преобразовать
Место трансформации Отдельный сервер обработки (ETL-движок) Внутри целевого хранилища данных (DWH, Data Lake)
Тип данных В основном структурированные, известной схемы Любые: структурированные, полуструктурированные, неструктурированные
Гибкость Схема определяется до загрузки («Schema-on-Write») Схема определяется при запросе («Schema-on-Read»)
Инфраструктура Требует мощного отдельного ETL-сервера Использует масштабируемые ресурсы облачного хранилища

Почему ELT набирает популярность?

  1. Скорость загрузки: Данные загружаются в сыром виде сразу, без задержек на трансформацию.
  2. Гибкость: Аналитики могут сами определять, как и когда трансформировать данные, под конкретные нужды.
  3. Масштабируемость: Использует практически неограниченную вычислительную мощность современных облачных DWH (BigQuery, Snowflake, Redshift).
  4. Сохранение исходных данных: Всегда есть доступ к первоисточнику, что важно для аудита и новых видов анализа.

Пример ELT-пайплайна:

  1. Extract: Данные из CRM и логов выгружаются в формате JSON/CSV.
  2. Load: Сырые файлы загружаются в облачное хранилище (S3) или напрямую в таблицы BigQuery.
  3. Transform: С помощью SQL или Spark (внутри инфраструктуры облака) данные очищаются, соединяются и агрегируются.
    -- Трансформация внутри BigQuery после загрузки сырых данных
    CREATE OR REPLACE TABLE analytics.user_orders AS
    SELECT 
    u.user_id,
    COUNT(o.order_id) as total_orders,
    SUM(o.amount) as total_spent
    FROM raw.users u
    LEFT JOIN raw.orders o ON u.user_id = o.user_id
    GROUP BY u.user_id;

Выбор подхода: ETL подходит для строго регламентированных процессов со сложной бизнес-логикой. ELT — для agile-аналитики, больших данных и облачных инфраструктур.