Внешние таблицы и Iceberg

Автоматизация конвейеров данных в Snowflake

Emily Melhuish

Technical Curriculum Developer, Snowflake

Что такое внешняя таблица?

Сценарий использования:

  • Harbr ежедневно получает файлы от десятков партнёров
  • Загружать их в Snowflake нецелесообразно

Схема внешней таблицы

Внешние таблицы

  • Данные остаются в S3, GCS или Azure Blob — в Snowflake не перемещаются
  • Snowflake хранит метаданные: пути к файлам, схемы
  • Файлы читаются во время выполнения запроса
Автоматизация конвейеров данных в Snowflake

Создание внешней таблицы

CREATE EXTERNAL TABLE logistics.supplier_inventory
  WITH LOCATION = @harbr_stage/inventory/
  FILE_FORMAT = (TYPE = 'PARQUET')
  AUTO_REFRESH = TRUE;
Автоматизация конвейеров данных в Snowflake

Когда использовать внешние таблицы

  • Данные принадлежат партнёру — запрос без управления данными
  • Крупные файлы с редкими запросами — нет смысла загружать данные, нужные раз в месяц
  • Данные нельзя перемещать по требованиям соответствия — файлы должны оставаться на месте
  • Исследование перед загрузкой — чтение сырых файлов до принятия решения
-- Query partner inventory 
SELECT supplier_id,
       COUNT(*)       AS file_count,
       SUM(quantity)  AS total_units
FROM logistics.supplier_inventory
WHERE delivery_date >= '2024-01-01'
GROUP BY supplier_id;
Автоматизация конвейеров данных в Snowflake

Внешние таблицы vs загрузка данных

Внешние таблицы

  • Нулевые затраты на хранение в Snowflake
  • Всегда отражают актуальное состояние облачного хранилища
  • Оптимальны для архивных данных с редкими запросами
-- Query directly, no load needed
SELECT * FROM 
logistics.supplier_inventory
WHERE supplier_id = 'SUP-042';

Загрузка с COPY INTO

  • Полная производительность запросов Snowflake
  • Оптимально для часто запрашиваемых актуальных данных
-- Load once, query fast
COPY INTO logistics.delivery_events
FROM @harbr_stage/events/;
Автоматизация конвейеров данных в Snowflake

Таблицы Apache Iceberg

  • Как корректно читать данные из S3, Azure Blob или GCS?

    • Apache
  • Apache = Открытый формат таблиц: данные не привязаны к движку

    • Файлы Parquet + слой метаданных (time travel, история схем, партиции)
    • Надёжность уровня базы данных

Снимок экрана с таблицей Apache Iceberg

1 * Учебные материалы Snowflake
Автоматизация конвейеров данных в Snowflake

Управление Snowflake vs внешним каталогом

Управляемые Snowflake

  • Snowflake владеет метаданными Iceberg и записывает их
  • Полный доступ на чтение и запись через SQL
CREATE ICEBERG TABLE 
logistics.shipments
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'harbr_s3_vol'
  BASE_LOCATION = 'iceberg/shipments/';

Управляемые внешним каталогом

  • Метаданными владеет внешний каталог — AWS Glue, Apache Polaris
CREATE ICEBERG TABLE 
logistics.partner_data
  CATALOG = 'glue_catalog'
  EXTERNAL_VOLUME = 'harbr_s3_vol'
  CATALOG_TABLE_NAME = 
  'partner.deliveries';
Автоматизация конвейеров данных в Snowflake

Вперёд к практике!

Автоматизация конвейеров данных в Snowflake

Preparing Video For Download...