外部表与 Iceberg 表

Snowflake 中的数据管道自动化

Emily Melhuish

Technical Curriculum Developer, Snowflake

什么是外部表?

用例:

  • Harbr 每天接收数十家合作伙伴的文件
  • 将其加载到 Snowflake 并不合适

external table.png

外部表

  • 数据保留在 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 中的数据管道自动化

何时使用外部表

  • 数据归合作伙伴所有——可查询而无需接管数据管理
  • 文件很大、查询不频繁——避免加载每月才访问一次的数据
  • 合规限制不能移动——文件必须留在原位置
  • 先探索再决定——先读原始文件再决定加载内容
-- 查询合作伙伴库存 
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 存储成本
  • 始终反映云存储当前状态
  • 适合低频查询、归档数据
-- 直接查询,无需加载
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 文件 + 元数据层(时光回溯、模式历史、分区)
    • 数据库级可靠性

截图 2026-05-11 12:14:31 pm.png

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 中的数据管道自动化

¡Vamos a practicar!

Snowflake 中的数据管道自动化

Preparing Video For Download...