在 Snowflake 進行資料管線自動化
Emily Melhuish
Technical Curriculum Developer, Snowflake

Snowflake 在三個層級進行快取——範圍與保存時間各異

| 條件 | 下列情況會快取失敗(Miss) |
|---|---|
| 查詢文字需完全相同 | 大小寫、空白或別名不同 |
| 無不可重用的函式 | 函式在不同執行間會改變:RANDOM |
| 來源資料表未變更 | 自上次執行以來有 DML、重新分群或合併 |
| 永續結果仍可用 | 24 小時 TTL 未重用而到期,或已達 31 天 |
| 角色具備必要權限 | SELECT:角色缺權限;SHOW:使用不同角色 |

Warehouse 快取
中繼資料快取
會阻擋修剪(pruning):
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 進行資料管線自動化