データのプロファイリングと品質の確保

ポリシーとしてのコードによるデータ品質ワークフローを構築します。このチュートリアルでは、宣言型でバージョン管理されたファイルにデータ品質の期待値を定義することで、手動の UI ドリブン プロセスから脱却する方法について説明します。

Human-in-the-Loop アプローチ(AI が最初のルールを作成し、ユーザーが確認、調整、検証する)を使用すると、プロファイル統計をデータ品質フレームワークにすばやく変換できます。

目標

  • マテリアライズド ビューを使用してネストされた BigQuery データをフラット化し、Knowledge Catalog のプロファイリングを有効にします。
  • Python クライアント ライブラリを使用して Knowledge Catalog プロファイル スキャンを実行します。
  • Gemini CLI を使用して、プロファイル統計に基づいてデータ品質ルールを生成します。
  • 人間参加型のレビュー プロセスを使用して、AI が生成したルールを Knowledge Catalog 品質スキャンとして検証してデプロイします。

始める前に

始める前に、課金が有効になっている Google Cloud プロジェクトがあることを確認してください。

環境を準備する

次の手順では、Cloud Shell(クラウドで実行されるコマンドライン環境)を使用します。

  1. コンソールの右上のツールバーにある [Cloud Shell をアクティブにする] をクリックします。 Google Cloud 環境がプロビジョニングされ、接続されるまでしばらく待ちます。

  2. Cloud Shell で、プロジェクト ID と環境変数を設定します。

    export PROJECT_ID=$(gcloud config get-value project)
    gcloud config set project $PROJECT_ID
    export LOCATION="us-central1"
    export BQ_LOCATION="us"
    export DATASET_ID="dataplex_dq_codelab"
    export TABLE_ID="ga4_transactions"
    

    一般公開のサンプルデータも us(マルチリージョン)にあるため、ロケーションとして us(マルチリージョン)を使用します。BigQuery クエリの場合、ソースデータと宛先テーブルは同じロケーションに存在する必要があります。

  3. 必要なサービスを有効にします。

    gcloud services enable dataplex.googleapis.com \
                           bigquery.googleapis.com \
                           serviceusage.googleapis.com
    
  4. サンプルデータと結果を保存する BigQuery データセットを作成します。

    bq --location=us mk --dataset $PROJECT_ID:$DATASET_ID
    
  5. Google Merchandise Store の一般公開の e コマース データセットから取得したサンプルデータを準備します。

    次の bq コマンドは、dataplex_dq_codelab データセットに新しいテーブル ga4_transactions を作成します。スキャンを迅速に実行するため、1 日(2021-01-31)のデータのみをコピーします。

    bq query \
    --use_legacy_sql=false \
    --destination_table=$PROJECT_ID:$DATASET_ID.$TABLE_ID \
    --replace=true \
    'SELECT * FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131`'
    
  6. このチュートリアルのフォルダ構造とサポート ファイルを含む GitHub リポジトリのクローンを作成します。

    # Perform a shallow clone to get only the latest repository structure without the full history
    git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git
    cd devrel-demos
    
    # Specify and download only the folder we need for this lab
    git sparse-checkout set data-analytics/programmatic-dq
    cd data-analytics/programmatic-dq
    

    このディレクトリはアクティブな作業領域です。

ネストされたデータをプロファイリングする

データ プロファイリングを使用すると、Knowledge Catalog は、データの null の割合、一意性、値の分布など、最上位の列の統計情報を検出して、データを理解するのに役立ちます。

ネストされたフィールドの統計情報を取得するには、一連のマテリアライズド ビューを使用してデータをフラット化します。これにより、ネストされた各フィールドが、Knowledge Catalog でプロファイリングできる最上位の列に変換されます。

ネストされたスキーマを取得する

すべてのネストされた構造を含むソーステーブルの完全なスキーマを取得し、出力を JSON ファイルとして保存します。

bq show --schema --format=json $PROJECT_ID:$DATASET_ID.$TABLE_ID > bq_schema.json

スキーマを表示する

jq < bq_schema.json

bq_schema.json ファイルには複雑な構造が表示されます。

マテリアライズド ビューでデータをフラット化する

ネストされたデータをフラット化する場合は、同じビューで複数の独立した配列をネスト解除しないことが重要です。これを行うと、配列間で暗黙的なクロス結合(デカルト積)が実行され、行が誤って乗算され、データが破損します。

代わりに、複数のビューを作成することをおすすめします。各ビューは特定の目的で構築されます。各ビューは、単一の明確な詳細レベルを維持する必要があります。このステップでは、次のマテリアライズド ビューを作成します。

  • セッション フラット ビューmv_ga4_user_session_flat.sql): イベントごとに 1 行。
  • トランザクション ビューmv_ga4_ecommerce_transactions.sql): トランザクションごとに 1 行。
  • アイテムビューmv_ga4_ecommerce_items.sql): アイテムごとに 1 行。

プロジェクト リポジトリの devrel-demos/data-analytics/programmatic-dq ディレクトリには、これらのビューを定義する 3 つの SQL ファイルがあります。

次の BigQuery コマンドを使用して、Cloud Shell からこれらのファイルを実行します。

envsubst < mv_ga4_user_session_flat.sql | bq query --use_legacy_sql=false
envsubst < mv_ga4_ecommerce_transactions.sql | bq query --use_legacy_sql=false
envsubst < mv_ga4_ecommerce_items.sql | bq query --use_legacy_sql=false

Python クライアントでプロファイル スキャンを実行する

これで、マテリアライズド ビューごとに Knowledge Catalog データ プロファイル スキャンを作成して実行できます。次の Python スクリプトでは、google-cloud-dataplex クライアント ライブラリを使用してこのプロセスを自動化します。

スクリプトを実行する前に、プロジェクト ディレクトリに隔離された Python 仮想環境を作成します。

# Create the virtual environment
python3 -m venv dq_venv

# Activate the environment
source dq_venv/bin/activate

仮想環境に Knowledge Catalog クライアント ライブラリをインストールします。

# Install the Dataplex client library
pip install google-cloud-dataplex

環境を設定してライブラリをインストールしたので、1_run_dataplex_scans.py スクリプトを使用する準備ができました。このスクリプトは、各マテリアライズド ビューのスキャンを作成して実行することで、3 つのマテリアライズド ビューをプロファイリングします。完了すると、次のステップで AI を活用したデータ品質ルールを生成するために使用する豊富な統計概要が出力されます。

Cloud Shell ターミナルからスクリプトを実行します。

python3 1_run_dataplex_scans.py

プロファイル スキャンを確認する

新しいプロファイル スキャンは、 Google Cloud コンソールで確認できます。

  1. ナビゲーション メニューで [Knowledge Catalog] に移動し、[管理] セクションで [データ プロファイリングと品質] を選択します。
  2. 3 つのプロファイル スキャンが最新のジョブ ステータスとともに一覧表示されます。スキャンをクリックすると、詳細な結果が表示されます。

プロファイルの結果を JSON にエクスポートする

Gemini がプロファイル スキャンを読み取るには、その内容をローカル ファイルに抽出する必要があります。

2_dq_profile_save.py スクリプトを使用して、mv_ga4_user_session_flat ビューの最新の成功したスキャンを見つけ、プロファイル データをダウンロードして、dq_profile_results.json という名前のファイルに保存します。

python3 2_dq_profile_save.py

スクリプトが完了すると、 ディレクトリに dq_profile_results.json ファイルが作成されます。このファイルには、データ品質ルールを生成するために必要な詳細な統計メタデータが含まれています。次のコマンドを実行して、その内容を確認します。

cat dq_profile_results.json

Gemini CLI でデータ品質ルールを生成する

Gemini CLI を使用して、ローカル プロファイル スキャン結果を読み取ることができます。

複雑なデータセットのデータ品質ルールを手動で作成するには、時間がかかり、エラーが発生しやすくなります。生成 AI は、包括的な初期データ品質構成を数秒で生成することで、このワークフローを高速化します。これにより、手動でのタスク実行から高度な監督に移行できます。

Gemini CLI を起動するには、次のコマンドを使用します。

gemini

これで、品質ルールを生成する準備ができました。CLI は現在のディレクトリ内のファイルを読み取ることができるため、新しいプロファイル スキャンデータを直接使用できます。

Gemini に計画の作成を指示する

Gemini にエキスパート アナリストとして行動し、データ品質ルールを作成するための計画を提案するよう依頼します。Gemini に YAML ファイルをまだ書き込まないように指示して、分析に集中させます。Gemini は JSON ファイルを分析し、構造化された計画を返します。

You are an expert Google Cloud Dataplex engineer.
Your first task is to create a plan. I have a file in the current directory named ./dq_profile_results.json.
Based on the statistical data within that file, propose a step-by-step plan to create a Dataplex data quality rules file.
Your plan should identify which specific columns are good candidates for rules like nonNullExpectation, setExpectation, or rangeExpectation, and explain why based on the metrics (for example, "Plan to create a nonNullExpectation for column X because its null percentage is 0%").
Do not write the YAML file yet. Just provide the plan.

データ品質ルールを生成する

Gemini の計画は統計パターンに完全に依存しており、特定のビジネス知識がありません。

計画を確認し、次の質問を自問してください。

  • ビジネスの目標とコンテキストに沿っていますか?
  • 統計的に健全なルールが実際には非現実的ですか(増加するテーブルの厳格な rowCount など)?

Gemini で計画を調整するか、次のプロンプト例を使用してそのまま承認します。プロンプトはフィードバックを提供することから始まり、Knowledge Catalog には正確な YAML 構造が必要なため、作業ディレクトリに dq_rules.yaml ファイルを生成して DataQualityRule 仕様に準拠するように Gemini に指示します。これにより、構文エラーや古いスキーマ バージョンの使用を防ぐことができます。


- "The plan looks good. Please proceed."
- "The rowCount rule is not necessary, as the table size changes daily. The rest of the plan is approved. Please proceed."
- "For the setExpectation on the geo_continent column, please also include 'Antarctica'."

Once you have incorporated my feedback, please generate the `dq_rules.yaml` file.

You must adhere to the following strict requirements:

- Schema Compliance: The YAML structure must strictly conform to the DataQualityRule specification. For a definitive source of truth, you must refer to the sample_rule.yaml file in the current directory and the DataQualityRule class definition. Search for the `data_quality.py` file inside the `./dq_venv/lib/` directory to read this class definition.

- Data-Driven Values: All rule parameters, such as thresholds or expected values, must be derived directly from the statistical metrics in dq_profile_results.json.

- Rule Justification: For each rule, add a comment (#) on the line above explaining the justification, as you outlined in your plan.

- Output Purity: The final output must only be the raw YAML code block, perfectly formatted and ready for immediate deployment.

データ品質スキャンを作成して実行する

これで、エージェントが生成したデータ品質ルールのセットが作成されました。これをスキャンとして登録してデプロイできます。

  1. /quit と入力するか、Ctrl+C を 2 回押して Gemini CLI を終了します。

  2. 次に、Knowledge Catalog でデータスキャンを作成します。

    export DQ_SCAN="dq-scan"
    gcloud dataplex datascans create data-quality $DQ_SCAN \
        --project=$PROJECT_ID \
        --location=$LOCATION \
        --data-quality-spec-file=dq_rules.yaml \
        --data-source-resource="//bigquery.googleapis.com/projects/$PROJECT_ID/datasets/$DATASET_ID/tables/mv_ga4_user_session_flat"
    
  3. 最後に、スキャンを実行します。

    gcloud dataplex datascans run $DQ_SCAN --location=$LOCATION --project=$PROJECT_ID
    

    このコマンドにより、dq-scan という名前のデータ品質スキャンが作成されます。

  4. コンソールの Knowledge Catalog セクションで、スキャンの進行状況を確認します。 Google Cloud

    1. ナビゲーション メニューで [Knowledge Catalog] に移動し、[管理] セクションで [データ プロファイリングと品質] を選択します。
    2. dq-scan を見つけます。スキャンが完了したら、スキャンをクリックして結果を表示します。

クリーンアップ

このチュートリアルで作成したリソースの定期請求を回避するには、リソースを削除します。

Knowledge Catalog スキャンを削除する

この Codelab の特定のスキャン名を使用して、プロファイル スキャンと品質スキャンを削除します。

# Delete the Data Quality Scan
gcloud dataplex datascans delete dq-scan \
    --location=us-central1 \
    --project=$PROJECT_ID --quiet

# Delete the Data Profile Scans
gcloud dataplex datascans delete profile-scan-mv-ga4-user-session-flat \
    --location=us-central1 \
    --project=$PROJECT_ID --quiet

gcloud dataplex datascans delete profile-scan-mv-ga4-ecommerce-transactions \
    --location=us-central1 \
    --project=$PROJECT_ID --quiet

gcloud dataplex datascans delete profile-scan-mv-ga4-ecommerce-items \
    --location=us-central1 \
    --project=$PROJECT_ID --quiet

サンプル データセットを削除する

一時的な BigQuery データセットとそのテーブルを削除します。

bq rm -r -f --dataset $PROJECT_ID:dataplex_dq_codelab

ローカル ファイルを削除する

Python 仮想環境を無効にして、クローンが作成されたリポジトリとその内容を削除します。

deactivate
cd ../../..
rm -rf devrel-demos

まとめ

エンドツーエンドのプログラムによるデータ ガバナンス ワークフローを構築できました。

Gemini と Knowledge Catalog を組み合わせることで、AI を活用したガバナンスの基盤を構築しました。このアプローチはガバナンス ループを置き換えるものではありませんが、ルール作成プロセスを高速化するため、ビジネス ロジックに基づいてルールを検証して調整することに集中できます。

次のステップ