はじめに
「SDPって難しそう...」
Lakeflow Spark宣言型パイプライン(SDP)のドキュメントを開くと、ストリーミングテーブル、フロー、AUTO CDC、エクスペクテーションなど、聞き慣れない用語が次々と出てきます。どこから手をつければいいか分からず、諦めてしまった方も多いのではないでしょうか。
でも安心してください。SDPはSQLだけで始められます。
本記事では、SQLを書くだけでパイプラインを作成し、SDPの最初の成功体験を得ることを目標にします。ストリーミングテーブルもフローも出てきません。普段SQLを書いている方なら、30分で動くパイプラインが作れます。
Lakeflow SDP入門:基礎から実践まで
本記事は、SDPを段階的に学ぶ学習パス「Lakeflow SDP入門:基礎から実践まで」の一部です。各レベルで1つずつ新しい概念を学び、無理なくステップアップできる構成になっています。
| Level | タイトル | 所要時間 | 学ぶ概念 |
|---|---|---|---|
| 1 | SQLだけで始めるLakeflow SDP(本記事) | 30分 | MV、パイプライン |
| 2 | Lakeflow SDPでデータ品質を守るエクスペクテーション | 30分 | エクスペクテーション |
| 3 | Lakeflow SDPの増分処理とストリーミングテーブル | 45分 | ST、増分処理 |
| 4 | Lakeflow SDPのフローを理解する | 45分 | フロー、append_flow |
| 5 | Lakeflow SDPのAUTO CDCでマスターデータ同期 | 60分 | AUTO CDC、SCD |
各レベルの終わりには「次の課題」を提示し、自然に次のレベルへ進む動機を作っています。
この記事で学ぶこと
- SDPとは何か(1分で説明できるレベル)
- マテリアライズドビュー(MV)の基本
- パイプラインの作成・実行
- 依存関係の自動解決
この記事で学ばないこと(意図的に省略)
- ストリーミングテーブル
- フロー
- エクスペクテーション
- Python API
- AUTO CDC
これらは後のレベルで学びます。まずはシンプルに始めましょう。
前提条件
- SQLの基本(SELECT, JOIN, GROUP BY)が書ける
- Databricksワークスペースにログインできる
- Unity Catalogが有効なワークスペース
SDPとは何か
一言で説明すると
「SQLを書くだけで、定期実行・依存管理・エラー処理を自動化してくれるフレームワーク」 です。
従来のアプローチとの違い
従来、複数のテーブルを順番に更新するジョブを作る場合、以下のことを自分で管理する必要がありました:
- 実行順序: テーブルAを更新してからテーブルBを更新する
- エラー処理: テーブルAの更新が失敗したらテーブルBは実行しない
- リトライ: 失敗したら再実行する
- スケジューリング: 毎日何時に実行するか設定する
SDPでは、テーブルの定義を書くだけで、これらを自動的に処理してくれます。
-- これだけ書けば、依存関係も実行順序もSDPが自動で管理
CREATE MATERIALIZED VIEW silver_orders AS
SELECT * FROM bronze_orders WHERE status = 'completed';
CREATE MATERIALIZED VIEW gold_summary AS
SELECT date, COUNT(*) as cnt FROM silver_orders GROUP BY date;
gold_summaryはsilver_ordersに依存していることをSDPが自動で認識し、正しい順序で実行してくれます。
ハンズオン: 最初のパイプラインを作る
Step 1: パイプラインを作成する
- Databricksワークスペースの左サイドバーで 新規 をクリックし、ETL パイプライン を選択
- パイプラインに一意の名前を入力(例:
my-first-sdp-pipeline) - パイプライン名のすぐ下で、デフォルトのカタログとスキーマを選択
- 書き込み権限のあるカタログ・スキーマを選んでください
-
空のファイルから開始を選択
- フォルダパスはデフォルト(ユーザーフォルダー)のままでOK
- 言語はSQLを選択
- 選択をクリック
これでパイプラインが作成され、Lakeflowパイプラインエディタが開きます。
Step 2: 最初のマテリアライズドビューを作る
エディタに以下のSQLを入力します。Databricksが提供するサンプルデータを使います。
-- Bronze層: サンプルデータをそのまま取り込む
CREATE MATERIALIZED VIEW bronze_orders AS
SELECT * FROM samples.tpch.orders;
たった3行です。これで最初のテーブルが定義できました。
実行が完了すると:
- 右側のパイプライングラフに
bronze_ordersテーブルが表示されます - 下部のパネルでテーブルの詳細やデータをプレビューできます
Step 3: 依存するテーブルを追加する
bronze_ordersを元に、加工したテーブルを作成します。同じファイルに追記するか、新しいファイルを作成して以下を入力します。
-- Silver層: 完了した注文のみをフィルタリング
CREATE MATERIALIZED VIEW silver_completed_orders AS
SELECT
o_orderkey,
o_custkey,
o_totalprice,
o_orderdate,
o_orderpriority
FROM bronze_orders
WHERE o_orderstatus = 'F'; -- 'F' = Fulfilled(完了)
さらに、集計テーブルを追加します:
-- Gold層: 日別の売上集計
CREATE MATERIALIZED VIEW gold_daily_sales AS
SELECT
o_orderdate AS order_date,
COUNT(*) AS order_count,
SUM(o_totalprice) AS total_sales,
AVG(o_totalprice) AS avg_order_value
FROM silver_completed_orders
GROUP BY o_orderdate
ORDER BY o_orderdate;
もう一つ、優先度別の集計も作ってみましょう:
-- Gold層: 優先度別の注文集計
CREATE MATERIALIZED VIEW gold_priority_summary AS
SELECT
o_orderpriority AS priority,
COUNT(*) AS order_count,
SUM(o_totalprice) AS total_sales
FROM silver_completed_orders
GROUP BY o_orderpriority
ORDER BY total_sales DESC;
Step 4: パイプラインを実行する
パイプラインを実行ボタンをクリックして、パイプライン全体を実行します。

実行中、右側のパイプライングラフを確認してください:
- 4つのテーブルが表示されている
- テーブル間の依存関係が矢印で示されている
-
bronze_orders→silver_completed_orders→gold_daily_sales/gold_priority_summary
重要なポイント: 実行順序を指定していないのに、SDPが依存関係を自動で解析し、正しい順序で実行してくれています。
Step 5: 結果を確認する
実行が完了したら:
作成したテーブルは通常のDelta Tableとして、ノートブックやSQLエディタからもクエリできます:
-- SQLエディタやノートブックから
SELECT * FROM your_catalog.your_schema.gold_daily_sales LIMIT 10;
何が起きているのか
SDPが自動でやってくれること
-
依存関係の解析: SQLの
FROM句を見て、どのテーブルがどのテーブルに依存しているか自動で判定 - 実行順序の決定: 依存関係に基づいて、正しい順序で実行
-
並列実行: 依存関係のないテーブル(
gold_daily_salesとgold_priority_summary)は並列で実行 - エラーハンドリング: 上流のテーブルが失敗したら、下流のテーブルは実行しない
- メタデータ管理: テーブルの作成日時、更新日時、行数などを自動で記録
マテリアライズドビュー(MV)とは
マテリアライズドビューは、クエリ結果を実体として保存するビューです。
通常のビュー(VIEW)との違い:
| 通常のビュー | マテリアライズドビュー | |
|---|---|---|
| データ保存 | 保存しない(毎回計算) | 保存する |
| クエリ速度 | 元テーブルに依存 | 高速(事前計算済み) |
| 更新タイミング | リアルタイム | パイプライン実行時 |
SDPでは、パイプラインを実行するたびにマテリアライズドビューが再計算され、最新の結果が保存されます。
スケジュール実行を設定する
パイプラインを定期的に自動実行するには:
- エディタ上部のスケジュールボタンをクリック
- 実行頻度を設定(例: 毎日午前6時)
- 作成をクリック
これで、指定した時間に自動でパイプラインが実行され、すべてのテーブルが更新されます。
まとめ
今日できるようになったこと
- SQLだけでSDPパイプラインを作成できた
- マテリアライズドビューを定義できた
- 依存関係が自動で解決されることを確認した
- スケジュール実行を設定できた
SDPの価値
- シンプル: SQLを書くだけ
- 自動化: 依存関係、実行順序、エラー処理を自動管理
- 可視化: パイプライングラフで全体像を把握
次のステップ
ここまでで、SDPの基本的な使い方を学びました。しかし、実際のデータパイプラインでは以下のような課題が出てきます:
- 「不正なデータが混入したらどうする?」→ Level 2で学ぶエクスペクテーション
- 「毎回全件処理は遅い...」→ Level 3で学ぶストリーミングテーブル
- 「データベースの変更を同期したい」→ Level 5で学ぶAUTO CDC
次の記事 Level 2: Lakeflow SDPでデータ品質を守るエクスペクテーション では、マテリアライズドビューにデータ品質チェックを追加する方法を学びます。






