2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLだけで始めるLakeflow SDP

Last updated at Posted at 2025-12-20

はじめに

「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_summarysilver_ordersに依存していることをSDPが自動で認識し、正しい順序で実行してくれます。

ハンズオン: 最初のパイプラインを作る

Step 1: パイプラインを作成する

  1. Databricksワークスペースの左サイドバーで 新規 をクリックし、ETL パイプライン を選択
    Screenshot 2025-12-20 at 14.33.09.png
  2. パイプラインに一意の名前を入力(例: my-first-sdp-pipeline)
  3. パイプライン名のすぐ下で、デフォルトのカタログスキーマを選択
    • 書き込み権限のあるカタログ・スキーマを選んでください
  4. 空のファイルから開始を選択
    Screenshot 2025-12-20 at 14.34.27.png
  5. フォルダパスはデフォルト(ユーザーフォルダー)のままでOK
  6. 言語はSQLを選択
    Screenshot 2025-12-20 at 14.35.31.png
  7. 選択をクリック

これでパイプラインが作成され、Lakeflowパイプラインエディタが開きます。

Step 2: 最初のマテリアライズドビューを作る

エディタに以下のSQLを入力します。Databricksが提供するサンプルデータを使います。

-- Bronze層: サンプルデータをそのまま取り込む
CREATE MATERIALIZED VIEW bronze_orders AS
SELECT * FROM samples.tpch.orders;

たった3行です。これで最初のテーブルが定義できました。

ファイルを実行ボタンをクリックして実行します。
Screenshot 2025-12-20 at 14.37.09.png

実行が完了すると:

  • 右側のパイプライングラフにbronze_ordersテーブルが表示されます
  • 下部のパネルでテーブルの詳細やデータをプレビューできます

Screenshot 2025-12-20 at 14.38.52.png

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: パイプラインを実行する

パイプラインを実行ボタンをクリックして、パイプライン全体を実行します。
Screenshot 2025-12-20 at 14.40.37.png

実行中、右側のパイプライングラフを確認してください:

  • 4つのテーブルが表示されている
  • テーブル間の依存関係が矢印で示されている
  • bronze_orderssilver_completed_ordersgold_daily_sales / gold_priority_summary

Screenshot 2025-12-20 at 14.41.40.png

重要なポイント: 実行順序を指定していないのに、SDPが依存関係を自動で解析し、正しい順序で実行してくれています。

Step 5: 結果を確認する

実行が完了したら:

  1. パイプライングラフで各テーブルをクリック
  2. 下部パネルのデータタブでデータをプレビュー
    Screenshot 2025-12-20 at 14.42.34.png
  3. タブでカラム定義を確認
    Screenshot 2025-12-20 at 14.43.07.png

作成したテーブルは通常のDelta Tableとして、ノートブックやSQLエディタからもクエリできます:

-- SQLエディタやノートブックから
SELECT * FROM your_catalog.your_schema.gold_daily_sales LIMIT 10;

Screenshot 2025-12-20 at 14.44.26.png

何が起きているのか

SDPが自動でやってくれること

  1. 依存関係の解析: SQLのFROM句を見て、どのテーブルがどのテーブルに依存しているか自動で判定
  2. 実行順序の決定: 依存関係に基づいて、正しい順序で実行
  3. 並列実行: 依存関係のないテーブル(gold_daily_salesgold_priority_summary)は並列で実行
  4. エラーハンドリング: 上流のテーブルが失敗したら、下流のテーブルは実行しない
  5. メタデータ管理: テーブルの作成日時、更新日時、行数などを自動で記録

マテリアライズドビュー(MV)とは

マテリアライズドビューは、クエリ結果を実体として保存するビューです。

通常のビュー(VIEW)との違い:

通常のビュー マテリアライズドビュー
データ保存 保存しない(毎回計算) 保存する
クエリ速度 元テーブルに依存 高速(事前計算済み)
更新タイミング リアルタイム パイプライン実行時

SDPでは、パイプラインを実行するたびにマテリアライズドビューが再計算され、最新の結果が保存されます。

スケジュール実行を設定する

パイプラインを定期的に自動実行するには:

  1. エディタ上部のスケジュールボタンをクリック
  2. 実行頻度を設定(例: 毎日午前6時)
  3. 作成をクリック

Screenshot 2025-12-20 at 14.45.43.png

これで、指定した時間に自動でパイプラインが実行され、すべてのテーブルが更新されます。

まとめ

今日できるようになったこと

  • SQLだけでSDPパイプラインを作成できた
  • マテリアライズドビューを定義できた
  • 依存関係が自動で解決されることを確認した
  • スケジュール実行を設定できた

SDPの価値

  • シンプル: SQLを書くだけ
  • 自動化: 依存関係、実行順序、エラー処理を自動管理
  • 可視化: パイプライングラフで全体像を把握

次のステップ

ここまでで、SDPの基本的な使い方を学びました。しかし、実際のデータパイプラインでは以下のような課題が出てきます:

  • 「不正なデータが混入したらどうする?」→ Level 2で学ぶエクスペクテーション
  • 「毎回全件処理は遅い...」→ Level 3で学ぶストリーミングテーブル
  • 「データベースの変更を同期したい」→ Level 5で学ぶAUTO CDC

次の記事 Level 2: Lakeflow SDPでデータ品質を守るエクスペクテーション では、マテリアライズドビューにデータ品質チェックを追加する方法を学びます。

参考リンク

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?