Databricks Genie Codeだけを使ったAI駆動開発でLakeflow SDPパイプラインを構築する

Genie Codeでデータ調査からSQL生成・実行・検証まで進めるLakeflow SDPの開発を整理します。DMC Bankのデモを参考に、日本語訳したプロンプト、実践時の修正点、SDPとAIの相性についてまとめます。

目次 10項目

Genie Codeだけで、ここまでできるとは思っていませんでした。

DatabricksのGenie Codeに要件を伝えると、データを調べて、Bronze・Silver・GoldのSQLを作り、パイプラインを実行して結果を確認する。今回、この一連の開発を学んで、かなり驚きました。

以前、DatabricksのLakeflow Spark Declarative Pipelines(以下、SDP)について、実践した感想を書きました。そのときは、SQLで変換や品質ルールを宣言できるところが使いやすいと感じましたが、今回はそのSQLを書くところからGenie Codeに任せるという内容です。

参考にした動画

参考にしたのは、The Data MasterのNaval YemulさんによるI Built an Entire Lakeflow Pipeline with Genie Code — Without Writing Codeです。架空のDMC Bankのデータを使い、Genie Codeでパイプラインを構築する流れが紹介されています。

動画だけでなく、サンプルデータ・プロンプト・SQLもGitHubで公開されています。動いているところを見せるだけでなく、自分で学び直せるところまで公開してくださっているのがありがたいです。これだけの内容を分かりやすく共有してくださったNaval Yemulさんには、心から感謝していますし、深く尊敬しています。

細かな画面操作は元の動画を見ていただくとして、ここでは「何を指示すると、どこまで作ってくれるのか」を中心に整理します。

Genie Codeだけで、どこまで進められるのか

タイトルの「Genie Codeだけ」は、パイプラインのコード作成や修正をGenie Codeとの対話で進めるという意味です。入力データの配置や、出力先・権限の準備、生成結果の確認は必要です。

Genie Codeは、DatabricksのLakeflow Pipelines Editor内で、データの調査、複数ファイルの編集、パイプラインの実行、エラーの調査・修正まで扱えます。SQLをチャットに出力して終わるのではなく、ワークスペースのデータやコードを参照しながら作業が進むところがポイントです。公式のパイプライン開発ガイド

工程 Genie Codeへ依頼すること 自分で確認したいこと
データ調査 ファイル、列、型、データの関係を調べる 入力場所と業務上の意味が合っているか
設計 Bronze・Silver・Goldの構成を考える 更新・削除や集計の定義が要件に合うか
実装 SQLファイルと品質ルールを作成する 存在しない列や固定の環境名が混ざっていないか
実行・修正 dry run、実行、エラー修正を進める 修正理由と、変更した範囲が妥当か
結果確認 グラフ、品質結果、出力データを調べる 件数・金額が期待値と一致するか

動画では、Genie Codeが調査、設計、SQL作成、実行といった作業の計画を表示しながら開発を進めています。計画が表示されていても、編集や実行が承認待ちになっているとは限りません。

計画を先に確認したい場合は、「まず計画だけを提示し、ファイルの作成・編集や実行は承認後に進めてください」と明示しておくと、進め方を伝えやすいです。

作るのは、顧客・口座・取引をつなぐパイプライン

入力は、顧客の変更イベント、口座、取引の3種類のCSVです。これらをVolumeへ置き、Bronzeで取り込み、Silverで整形し、Goldで銀行取引の集計を作ります。

DMC BankのCSVをBronzeの取り込み、Silverの整形とCDC、Goldの4つの集計へつなぐ構成図
DMC Bankパイプラインの全体像。公開コードと学習資料をもとに整理
レイヤー 作成するもの 主な役割
Bronze Streaming Table × 3 CSVの増分取り込み、取り込み元や時刻の記録
Silver 主要なStreaming Table × 3 顧客の最新状態の反映、型変換、データ品質チェック
Gold Materialized View × 4 取引サマリー、日次傾向、Customer 360、口座別集計

この図と表は、公開コードをもとに整理した構成です。Genie Codeが生成するテーブル名や、クレンジング用の中間ビューの有無は、指示内容によって変わります。

ここでいうCustomer 360は、顧客に口座数や取引集計を付けて、顧客単位で見られるようにしたデータです。今回の例では、口座と取引をそれぞれ顧客別に集計してから結合する構成になっています。

Genie Codeのみでパイプライン構築を実践する手順

1. VolumeにCSVをアップロードする

まず、書き込み権限のあるカタログにbronze・silver・goldのスキーマと、入力用のVolume(dmc_bank_raw)を作成します。公開されているCSVを、次のフォルダ構成でアップロードします。テーブルやビューは、この後Genie Codeに作成してもらいます。

テキスト / 実行結果
dmc_bank_lab                         ← Catalog
├── bronze                           ← Schema
│   └── dmc_bank_raw                  ← Volume:CSVの保存先
│       ├── customer/
│       │   └── customer_cdc_feed.csv
│       ├── account/
│       │   └── account_seed.csv
│       └── transaction/
│           └── transaction_seed.csv
├── silver                           ← Schema:整形後のデータの出力先
└── gold                             ← Schema:集計結果の出力先

実務では、データソースに応じて取り込みを自動化します。たとえば、S3などに届くファイルを継続的に取り込む用途ではAuto Loaderを利用できます。今回はパイプライン構築に集中するため、CSVの配置は手動で行います。SQLでのファイル取り込みの公式ガイド

2. Genie Codeにプロンプトを送信する

ここからは、Genie Codeにパイプラインの構築を依頼します。Lakeflow Pipelines Editorで新しいパイプラインを開き、Genie Codeのチャットから指示します。

今回、特に参考になるのがプロンプトです。「パイプラインを作って」とだけ頼むのではなく、入力、レイヤーごとの役割、品質ルール、環境の切り替え、検証、最後に報告してほしいことまで指定されています。

以下は、作者が公開しているNotebook内のプロンプトを日本語訳し、今回の環境に合わせて調整したものです。原文からの主な修正点は、カタログをdmc_bank_lab、スキーマをbronze、Volumeをdmc_bank_rawにしたことと、入力ファイルを実際の配置に合わせたことです。特に顧客データは、原文にあるcustomer_seed.csvではなく、公開されているcustomer_cdc_feed.csvを使います。

テキスト / 実行結果
DMC Bankのデータエンジニアリングプロジェクト向けに、エンドツーエンドのLakeflowパイプラインを構築してください。

重要事項:
- SQLだけを使用してください。Pythonは使わないでください。
- 現在のDatabricks Lakeflow PipelinesとApache Spark Declarative Pipelinesのベストプラクティスに従ってください。
- 必要な場合を除き、私にパイプラインのコードを手書きするよう求めないでください。
- まず利用可能なソースファイルとスキーマを調査し、その後パイプラインを作成してください。

入力元:
- Catalog: dmc_bank_lab
- Schema: bronze
- Volume: dmc_bank_raw
- 入力場所: /Volumes/dmc_bank_lab/bronze/dmc_bank_raw/

入力Volumeには、次のCSVデータセットがあります。
- customer/customer_cdc_feed.csv
- account/account_seed.csv
- transaction/transaction_seed.csv

アーキテクチャ:
次の完全なMedallion Architectureを実装してください。

Source Volume → Bronze → Silver → Gold

1. Bronze — メタデータ駆動の取り込み

- SQLを使用してください。
- 取り込みにはStreaming Tableを使用してください。
- read_files / Auto Loaderをストリーミングの読み取り方式で使用してください。
- 入力ごとに無関係な取り込みロジックを個別に手作業で作るのではなく、メタデータ駆動で再利用可能な方法で実装してください。
- CSVファイルを増分処理してください。
- 必要に応じて、入力ファイル・パス、取り込み時刻などの有用なメタデータを保持してください。
- 適切なスキーマ推論・スキーマ処理を使用してください。
- Bronzeの変換は最小限にし、元データに近い状態を保ってください。

2. Silver — クレンジングとデータ品質

BronzeからSilverのStreaming Tableを作成してください。
変換を設計する前に、実際のスキーマとデータの関係を調べてください。

以下を含む、適切な変換を適用してください。
- データ型の統一
- NULLの処理
- 重複の処理
- 参照整合性・データ整合性のチェック
- 業務ルールの検証
- 適切な列の標準化

SQLの制約を使って、Lakeflowのデータ品質Expectationを追加してください。
実際のDMC Bankのスキーマに基づいて、妥当なExpectationを選んでください。

各Expectationでは、次を行ってください。
- 意味の分かる名前を付ける。
- ルールを明確に示す。
- WARN、DROP ROW、FAIL UPDATEを適切に使い分ける。
- 適切な場合には明らかに不正なレコードを除外し、
  パイプラインの整合性に関わる重大な違反の場合だけ更新を失敗させる。

Expectationを確定する前に、選んだ品質ルールと、その理由を説明してください。

3. Gold — 業務KPI

Silverレイヤーに基づいてGoldのMaterialized Viewを作成してください。
銀行業務にとって意味のあるKPIを含む、業務で利用できるデータセットを作成してください。

少なくとも以下を含めてください。
- 総取引件数
- 総取引金額
- 平均取引金額
- アクティブ顧客数
- 時系列での取引傾向
- 必要に応じた顧客別または口座別の取引指標

入力データに実際に存在する列と関係を使用してください。
存在しない列を作り出さないでください。

4. 環境のパラメータ化

DEV → STAGE → PRODへ移行しやすいパイプラインにしてください。
カタログ名を固定値で埋め込まず、同じコードを複数環境へデプロイできるように、
カタログや環境固有の値をパラメータ化してください。

次を使用してください。
- 現在の開発環境にはdmc_bank_lab
- StageとProductionには設定可能なカタログパラメータ

変換ロジックの中に環境固有のカタログ名を固定値で埋め込まないでください。
スキーマやVolumeパスもパラメータ化すべきか判断し、本番向けに最も整理された方法を提案してください。

5. パイプラインの設計

- Lakeflowの宣言的な依存関係の解決を利用してください。
- データセットへの参照によって、Bronze → Silver → Goldの依存関係を明確にしてください。
- BronzeとSilverにはStreaming Tableを使用してください。
- Goldの集計にはMaterialized Viewを使用してください。
- 現在のLakeflowの命名規則とSQL構文に従ってください。
- 非推奨のDLT構文を使用しないでください。
- 従来のLIVEスキーマ構文を使用しないでください。

6. 検証

パイプラインを生成したら、次を行ってください。
- パイプラインを検証する。
- 実行する。
- パイプライングラフを確認する。
- データ品質の結果を確認する。
- Bronze、Silver、Goldの出力を検証する。
- エラーが発生したら、根本原因を調査し、パイプラインを修正して再実行する。
- エラー修正の際に何を変更したか説明する。

7. 最終的な出力

最後に、次を提示してください。
- パイプラインのアーキテクチャ
- 作成したテーブル・ビュー
- 実装したデータ品質Expectation
- 作成したGoldのKPI
- 作成したパラメータ
- 置いた仮定
- 本番デプロイに向けた推奨事項

目標は、SQLとGenie Codeだけを使って、実用的で本番を意識した
DMC BankのLakeflowパイプラインを作成することです。

今回、このプロンプトでGenie Codeに作業を依頼すると、10〜15分ほどかかりました。

Genie Codeにパイプライン構築のプロンプトを送信した画面
入力データや品質ルール、検証までまとめてGenie Codeへ依頼

3. 追加指示:SilverのcustomerをSCD Type 1に修正する

テキスト / 実行結果
Silverのcustomerテーブルは、SCD Type 1になるよう修正したいです。
operation、event_timestampを用いてAUTO CDCを使い、SCD Type 1で顧客の現在状態を保持してください。

SCD Type 1は、変更前の履歴を残さず、顧客ごとの現在の状態を保持する方式です。今回の指示では、event_timestampで変更の順序を決め、operationで削除などの操作を判断させます。AUTO CDCのSQLリファレンス

生成してくれたSQLが下記です。SQLを自分で書かずにここまで作れるのは、かなり楽になったと感じます。

Genie Codeが生成した、AUTO CDCで顧客の現在状態を保持するSCD Type 1のSQL
Genie Codeが生成したSilverの顧客テーブルとAUTO CDCの定義

4. 追加指示:Goldに4つのMaterialized Viewを作成する

テキスト / 実行結果
Goldレイヤーには、以下の4つのMaterialized Viewを作成するように修正してください。
- transaction_type、transaction_status、direction別に集計した取引KPI
- 時系列分析のための日次取引動向
- ポートフォリオ分析のための口座単位の取引指標
- 口座・取引指標を含む顧客単位の360度ビュー

Goldの構成も最初の指示だけでは伝えきれていなかったようなので、追加で修正を依頼しました。これで、Goldに4つのMaterialized Viewを作成できました。

5. 結果:SDPパイプラインが完成

Genie Codeとの対話だけで作成したパイプラインが完成し、実行も成功しました。一つひとつの処理はもう少し見直す必要があるものの、大枠は想定した構成になっていそうです。ここまでの作業をAIが進めてくれるなら、かなりの工数削減や、手作業によるミスの減少が見込めそうです。

ただし、実行の成功だけでは、集計結果が要件どおりかまでは分かりません。顧客の更新・削除が反映されるか、結合で件数が増えていないか、日次集計の粒度や対象ステータスが意図どおりかは、生成されたSQLと出力データで確認する必要があります。

Genie Codeで構築し、実行が成功したSDPパイプラインの依存関係グラフ
BronzeからSilver、Goldまでつながったパイプラインの実行結果

SDPの開発の型は、AIと相性がよいと思う

SDPは、取り込みをStreaming Table、集計をMaterialized Viewで定義し、データセット間の参照で依存関係を表す、といった開発の型がある程度決まっています。この型に沿って要件を伝えられることも、AIと相性がよい理由だと思います。

今まで1からSQLを書いてきたエンジニアとしては、正直、革命的な技術のように感じています。取り込み、型変換、品質チェック、集計を一つずつ書いていた作業が、要件を伝えて生成結果を確認する流れになっている。しかも、その先の実行や修正まで対話で進められるわけです。

その分、SQLを読んで「この結合だと件数が増える」「この集計では削除済みの顧客が対象外になる」と判断できることは、引き続き大事になりそうです。これまでSQLを書いてきた経験を、要件の伝え方や結果の検証に使えるところにも期待しています。

今回いちばん印象に残ったのは、Genie Codeに任せられる範囲の広さです。SQLを書く作業だけでなく、データを調べて、構成を考え、実行結果を確認するところまで、一連の開発として扱えるようになっています。

これまで自分で書いていた処理をAIに任せられることには驚きましたし、その分、何を作るのか、結果が正しいのかを考えることに時間を使えるのはよいですね。SDPの使いやすさを、AI駆動開発という観点から改めて感じました。