Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Databricks Free Editionで始めるLakeflow SDP

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Takaaki Yayoi Takaaki Yayoi
January 13, 2026

Databricks Free Editionで始めるLakeflow SDP

こちらのもくもく会の資料です。

Databricks無料版で始めるLakeflow SDPもくもく会
https://jedai.connpass.com/event/379329/

Avatar for Takaaki Yayoi

Takaaki Yayoi

January 13, 2026
Tweet

More Decks by Takaaki Yayoi

Other Decks in Technology

Transcript

  1. ©2026 Databricks Inc. — All rights reserved 自己紹介 弥生 隆明

    (やよい たかあき) シニア スペシャリスト ソリューションアーキテクト ▪ 2020年からデータブリックス ジャパンにお いて、プレセールス、POCに従事 ▪ 生成AI、データエンジニアリング、 アプリが専門領域です。 ▪ 前職はコンサル、総合電機メーカー にてデータ分析・Webサービス構築 などに従事。インド赴任経験あり。 ▪ Databricks Certified (Data Engineer | Machine Learning) Professional, Generative AI Engineer Associate ▪ Qiitaでいろいろ書いています。 3 @taka_aki
  2. ETL処理の実装アプローチ 8 ETL処理を実装する方法は大きく2つあります 命令型(PySpark) 「どうやって処理するか」をステップバイステップで記述 df = spark.read.csv(...) df =

    df.filter(...) df.write.saveAsTable(...) ✓ 柔軟性が高い ✓ デバッグしやすい △ コード量が多い △ 運用が大変 宣言型(Lakeflow SDP) 「何が欲しいか」を宣言し、実行方法はシステムにお任せ @dp.table def silver_data(): return dp.read("bronze") ✓ 簡潔 ✓ 自動で依存関係解決 △ 細かい制御が難しい 今回は宣言型にフォーカスします
  3. 統合 単一のソリューション 合理化 シンプルなETL開発 効率的 インクリメンタルバッチ、ストリーム Lakeflow 取り込み 変換 オーケストレート

    クラウド ストレージ メッセージキュー データ ベース 企業 アプリケーション データインテリジェンス プラットフォーム データウェアハ ウス ビジネスインテ リジェンス AI / ML データ共有 Lakeflowはすべて の人にとっての データエンジニアリ ングの未来です 15
  4. Lakeflow Spark宣言型パイプラインとは ? ETL処理のためのモダンなソフトウェアエンジニアリング Lakeflow SDPは、シンプルな宣言型アプローチ を使用して信頼性の高いデータパイプラインを構築す る、初のETLフレームワークです。Lakeflow SDPはインフラストラクチャを大規模に自動管理 するた

    め、データアナリストやエンジニアはツールに費やす時間を削減し、データから価値を引き出すこと に集 中できます。 ETL開発を加速 インフラストラクチャを 自動管理 データへの 信頼を確保 バッチと ストリーミングを 簡素化 https://www.databricks.com/jp/product/data-engineering/spark-declarative-pipelines 18
  5. 宣言型パイプラインによるプログラミング どう行うかではなく、何を行うべきかを記述 宣言型パイプラインプログラム def upsertToDelta(microBatchOutputDF: DataFrame, batchId: Long) { microBatchOutputDF

    .groupBy("key") .agg(max_by("ts", struct("*").alias("row")) .select("row.*") .createOrReplaceTempView("updates") microBatchOutputDF.sparkSession.sql(s""" MERGE INTO cdc_data_raw t USING updates s ON s.key = t.key WHEN MATCHED AND s.is_delete THEN UPDATE SET DELETED_AT=now() WHEN MATCHED THEN UPDATE SET A=CASE WHEN s.ts > t.ts THEN s.a ELSE t.a, B=CASE WHEN s.ts > t.ts THEN s.b ELSE t.b, … for every column … WHEN NOT MATCHED THEN INSERT * """) } cdcData.writeStream .foreachBatch(upsertToDelta _) .outputMode("append") .start() AUTO CDC INTO cdc_data FROM source_data KEYS (id) SEQUENCE BY ts APPLY AS DELETE WHEN is_deleted Spark命令型プログラム 19
  6. 例:ECサイトの注文データ( 1年分 = 1億件) フルリフレッシュ 毎日1億件を処理 3時間 コスト: 高い💸 インクリメンタル

    今日の新規10万件だけ 2分 コスト: 低い💰 ⏱ 処理時間の短縮 90倍高速化も可能 💰 コスト削減 クラウド費用を大幅カット 🔄 更新頻度UP 日次→時次→リアルタイム なぜインクリメンタル処理が重要なのか? 22 毎日のデータ更新を例に考えてみましょう
  7. 😰 命令型で自分で実装する場合 「どこまで処理したか」を記録する仕組みが必要 途中で失敗したらどこからやり直す? 重複処理を防ぐロジックも必要 テーブルごとに実装が必要で大変 ... 😊 Lakeflow SDPなら

    進捗管理は自動でやってくれる 失敗時のリカバリも自動 重複排除も組み込み済み 宣言するだけで自動的に差分処理! Lakeflow SDPがインクリメンタル処理 を簡単にしてくれる インクリメンタル処理の実装は難しい? 23 自分で実装しようとすると、こんな問題が...
  8. テーブル データを物理的に保存 📦 ✅ クエリが速い ✅ データが永続化される ビュー クエリの「定義」だけ保存 📝

    ✅ ストレージ不要 ❌ クエリのたびに計算 前提確認:テーブルとビュー 24 一般的なデータベースの知識を確認
  9. 😓 差分処理が大変 毎日追加されるデータ → 毎回全件処理し直す? → 差分処理のコードは複雑 😓 順番の管理 Bronze

    → Silver → Gold → 依存関係の管理が面倒 → エラー時のリトライは? 😓 データ品質 不正データの混入 → チェック処理を自前実装 → 除外件数の記録は? テーブル保存は簡単。その周辺の管理が大変。 課題:普通のテーブルで何が困る? 25 PySparkの方法(df.write.saveAsTable)の問題点
  10. 命令型(Part 1) 「どうやって作るか」を全部書く df = spark.read.table("src") df = df.filter("fare >

    0") df.write.saveAsTable("tgt") + 差分処理 + エラー処理 + 品質チェック... → 宣言型(Part 2 / SDP) 「何が欲しいか」だけ宣言 @dp.materialized_view() def silver(): return dp.read("bronze") ✅ 差分・依存関係・品質管理を自動化 SDPは「面倒な周辺管理」を引き受けてくれる仕組み SDPの解決策:「宣言するだけ」 26
  11. 一般的な概念(Oracle、PostgreSQLなどにも存在):クエリ結果を保存したビュー 普通のビュー 📝 → 🔄 → 結果 クエリのたびに計算(遅い) マテリアライズドビュー 📦

    → 結果 保存済みを読むだけ(速い) SDPでの追加機能 ✅ パイプライン実行時に自動更新 ✅ 依存関係の自動解決 ✅ データ品質管理 マテリアライズドビュー( MV)とは 28
  12. Databricks固有の概念:Autoloaderでファイルを増分取り込みするためのテーブル 典型的な使い方:クラウドストレージからの取り込み @dp.table() def bronze_data(): return (spark.readStream .format("cloudFiles") # Autoloader

    .option("cloudFiles.format", "json") .load("/landing/zone/")) STのメリット 新しいファイルだけを処理(高速・低コスト) 主な用途 Bronze層でのデータ取り込み ストリーミングテーブル( ST)とは 29
  13. 典型的なパイプライン構成 Bronze ST ファイル取り込み → Silver → クレンジング ST Gold

    MV 集計 MVとSTの使い分け 30 • 典型的なパイプライン構成では、Bronze層とSilver層をSTで、Gold層をMVで作ります。 • STはファイルの取り込みだけでなく、フィルタリング、型変換、カラム追加といった 1行が1行になる処理であれば続けて使えます。 • 集計(groupBy)やJOINが必要になったタイミングでMVに切り替えます。これは、STが 「追加」しかできないのに対し、集計やJOINは既存の行を「更新」する必要があるためです。
  14. マテリアライズドビュー @dp.materialized_view() def my_table(): return spark.read... 変換・集計・JOINに使用 ストリーミングテーブル @dp.table() def

    my_table(): return spark.readStream... Autoloaderでの取り込みに使用 @dp.materialized_view() = MV / @dp.table() + readStream = ST コードの書き方 32 from pyspark import pipelines as dp
  15. すべてMVで実装します Bronze MV サンプルデータ読込 → Silver MV クレンジング → Gold

    MV 日別集計 なぜMVだけ? 今回は既存のサンプルデータ(samples.nyctaxi.trips)を使うため、 Autoloaderでのファイル取り込みは不要 → すべてMVでOK 今回の実習 33
  16. Lakeflowパイプラインエディタ 1. パイプラインアセットブラウザ 2. ステップバイステップの開発機能を備 えたマルチファイルコード エディタ • ソフトタブ •

    ガターアクション • インラインエラーインジケーター 3. インタラクティブDAG 4. データプレビュー 5. 実行インサイトパネル 1 2 3 4 5 35
  17. データ品質 エクスペクテーションの活用 • データエクスペクテーション により、パイプ ライン内でデータ品質と整 合性の制御を定義 • 柔軟なポリシーでデータ品 質エラーに対処:

    失敗、破 棄、アラート、 隔離(今後) • すべてのデータパイプ ライン実行と品質メトリクス が取得、追跡、報告されま す /* Stage 1: Bronze Table drop invalid rows */ CREATE STREAMING TABLE fire_account_bronze AS ( CONSTRAINT valid_account_open_dt EXPECT (acconut_dt is not null and (account_close_dt > account_open_dt)) ON VIOLATION DROP ROW COMMENT "Bronze table with valid account ids" SELECT * FROM fire_account_raw ... 36
  18. 開発と本番 迅速な反復開発またはエンタープライズグレードの信頼性 開発(Development)モード • 長時間稼働するクラスター を再利 用し、迅速な反復開発 を実現 • エラー時のリトライなし

    で、 より高速なデバッグ が可能 • エディタまたはオーサリングUI からトリガーされるパイプライン向け • 完了後すぐにクラスターをオフ にして コストを削減 (5分以内) • クラスターの再起動を含む エスカレーティングリトライ により、一時的な問題に対しても信頼 性を確保 • スケジュールされたパイプライン向け 本番(Production)モード 37
  19. データガバナンス • 行/列レベルの セキュリティ • 複数のスキーマへの 公開 • ストリーミング テーブルからの変更デー

    タフィード • Hive Metastoreの移行を サポート Unity Catalog連携 # fully qualified CREATE MATERIALIZED VIEW catalog.schema.name # partially qualified CREATE MATERIALIZED VIEW schema.name # single part name CREATE MATERIALIZED VIEW name from pyspark import pipelines as dp @dp.table def table_name(): @dp.table(name="schema.name") def func(): @dp.table(name="catalog.schema.name") def func(): 41
  20. Step 3: ファイル構成を確認 クローン後のフォルダ構成: 📁 data_engineering_course/ ├── 📄 README.md ├──

    📁 notebooks/ │ ├── 📓 exercise_part1_imperative.py │ └── 📓 exercise_part4_jobs.py └── 📁 pipelines/ ├── 📄 pipeline_basic.sql └── 📄 pipeline_with_expectations.sql 各ファイルの用途: 演習1: 命令型ETL notebooks/exercise_part1_imperative.py → ノートブックを開いて Run All 演習2-3: SDP パイプライン pipelines/*.sql(リファレンス用) → パイプラインエディタで入力 演習4: ジョブ設定 notebooks/exercise_part4_jobs.py → 参考資料(GUI操作中心) ✅ これで準備完了です。演習 2から始めましょう! 49
  21. 演習2-3を開始する(パイプライン作成) 1 新規 → ETL パイプライン を選択 2 パイプライン名を入力(例 :

    sdp_nyctaxi_pipeline) 3 カタログ=workspace / スキーマ=新規作成 4 空のファイルで開始、言語は SQL 5 エディタで SQL を入力して実行 📄 リファレンス : 完全なSQLは pipelines/pipeline_basic.sql を参照。演習3は pipeline_with_expectations.sql 50