データ品質の問題をスキャンする

このドキュメントでは、BigQuery と Knowledge Catalog を組み合わせて使用し、データが品質要件を満たしていることを確認する方法について説明します。Knowledge Catalog の自動データ品質を使用すると、BigQuery テーブル内のデータの品質を定義して測定できます。データのスキャンを自動化して、定義済みルールに照らしてデータを検証し、データが品質要件を満たしていない場合はアラートを記録できます。

自動データ品質の詳細については、自動データ品質の概要をご覧ください。

始める前に

  1. Dataplex API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法をご覧ください。

    API の有効化

  2. 省略可: データ プロファイル スキャンの結果に基づいてデータ品質ルールの推奨事項を Knowledge Catalog で生成する場合は、データ プロファイル スキャンを作成して実行します。

必要なロール

このセクションでは、Knowledge Catalog のデータ品質スキャンを使用するために必要な IAM ロールと権限について説明します。

ユーザーの役割と権限

データ品質スキャンの実行と管理に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

  • BigQuery テーブルでデータ品質スキャンを実行します。
  • データ品質スキャン結果を Knowledge Catalog に公開する:
  • DataScan リソースで特定のタスクを実行します。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、データ品質スキャンの実行と管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

データ品質スキャンの実行と管理には、次の権限が必要です。

  • BigQuery テーブルでデータ品質スキャンを実行します。
    • スキャンジョブを実行するには、プロジェクトに対する bigquery.jobs.create
    • スキャンする BigQuery テーブルに対する bigquery.tables.get
    • スキャンする BigQuery テーブルに対する bigquery.tables.getData
  • データ品質スキャン結果を Knowledge Catalog に公開します。
    • スキャンされたテーブルに対する bigquery.tables.update
    • テーブルと同じロケーションにある @bigquery エントリ グループに対する dataplex.entryGroups.useDataQualityScorecardAspect
  • DataScan を作成する: プロジェクトに対する dataplex.datascans.create
  • DataScan を削除する: プロジェクトに対する dataplex.datascans.delete
  • DataScan メタデータを表示する: プロジェクトに対する dataplex.datascans.get
  • ルールと結果を含む DataScan の詳細を表示する: プロジェクトに対する dataplex.datascans.getData
  • DataScan を一覧表示する: プロジェクトに対する dataplex.datascans.list
  • プロジェクトに対する DataScan: dataplex.datascans.run
  • DataScan を更新する: プロジェクトに対する dataplex.datascans.update
  • DataScan の IAM ポリシーを取得または設定する:
    • プロジェクトに対する dataplex.datascans.getIamPolicy
    • プロジェクトに対する dataplex.datascans.setIamPolicy

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

BigQuery の列レベルのアクセス ポリシーで保護されている列にアクセスする必要がある場合は、それらの列に対する権限も必要です。

Knowledge Catalog サービス アカウントのロールと権限

データ品質スキャンやデータ プロファイル スキャンをまだ作成していない場合、またはこのプロジェクトに Knowledge Catalog レイクがない場合は、gcloud beta services identity create --service=dataplex.googleapis.com を実行してサービス ID を作成してください。このコマンドは、Knowledge Catalog サービス ID が存在する場合に該当する ID を返します。

データ品質スキャンを含むプロジェクトの Knowledge Catalog サービス アカウントに、さまざまなソースからデータを読み取って結果をエクスポートするために必要な権限が付与されるように、データ品質スキャンを含むプロジェクトの Knowledge Catalog サービス アカウントに次の IAM ロールを付与するよう管理者に依頼してください。

  • BigQuery テーブルデータを読み取る: スキャンする BigQuery テーブルと、ルールで参照される他のテーブルに対する BigQuery データ閲覧者 roles/bigquery.dataViewer
  • Iceberg REST Catalog テーブルデータの読み取り: スキャン対象の Iceberg REST Catalog テーブルと、ルールで参照されるその他のテーブルに対する BigLake 閲覧者 roles/biglake.viewer
  • スキャン結果を BigQuery テーブルにエクスポートする: 結果のデータセットとテーブルに対する BigQuery データ編集者 roles/bigquery.dataEditor
  • Knowledge Catalog レイクに整理された BigQuery データをスキャンする:
  • Cloud Storage から BigQuery 外部テーブルをスキャンする: Cloud Storage バケットに対する Storage オブジェクト閲覧者 roles/storage.objectViewer

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、さまざまなソースからデータを読み取って結果をエクスポートするために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

さまざまなソースからデータを読み取り、結果をエクスポートするには、次の権限が必要です。

  • BigQuery テーブルデータを読み取る:
    • BigQuery テーブルに対する bigquery.tables.get
    • BigQuery テーブルに対する bigquery.tables.getData
  • スキャン結果を BigQuery テーブルにエクスポートします。
    • 結果データセットとテーブルに対する bigquery.datasets.get
    • 結果データセットとテーブルに対する bigquery.tables.create
    • 結果データセットとテーブルに対する bigquery.tables.get
    • 結果データセットとテーブルに対する bigquery.tables.getData
    • 結果データセットとテーブルに対する bigquery.tables.update
    • 結果のデータセットとテーブルに対する bigquery.tables.updateData
  • Knowledge Catalog レイクに整理された BigQuery データをスキャンする:
    • Dataplex リソースに対する dataplex.lakes.list
    • Dataplex リソースに対する dataplex.lakes.get
    • Dataplex リソースに対する dataplex.zones.list
    • Dataplex リソースに対する dataplex.zones.get
    • Dataplex リソースに対する dataplex.entities.list
    • Dataplex リソースに対する dataplex.entities.get
    • Dataplex リソースに対する dataplex.operations.get
  • Cloud Storage から BigQuery 外部テーブルをスキャンします。
    • Cloud Storage バケットに対する storage.buckets.get
    • Cloud Storage バケットに対する storage.objects.get

管理者は、データ品質スキャンを含むプロジェクトの Knowledge Catalog サービス アカウントに、カスタムロールや他の事前定義ロールを付与することもできます。

BigQuery の列レベルのアクセス ポリシーで保護されている列にアクセスする必要がある場合は、それらの列に対する権限を Knowledge Catalog サービス アカウントに割り当てます。

テーブルで BigQuery 行レベルのアクセス ポリシーが有効になっている場合、Knowledge Catalog サービス アカウントに表示される行のみをスキャンできます。行レベルのポリシーに対する個々のユーザーのアクセス権限は評価されません。

データ品質スキャンを作成する

コンソール

  1. Google Cloud コンソールの BigQuery の [メタデータのキュレーション] ページで、[データのプロファイリングと品質] タブに移動します。

    [データのプロファイリングと品質] に移動

  2. [データ品質スキャンの作成] をクリックします。

  3. [スキャンの定義] ウィンドウで、次のフィールドに入力します。

    1. 省略可: 表示名を入力します。

    2. ID を入力します。リソースの命名規則をご覧ください。

    3. (省略可)説明を入力します。

    4. [テーブル] フィールドで、[参照] をクリックします。スキャンするテーブルを選択し、[選択] をクリックします。標準の BigQuery テーブルと Iceberg REST Catalog テーブルのみがサポートされています。

      マルチリージョン データセット内のテーブルの場合は、データスキャンを作成するリージョンを選択します。

      Knowledge Catalog レイク内で整理されたテーブルを参照するには、[Knowledge Catalog レイク内のブラウジング] をクリックします。

    5. [スコープ] フィールドで、[増分] または [データ全体] を選択します。

      • [増分] を選択した場合、[タイムスタンプ列] フィールドで、新しいレコードが追加されるたびに増加し、新しいレコードの識別に使用できる BigQuery テーブルから、DATE 型または TIMESTAMP 型の列を選択します。テーブルを分割する列でもかまいません。
    6. 省略可: データをフィルタするには、[行のフィルタリング] チェックボックスをオンにします。GoogleSQL 構文の WHEREの一部として使用できる有効な SQL 式で構成される行フィルタを指定します。例: col1 >= 0フィルタには、複数の列条件を組み合わせることができます。例: col1 >= 0 AND col2 < 10

    7. データをサンプリングするには、[サンプリング サイズ] リストでサンプリング率を選択します。0.0~100.0% の範囲のパーセンテージ値(小数点以下 3 桁まで)を選択します。大規模なデータセットの場合は、低いサンプリング率を選択します。たとえば、1 PB のテーブルの場合、0.1%~1.0% の値を入力すると、データ品質スキャンは 1~10 TB のデータをサンプリングします。増分データスキャンの場合、データ品質スキャンは最新の増分にサンプリングを適用します。

    8. 省略可: データ品質スキャンの結果を Knowledge Catalog メタデータとして公開するには、[Knowledge Catalog に結果を公開する] チェックボックスをオンにします。

      最新のスキャン結果は、ソーステーブルの BigQuery ページと Knowledge Catalog ページの [データ品質] タブで表示できます。ユーザーが公開されたスキャン結果にアクセスできるようにするには、このドキュメントのデータ品質スキャンの結果へのアクセスを許可するをご覧ください。

    9. [認証情報のタイプ] については、実行 ID を構成するをご覧ください。

    10. ルールを使用してデータ品質スキャンを作成するには、[ルールの種類> エントリベースのルールで作成] を選択します。

    11. [スケジュール] セクションで、次のいずれかのオプションを選択します。

      • 繰り返し: データ品質スキャンを 1 時間ごと、毎日、毎週、毎月、カスタムのいずれかのスケジュールで実行します。スキャンの実行頻度と時間を指定します。[カスタム] を選択した場合は、cron 形式を使用してスケジュールを指定します。

      • オンデマンド: データ品質スキャンをオンデマンドで実行します。

      • 1 回限りの実行: データ品質スキャンを今すぐ 1 回実行し、自動削除後にスキャンを削除します。この機能はプレビュー版です。

        • スキャン後の結果の自動削除を設定する: 自動削除時間は、スキャンが実行されてから削除されるまでの期間です。自動削除時間が指定されていないデータ品質スキャンは、実行後 24 時間で自動的に削除されます。自動削除の期間は 0 秒(即時削除)から 365 日の範囲で設定できます。
    12. [続行] をクリックします。

  4. [データ品質ルール] ウィンドウで、このデータ品質スキャン用に構成するルールを定義します。

    1. [ルールを追加] をクリックし、次のいずれかのオプションを選択します。

      • プロフィールに基づく推奨事項: 既存のデータ プロファイリング スキャンに基づいて、推奨事項からルールを作成します。

        1. 列の選択: 推奨ルールを取得する列を選択します。

        2. スキャン プロジェクトの選択: データ プロファイリング スキャンがデータ品質スキャンを作成するプロジェクトとは異なるプロジェクトにある場合は、プロファイル スキャンを取得するプロジェクトを選択します。

        3. プロファイルの結果を選択: 1 つ以上のプロファイルの結果を選択し、[OK] をクリックします。これにより、出発点として使用できる推奨ルールのリストが入力されます。

        4. 追加するルールのチェックボックスをオンにして、[選択] をクリックします。選択したルールは、現在のルールリストに追加されます。その後、ルールを編集できます。

      • 組み込みルールの種類: 事前定義ルールからルールを作成します。事前定義ルールのリストを確認します。

        1. 列の選択: ルールを選択する列を選択します。

        2. ルールの種類を選択: 選択するルールの種類を選択し、[OK] をクリックします。表示されるルールの種類は、選択した列によって異なります。

        3. 追加するルールのチェックボックスをオンにして、[選択] をクリックします。選択したルールは、現在のルールリストに追加されます。その後、ルールを編集できます。

      • SQL 行チェックルール: 各行に適用するカスタム SQL ルールを作成します。

        1. [ディメンション] で、ディメンションを 1 つ選択します。

        2. [合格のしきい値] で、チェックに合格する必要があるレコードの割合を選択します。

        3. [列名] で列を選択します。

        4. [SQL 式を指定] フィールドに、ブール値の true(合格)または false(不合格)と評価される SQL 式を入力します。詳細については、サポートされているカスタム SQL ルールの種類と、データ品質ルールを定義するの例をご覧ください。

        5. [追加] をクリックします。

      • SQL 集計チェックルール: カスタム SQL テーブル条件ルールを作成します。

        1. [ディメンション] で、ディメンションを 1 つ選択します。

        2. [列名] で列を選択します。

        3. [SQL 式を指定] フィールドに、ブール値の true(合格)または false(不合格)と評価される SQL 式を入力します。詳細については、サポートされているカスタム SQL ルールの種類と、データ品質ルールを定義するの例をご覧ください。

        4. [追加] をクリックします。

      • SQL アサーション ルール: データの無効な状態を確認するカスタム SQL アサーション ルールを作成します。

        1. [ディメンション] で、ディメンションを 1 つ選択します。

        2. 省略可: [列名] で列を選択します。

        3. [SQL ステートメントを指定] フィールドに、無効な状態と一致する行を返す SQL ステートメントを入力します。行が返された場合、このルールは失敗します。SQL ステートメントの末尾のセミコロンを省略します。詳細については、サポートされているカスタム SQL ルールの種類と、データ品質ルールを定義するの例をご覧ください。

        4. [追加] をクリックします。

    2. 省略可: どのデータ品質ルールでも、モニタリングとアラートに使用するカスタムルール名と説明を割り当てることができます。これを行うには、ルールを編集して、次の詳細を指定します。

      • ルール名: カスタムルール名を 63 文字以下で入力します。ルール名には、文字(az、AZ)、数字(0~9)、ハイフン(-)を使用できます。先頭は文字、末尾は数字または文字にする必要があります
      • 説明: ルールの説明を入力します。最大長は 1,024 文字です。
    3. 前の手順を繰り返して、データ品質スキャンにルールを追加します。完了したら、[次へ] をクリックします。

  5. 省略可: スキャン結果を BigQuery 標準テーブルにエクスポートします。[スキャン結果を BigQuery テーブルにエクスポートする] セクションで、次の操作を行います。

    1. [BigQuery データセットの選択] フィールドで、[参照] をクリックします。 データ品質のスキャン結果を保存する BigQuery データセットを選択します。

    2. [BigQuery テーブル] フィールドで、データ品質スキャンの結果を保存するテーブルを指定します。既存のテーブルを使用している場合は、エクスポート テーブル スキーマと互換性があることを確認してください。指定したテーブルが存在しない場合は、Knowledge Catalog によって作成されます。

  6. 省略可: ラベルを追加します。ラベルは、関連するオブジェクトをまとめてグループ化したり、他の Google Cloud リソースと組み合わせてグループ化できる Key-Value ペアです。

  7. 省略可: データ品質スキャンジョブのステータスと結果に関するアラートを送信するメール通知レポートを設定します。[通知レポート] セクションで [メール ID を追加] をクリックし、最大 5 つのメールアドレスを入力します。次に、レポートの送信先のシナリオを選択します。

    • 品質スコア(<=): ジョブが成功し、データ品質スコアが指定された目標スコアより低い場合にレポートを送信します。0~100 のターゲット品質スコアを入力します。
    • ジョブの失敗: データ品質の結果に関係なく、ジョブ自体が失敗するとレポートが送信されます。
    • ジョブの完了(成功または失敗): データ品質の結果に関係なく、ジョブが終了するとレポートが送信されます。
  8. [作成] をクリックします。

    スキャンが作成されたら、[今すぐ実行] をクリックすることで、いつでもスキャンを実行できます。

gcloud

データ品質スキャンを作成するには、gcloud dataplex datascans create data-quality コマンドを使用します。

ソースデータが Knowledge Catalog レイクに編成されている場合は、--data-source-entity フラグを指定します。

gcloud dataplex datascans create data-quality DATASCAN \
    --location=LOCATION