Snowflakeにおけるデータパイプラインの自動化
Emily Melhuish
Technical Curriculum Developer, Snowflake

Snowflakeは3つのレベルでクエリ結果をキャッシュします — それぞれスコープと保持期間が異なります

| 条件 | キャッシュミスとなる場合 |
|---|---|
| クエリテキストが完全一致 | 大文字小文字・空白・エイリアスが異なる |
| 再利用不可な関数を含まない | 実行ごとに変わる関数(例: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 * を避ける
-- Reads every column
SELECT *
FROM logistics.shipments
WHERE region = 'EMEA';
-- Reads only what's needed
SELECT shipment_id
, delivery_days
FROM logistics.shipments
WHERE region = 'EMEA';
暗黙的なクロス結合を避ける
-- Missing join condition = Cartesian
SELECT s.shipment_id
, c.name
FROM shipments s, carriers c;
-- Explicit JOIN with ON condition
SELECT s.shipment_id
, c.name
FROM shipments s
JOIN carriers c ON s.carrier_id = c.id;
Snowflakeにおけるデータパイプラインの自動化