Snowflake 中的数据管道自动化
Emily Melhuish
Technical Curriculum Developer, Snowflake

Snowflake 在三层进行结果缓存——作用范围与时长各不相同

| 条件 | 何时为缓存未命中 |
|---|---|
| 查询文本完全匹配 | 大小写、空白或别名不同 |
| 无不可复用函数 | 运行间会变的函数:RANDOM |
| 底层表未变 | 上次运行后发生 DML、重聚类或合并 |
| 持久化结果仍可用 | 24 小时 TTL 未复用而过期,或达 31 天 |
| 角色具备所需权限 | SELECT:角色缺权限;SHOW:角色不同 |

仓库缓存
元数据缓存
阻止裁剪:
SELECT *
FROM logistics.shipments
WHERE MONTH(dispatch_date) = 3;
允许裁剪:
SELECT *
FROM logistics.shipments
WHERE dispatch_date >= '2024-03-01'
AND dispatch_date < '2024-04-01';
避免 SELECT *
-- 读取所有列
SELECT *
FROM logistics.shipments
WHERE region = 'EMEA';
-- 只读所需列
SELECT shipment_id
, delivery_days
FROM logistics.shipments
WHERE region = 'EMEA';
避免隐式交叉连接
-- 缺少连接条件 = 笛卡尔积
SELECT s.shipment_id
, c.name
FROM shipments s, carriers c;
-- 显式 JOIN 且带 ON 条件
SELECT s.shipment_id
, c.name
FROM shipments s
JOIN carriers c ON s.carrier_id = c.id;
Snowflake 中的数据管道自动化