优化方法

Snowflake 中的数据管道自动化

Emily Melhuish

Technical Curriculum Developer, Snowflake

增加算力不一定解决问题

更大的房子

Snowflake 中的数据管道自动化

四种不同方法

nanobanana:half:四个不同的几何工具图标,2×2 网格,抽象扁平风格,DataCamp 海军蓝和绿色,白色背景,无文字,极简干净

  • 搜索优化:对高基数 ID 的等值查找
  • 查询加速服务:不可预测的重扫描
  • 自动聚簇:在相同列上反复做区间过滤
  • 物化视图:昂贵聚合经常运行
Snowflake 中的数据管道自动化

搜索优化

  • 适用于在大表中查找少量行的查询
  • 构建持久访问路径;可跳过部分微分区
  • 为维护该访问路径需付出存储与计算成本
ALTER TABLE logistics.shipments
  ADD SEARCH OPTIMIZATION;
1 docs.snowflake.com/en/user-guide/search-optimization-service
Snowflake 中的数据管道自动化

查询加速服务

  • 处理大型且不可预测的扫描
  • 支持 SELECTINSERTCREATE TABLE AS SELECTCOPY INTO
  • QUERY_ACCELERATION_MAX_SCALE_FACTOR:默认 8;0 表示无限制,非禁用
ALTER WAREHOUSE harbr_wh SET
  ENABLE_QUERY_ACCELERATION = TRUE
  QUERY_ACCELERATION_MAX_SCALE_FACTOR 
  = 8;
1 docs.snowflake.com/en/user-guide/query-acceleration-service
Snowflake 中的数据管道自动化

自动聚簇

  • 适用于大多数查询使用相同过滤列的表
  • Snowflake 重新排序微分区,使区间过滤能跳过更多数据
  • 后台维护——无需仓库
  • 权衡:新数据到来时有持续计算成本
ALTER TABLE logistics.delivery_events
  CLUSTER BY (region, dispatch_date);
1 docs.snowflake.com/en/user-guide/tables-auto-reclustering
Snowflake 中的数据管道自动化

物化视图

  • 当昂贵查询被反复执行时需要
  • 预计算并存储结果;读取直接命中存储结果
  • Snowflake 在后台自动维护
  • 有 SQL 限制:无 HAVING、连接受限、无窗口函数
CREATE MATERIALIZED VIEW 
logistics.emea_summary_mv AS
  SELECT region, carrier_id,
         COUNT(*) AS shipments,
         AVG(delivery_days) AS avg_days
  FROM logistics.shipments
  WHERE region = 'EMEA'
  GROUP BY region, carrier_id;
1 docs.snowflake.com/en/user-guide/views-materialized
Snowflake 中的数据管道自动化

选择合适的方法

查询概要中的信号 可考虑的方法
TableScan 读取几乎所有分区;在高基数字段上做等值查找 搜索优化
聚合重、扫描大且到达不可预测 查询加速服务
大多数查询使用相同过滤列;裁剪效果弱 自动聚簇
相同的昂贵聚合在变化缓慢的数据上频繁运行 物化视图
  • 方法可相互补充
Snowflake 中的数据管道自动化

让我们来练习!

Snowflake 中的数据管道自动化

Preparing Video For Download...