External 與 Iceberg 資料表

在 Snowflake 進行資料管線自動化

Emily Melhuish

Technical Curriculum Developer, Snowflake

什麼是 External Table?

使用情境:

  • Harbr 每天從數十個合作夥伴接收檔案
  • 直接載入到 Snowflake 並不划算

外部資料表

External Tables(外部資料表)

  • 資料留在 S3、GCS 或 Azure Blob——不會移入 Snowflake
  • Snowflake 僅儲存中繼資料:檔案路徑、綱要
  • 查詢時即時讀取檔案
在 Snowflake 進行資料管線自動化

建立 External Table

CREATE EXTERNAL TABLE logistics.supplier_inventory
  WITH LOCATION = @harbr_stage/inventory/
  FILE_FORMAT = (TYPE = 'PARQUET')
  AUTO_REFRESH = TRUE;
在 Snowflake 進行資料管線自動化

何時使用 External Tables

  • 資料由合作夥伴持有——可查詢而不需接手管理
  • 檔案很大、查詢少見——避免為每月一次的存取而載入
  • 法規限制不可移轉——檔案必須留在原位置
  • 先探索再決定——先讀原始檔再決定要載入哪些
-- 查詢合作夥伴存貨
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 進行資料管線自動化

External Tables vs. 載入資料

External tables

  • 不占用 Snowflake 儲存成本
  • 永遠反映雲端儲存的最新狀態
  • 最適合低頻查詢、封存資料
-- 直接查詢,無需載入
SELECT * FROM 
logistics.supplier_inventory
WHERE supplier_id = 'SUP-042';

使用 COPY INTO 載入

  • 享有完整 Snowflake 查詢效能
  • 最適合高頻查詢、即時資料
-- 載入一次,查詢高速
COPY INTO logistics.delivery_events
FROM @harbr_stage/events/;
在 Snowflake 進行資料管線自動化

Apache Iceberg 資料表

  • 要如何確保從 S3、Azure Blob 或 GCS 正確讀取資料?

    • Apache
  • Apache=開放式表格格式:資料不綁定任何引擎

    • Parquet 檔案+中繼資料層(時間旅遊、綱要歷史、分割)
    • 達到資料庫等級的可靠性

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...