第2章 データ準備 / 想定学習時間:30〜40分 / 最終確認:2026年8月

2-1. Unity CatalogおよびDelta Lakeでのデータ管理基礎

🎯 この節の学習目標

1. なぜGenAIエンジニアがデータ管理を学ぶのか

RAG(Retrieval-Augmented Generation)アプリケーションの品質は、LLMそのものよりも「どんなデータを、どんな状態で持っているか」に大きく左右されます。試験の第2セクション「Data Preparation」は、まさにこのデータ側の設計を問うセクションであり、その土台となるのがDatabricksの2つの中核技術です。

ソース文書からDatabricks AI Search(旧 Vector Search)インデックスに至るまで、RAGパイプラインが扱うすべてのデータをこの2つの上に置くのがDatabricksにおける定石です。まずそれぞれの基礎を押さえましょう。

2. Unity Catalog:3レベル名前空間とオブジェクト

Unity Catalogでは、あらゆる資産を catalog.schema.object という3レベルの名前空間で識別します。たとえば prod.rag_app.docs_chunks は「prodカタログ内のrag_appスキーマにあるdocs_chunksテーブル」を指します。

レベル役割
Catalog(カタログ)最上位の区分。環境(dev/prod)や事業部単位で分けることが多いprod, dev
Schema(スキーマ)カタログ内の論理グループ。プロジェクトやアプリ単位rag_app
Object(オブジェクト)実体。テーブル、ビュー、Volume、関数、モデルなどdocs_chunks

3レベル目に置けるオブジェクトの種類が重要です。GenAIアプリでよく使うのは次の4つです。

💼 例:RAGプロジェクトの名前空間設計

社内規程QAボットを作る場合、次のように整理できます。

原本からモデルまでを同じスキーマ配下に置くことで、権限・リネージ・監査を一元管理できます。

📝 試験のポイント

PDFなどの非構造化ソース文書はどこに置くべきか?」と問われたら、答えはUnity CatalogのVolumeです。DBFSのルートやローカルパスを選ばせる誤答選択肢が出ます。ガバナンス(権限・監査)の対象にできるのはUC管理下のVolumeである、という点が判断基準です。

3. Delta Lake:RAGパイプラインを支えるテーブル形式

Delta Lakeは、Parquetファイルにトランザクションログを組み合わせたオープンなストレージ形式で、Databricksのテーブルのデフォルトです。GenAIエンジニアとして押さえるべき機能は次のとおりです。

機能内容RAGでの意味
ACIDトランザクション書き込みの原子性・一貫性を保証パイプラインが途中で失敗しても中途半端なデータが残らない
タイムトラベル過去バージョンのテーブルを参照・復元できる「先週のインデックスの元データ」を再現でき、品質劣化の原因調査に有効
スキーマ強制 / 進化定義と異なるスキーマの書き込みを拒否(または明示的に進化)チャンクテーブルの列構成が勝手に壊れるのを防ぐ
Change Data Feed(CDF)行レベルの変更(挿入・更新・削除)を差分として読み出せるAI SearchのDelta Sync Indexが差分同期に利用する。有効化が前提条件

特にChange Data Feedは試験よく問われます。AI SearchのDelta Sync Index(4章で詳述)は、ソースのDeltaテーブルの変更を自動でインデックスに反映しますが、その仕組みはCDFに依存しています。ソーステーブルには次のように設定します。

# チャンクテーブル作成時にCDFを有効化
spark.sql("""
CREATE TABLE prod.hr_qa.docs_chunks (
  chunk_id BIGINT,
  text STRING,
  source_path STRING
) TBLPROPERTIES (delta.enableChangeDataFeed = true)
""")

📝 試験のポイント

「Delta Sync Indexを作ろうとしたら失敗した/更新が反映されない。原因は?」という問いに対し、「ソーステーブルで Change Data Feedが有効になっていない」が正解になるパターンがあります。delta.enableChangeDataFeed = true というプロパティ名まで覚えておきましょう。

4. RAGパイプラインの成果物をDeltaテーブルで持つ

RAGのデータ準備は「生文書 → パース済みテキスト → チャンク → インデックス」という段階を踏みます。各段階の成果物をUC管理下のDeltaテーブル(またはVolume)として明示的に保存するのが定石です。

  1. 生文書(raw) — VolumeにPDF等をそのまま格納。原本は加工しない。
  2. パース済みテキスト(parsed) — 文書1件=1行のDeltaテーブル。抽出テキストとファイルパスを持つ。
  3. チャンク(chunks) — チャンク1件=1行のDeltaテーブル。主キー・テキスト・メタデータを持ち、CDFを有効化。
  4. インデックス — チャンクテーブルをソースにDelta Sync Indexを作成。

中間成果物をテーブルとして残す理由は3つあります。①失敗時に途中から再実行できる、②各段階の品質を検査・デバッグできる、③リネージにより「この回答の根拠はどの原本か」を追跡できる。アドホックにメモリ上で処理して直接インデックス化する構成は、小規模な実験を除き避けるべきです。

5. 権限・リネージ・監査の基礎

Unity Catalogの価値はガバナンスにあります。詳細は第6章で扱いますが、データ準備の段階で知っておくべき基礎は次の3点です。

💼 例:機密文書を含むRAGでの権限設計

人事規程には全社員が読める文書と人事部限定の文書が混在するとします。この場合、スキーマやテーブルを権限境界で分け(例:hr_qa.docs_chunks_publichr_qa.docs_chunks_hr_only)、GRANTでアクセス可能なグループを制御します。インデックス化の前段階、つまりデータ準備の時点で権限境界を設計しておくことが、後からの手戻りを防ぎます。

✅ この節のまとめ

練習問題

問1. RAGアプリケーションのソースとなる大量のPDFファイルをDatabricks上で管理したい。ガバナンス(権限管理・監査)の対象にできる格納先として最も適切なのはどれか。

  1. ドライバーノードのローカルファイルシステム
  2. DBFSルート(/dbfs/tmp 配下)
  3. Unity CatalogのVolume
  4. ノートブックにBase64で埋め込む
解答と解説を見る

正解:C

非構造化ファイルをUnity Catalogの権限体系・監査の下で管理できるのはVolumeです。Aのローカルファイルシステムはクラスタ終了で消え、共有もできません。BのDBFSルートはUCのガバナンス対象外で、本番データの置き場として推奨されません。Dはそもそもファイル管理の手法ではありません。

問2. チャンク化したテキストを格納するDeltaテーブルをソースとして、AI SearchのDelta Sync Index(自動同期型インデックス)を作成したい。ソーステーブルに必要な設定はどれか。

  1. テーブルをexternal tableとして作成する
  2. delta.enableChangeDataFeed = true を設定する
  3. テーブルをZ-ORDERで最適化する
  4. テーブルにプライマリキー制約を設定すれば他の設定は不要
解答と解説を見る

正解:B

Delta Sync Indexはソーステーブルの変更差分をChange Data Feed(CDF)経由で取得して同期します。したがって delta.enableChangeDataFeed = true が必要です。Aのexternal tableは要件と無関係、CのZ-ORDERはクエリ性能最適化であり同期の前提条件ではありません。Dの主キー列はインデックス作成時に指定が必要ですが、それだけではCDFの代わりになりません。

問3. Unity Catalogにおける「prod.support_bot.faq_chunks」という識別子の説明として正しいものはどれか。

  1. prodはワークスペース名、support_botはクラスタ名、faq_chunksはテーブル名である
  2. prodはカタログ、support_botはスキーマ、faq_chunksはその中のオブジェクト(テーブル等)である
  3. prodはスキーマ、support_botはカタログ、faq_chunksはテーブルである
  4. 3レベル名前空間はテーブルにのみ適用され、Volumeやモデルには適用されない
解答と解説を見る

正解:B

UCの名前空間は上位からcatalog.schema.objectの順です。Aのワークスペースやクラスタは名前空間の構成要素ではありません。Cは順序が逆です。Dは誤りで、テーブルだけでなくビュー・Volume・関数・登録モデルも同じ3レベル名前空間で管理されます。

問4. RAGパイプラインで「生文書のパース → チャンク化 → インデックス化」を毎晩実行している。あるとき回答品質が急に低下し、原因調査のため「先週時点のチャンクデータ」を確認したい。最も直接的に役立つDelta Lakeの機能はどれか。

  1. スキーマ強制(Schema Enforcement)
  2. タイムトラベル(Time Travel)
  3. ACIDトランザクション
  4. データスキッピング
解答と解説を見る

正解:B

タイムトラベルは VERSION AS OF / TIMESTAMP AS OF により過去バージョンのテーブルを参照できる機能で、「先週時点のデータ」の確認に直接使えます。Aはスキーマ不整合の書き込み防止、Cは書き込みの整合性保証、Dはクエリ高速化の仕組みであり、過去データの参照はできません。