Databricks SQLで「同じクエリなのに速いときと遅いときがある」と感じたことはないでしょうか。 その違いの多くはキャッシュの動作に起因します。Databricks SQLには3つの異なるキャッシュ層があり、 それぞれ動作レイヤー、保持条件、無効化タイミングが異なります。 この記事では、3つのキャッシュ層を正確に理解し、コスト効率の良いクエリ実行を実現する方法を整理します。
| 観点 | Result Cache(結果キャッシュ) | Disk Cache(データキャッシュ) | Materialized View |
|---|---|---|---|
| キャッシュ対象 | クエリの結果セット | リモートストレージのデータファイル | 事前計算済みの集計結果(テーブル) |
| 動作レイヤー | クエリプランナー(実行前に判定) | ストレージI/O層(SSD) | テーブルストレージ(Delta形式) |
| 保持場所 | Warehouse内部メモリ/メタデータ | Warehouseノードのローカル SSD | クラウドストレージ(永続化) |
| 有効期間 | 24時間(またはデータ変更まで) | Warehouse停止まで | 明示的なDROPまで永続 |
| Warehouse停止時 | 消失 | 消失 | 保持(テーブルとして永続化) |
| 無効化条件 | 基テーブルのデータ変更 / 24時間経過 | OPTIMIZE / VACUUM / ファイル変更 | 手動リフレッシュまたは自動リフレッシュで更新 |
| Warehouse必要性 | 同一Warehouseでの再実行が必要 | 同一Warehouseノードでのアクセスが必要 | 不要(どのWarehouseからでも読取可能) |
| ユーザー設定 | 不要(自動) | 不要(自動) | CREATE MATERIALIZED VIEW文が必要 |
Result Cacheは、完全に同一のSQLテキストが同一のWarehouseで再実行されたときに、 前回の結果をそのまま返す仕組みです。クエリのコンパイル・最適化・データスキャンをすべてスキップするため、 ヒットした場合のレスポンスは数十ミリ秒レベルです。
Disk Cacheは、リモートストレージ(S3 / ADLS / GCS)からフェッチしたParquetファイルを WarehouseノードのローカルSSDにキャッシュする仕組みです。 Result Cacheがクエリ結果レベルのキャッシュであるのに対し、Disk Cacheはデータファイルレベルの キャッシュです。
Materialized Viewは事前にクエリ結果を計算してDeltaテーブルとして保存する仕組みです。 Result CacheやDisk CacheがWarehouseのライフサイクルに依存するのに対し、 Materialized Viewはクラウドストレージに永続化されるため、Warehouseの停止・再起動に影響されません。
-- Materialized Viewの作成
CREATE MATERIALIZED VIEW sales_summary AS
SELECT
region,
product_category,
DATE_TRUNC('month', order_date) AS month,
COUNT(*) AS order_count,
SUM(amount) AS total_amount
FROM catalog.schema.orders
GROUP BY region, product_category, DATE_TRUNC('month', order_date);
-- 手動リフレッシュ
REFRESH MATERIALIZED VIEW sales_summary;
-- 自動リフレッシュのスケジュール設定
ALTER MATERIALIZED VIEW sales_summary
SET TBLPROPERTIES (
'pipelines.autoOptimize.managed' = 'true'
);Warehouseを停止・再起動するとDisk CacheとResult Cacheの両方が失われます。 朝のダッシュボードアクセスが集中する時間帯に「初回だけ遅い」問題を回避するための戦略です。
| 戦略 | 方法 | 効果 |
|---|---|---|
| Auto Stop時間の延長 | Auto Stopを30分以上に設定 | 短期間のアイドルでWarehouseが停止しない→キャッシュ保持 |
| スケジュールクエリによるウォームアップ | 朝の業務開始前に主要クエリを自動実行 | Disk CacheとResult Cacheが事前に温まる |
| Materialized Viewの活用 | 重い集計をMaterialized Viewに事前計算 | Warehouse停止に依存しない永続的な高速化 |
| ダッシュボードのスケジュールリフレッシュ | 業務開始の30分前にリフレッシュをスケジュール | Result Cacheが温まった状態でユーザーがアクセス |
Data Analyst Associate
問題 1
あるBIチームが毎朝9:00にダッシュボードを確認する。SQL Warehouseは夜間にAuto Stop(10分設定)で停止している。朝のダッシュボード表示が「初回だけ非常に遅い」と報告された。Warehouseのサイズやクエリ自体は適切である。最も効果的な改善策はどれか。
正解: B
夜間の停止でDisk CacheとResult Cacheの両方が消失しているのが原因です。スケジュールリフレッシュを業務開始前に設定すると、Warehouseの起動→クエリ実行→キャッシュ生成が事前に完了し、9:00の時点ではキャッシュヒットします。サイズアップは初回のI/Oコストを根本解決しません。Z-ORDERはフィルタ効率改善で別の最適化です。Result Cacheの有効期限はユーザーが変更できません。
Result Cacheを明示的にクリアする方法はありますか?
ユーザーが手動でResult Cacheをクリアするコマンドは存在しません。Result Cacheはテーブルデータが更新された時点で自動的に無効化されます。また、Warehouseの再起動でもクリアされます。テスト目的でキャッシュを回避したい場合は、クエリテキストをわずかに変更する(コメント追加など)か、Warehouseを再起動する方法が実務で使われます。
Materialized ViewはSQL Warehouse以外でも使えますか?
Materialized ViewのCREATEとREFRESHはSQL WarehouseまたはDatabricksクラスタ(DBR 14.2以降)で実行可能です。ただし、Materialized Viewの自動リフレッシュ機能はSQL WarehouseまたはDLT(Delta Live Tables)パイプラインで動作します。読み取り(SELECT)は通常のクラスタからも可能です。
Disk Cacheの容量が不足するとどうなりますか?
Disk CacheはLRU(Least Recently Used)方式で管理されます。SSD容量が一杯になると、最も古いキャッシュエントリが自動的にエビクト(追い出し)されます。頻繁にアクセスされるテーブルのキャッシュは保持され、低頻度のテーブルが優先的に追い出されるため、通常は特別な対処は不要です。キャッシュ容量を増やしたい場合はWarehouseのサイズを上げることでSSD容量も増加します。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...