自動データ品質を使用する

このページでは、Dataplex データ品質スキャンを作成する方法について説明します。

データ品質スキャンの詳細については、自動データ品質についてをご覧ください。

準備

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

    API の有効化

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

必要なロール

  • BigQuery テーブルでデータ品質スキャンを実行するには、BigQuery テーブルの読み取り権限と、テーブルのスキャンに使用するプロジェクトで BigQuery ジョブを作成する権限が必要です。

  • BigQuery テーブルとデータ品質スキャンが異なるプロジェクトにある場合、データ品質スキャン含むプロジェクトの Dataplex サービス アカウントに、対応する BigQuery テーブルに対する読み取り権限を付与する必要があります。

  • データ品質ルールが追加のテーブルを参照している場合、スキャン プロジェクトのサービス アカウントには、同じテーブルに対する読み取り権限が必要です。

  • スキャン結果を BigQuery テーブルにエクスポートするために必要な権限を取得するには、結果のデータセットとテーブルに対する BigQuery データ編集者(roles/bigquery.dataEditor)IAM ロールをDataplex サービス アカウントに付与するよう管理者に依頼してください。これにより次の権限が付与されます。

    • bigquery.datasets.get
    • bigquery.tables.create
    • bigquery.tables.get
    • bigquery.tables.getData
    • bigquery.tables.update
    • bigquery.tables.updateData
  • BigQuery データが Dataplex レイクに編成されている場合は、Dataplex サービス アカウントに Dataplex メタデータ リーダー(roles/dataplex.metadataReader)と Dataplex 閲覧者(roles/dataplex.viewer)の IAM ロールを付与します。または、次のすべての権限が必要です。

    • dataplex.lakes.list
    • dataplex.lakes.get
    • dataplex.zones.list
    • dataplex.zones.get
    • dataplex.entities.list
    • dataplex.entities.get
    • dataplex.operations.get
  • Cloud Storage から BigQuery の外部テーブルをスキャンする場合は、Dataplex サービス アカウントにバケットに対する Cloud Storage roles/storage.objectViewer ロールを付与します。または、Dataplex サービス アカウントに次の権限を割り当てます。

    • storage.buckets.get
    • storage.objects.get
  • Google Cloud コンソールの BigQuery と Data Catalog ページでソーステーブルのデータ品質スキャンの結果を公開する場合は、テーブルに対する BigQuery データ編集者(roles/bigquery.dataEditor)IAM ロールまたは bigquery.tables.update 権限を付与する必要があります。

  • BigQuery の列レベルのアクセス ポリシーで保護されている列にアクセスする必要がある場合は、それらの列に対する Dataplex サービス アカウントの権限を割り当てます。データスキャンを作成または更新しているユーザーには、列に対する権限も必要です。

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

必要なデータスキャンのロール

自動データ品質を使用するには、データスキャンを実行する権限、またはデータスキャンを実行するための事前定義された権限を持つロールが必要です。

次の表に、DataScan 権限の一覧を示します。

権限名 次のことをする権限を付与します。
dataplex.datascans.create DataScan の作成
dataplex.datascans.delete DataScan の削除
dataplex.datascans.get ID やスケジュールなどのオペレーション メタデータを表示するが、結果やルールを表示しない
dataplex.datascans.getData ルールと結果を含む DataScan の詳細を表示する
dataplex.datascans.list DataScan の一覧を取得する
dataplex.datascans.run DataScan を実行する
dataplex.datascans.update DataScan の説明を更新する
dataplex.datascans.getIamPolicy スキャンの現在の IAM 権限を表示する
dataplex.datascans.setIamPolicy スキャンに IAM 権限を設定する

ユーザーに次のロールの 1 つ以上を付与します。

  • DataScan リソースへの完全アクセス権: Dataplex DataScan 管理者(roles/dataplex.dataScanAdmin
  • DataScan リソースへの書き込みアクセス権: Dataplex DataScan 編集者(roles/dataplex.dataScanEditor
  • ルールと結果を除く DataScan リソースへの読み取りアクセス権: Dataplex DataScan 閲覧者(roles/dataplex.dataScanViewer
  • DataScan リソース(ルールと結果を含む)への読み取りアクセス: Dataplex DataScan DataViewer(roles/dataplex.dataScanDataViewer

データ品質ルールを定義する

データ品質ルールは、組み込みルールまたはカスタム SQL チェックを使用して定義できます。 Google Cloud CLI を使用している場合は、これらのルールを JSON ファイルまたは YAML ファイルで定義できます。

次のセクションの例では、さまざまなデータ品質ルールを定義する方法を示します。このルールは、顧客トランザクションに関するデータを含むサンプル テーブルを検証しています。テーブルのスキーマは次のとおりです。

列名 列の型 列の説明
transaction_timestamp タイムスタンプ 取引のタイムスタンプ。テーブルはこのフィールドでパーティション分割されます。
customer_id String(文字列) 8 文字に続いて 16 桁の数字の形式のお客様 ID。
transaction_id String(文字列) トランザクション ID はテーブル全体で一意である必要があります。
currency_id String(文字列) サポートされている通貨の 1 つ。通貨の種類は、ディメンション テーブル dim_currency で使用可能な通貨のいずれかと一致する必要があります。
amount float 取引金額。
discount_pct float 割引率。0 以上 100 以下の値を指定してください。

組み込みのルールタイプを使用してデータ品質ルールを定義する

次のルールは、組み込みのルールの種類に基づいています。Google Cloud コンソールまたは API を使用して、組み込みのルールの種類に基づいてルールを作成できます。 Dataplex は、これらのルールの一部を推奨する場合があります。

列名 ルールの種類 推奨サイズ ルールのパラメータ
transaction_id 一意性チェック 一意性 しきい値: Not Applicable
amount NULL チェック 完全性 しきい値: 100%
customer_id 正規表現チェック 有効性 正規表現: ^[0-9]{8}[a-zA-Z]{16}$
しきい値: 100%
currency_id 値セットチェック 有効性 セット: USD,JPY,INR,GBP,CAN
しきい値: 100%

カスタム SQL ルールを使用してデータ品質ルールを定義する

カスタム SQL ルールを構築するには、次のフレームワークを使用します。

  • 一度に 1 行を評価するルールを作成する場合は、Dataplex がクエリ SELECT COUNTIF(CUSTOM_SQL_EXPRESSION) FROM TABLE を評価する際に成功した行数を生成する式を作成します。Dataplex では、成功した行数がしきい値とチェックされます。

  • 行全体を評価する、またはテーブル条件を使用するルールを作成する場合は、Dataplex がクエリ SELECT IF(CUSTOM_SQL_EXPRESSION) FROM TABLE を評価する際に成功または失敗を返す式を作成します。

  • データセットの無効な状態を評価するルールを作成する場合は、無効な行を返すステートメントを指定します。行が返された場合、ルールは失敗します。SQL ステートメントの末尾のセミコロンを省略します。

  • ソーステーブルとそのフィルタを明示的に記述する代わりに、ルールでデータ参照パラメータ ${data()} を使用することで、データソース テーブルとそのすべての前提条件フィルタを参照できます。前提条件フィルタの例としては、行フィルタ、サンプリング パーセンテージ、増分フィルタなどがあります。${data()} パラメータでは大文字と小文字が区別されます。

次のルールの例は、カスタム SQL ルールに基づいています。

ルールの種類 ルールの説明 SQL 式
行の条件 discount_pct の値が 0 ~ 100 の間かどうかを確認します。 0 <discount_pct および discount_pct < 100
行の条件 currency_id がサポートされている通貨のいずれかであることを検証するリファレンス チェック。 currency_id in (select id from my_project_id.dim_dataset.dim_currency)
テーブルの条件 平均 discount_pct が 30% から 50% の間であることを確認する集計 SQL 式。 30<avg(discount) AND avg(discount) <50
行の条件 日付が将来でないかを確認します。 TIMESTAMP(transaction_timestamp) < CURRENT_TIMESTAMP()
テーブルの条件 平均トランザクション額が国ごとに事前に定義された値より小さいことを確認する BigQuery ユーザー定義関数(UDF)。次のコマンドを実行して、(JavaScript)UDF を作成します。
        CREATE OR REPLACE FUNCTION
        myProject.myDataset.average_by_country (
          country STRING, average FLOAT64)
        RETURNS BOOL LANGUAGE js AS R"""
        if (country = "CAN" && average < 5000){
          return 1
        } else if (country = "IND" && average < 1000){
          return 1
        } else { return 0 }
        """;
       
country=CAN の平均トランザクション金額を確認するルールの例。
        myProject.myDataset.average_by_country(
        "CAN",
        (SELECT avg(amount) FROM
          myProject.myDataset.transactions_table
            WHERE currency_id = 'CAN'
        ))
      
テーブルの条件 discount_pct の異常を識別する BigQuery ML 予測句。割引が customercurrencytransaction に基づいて適用されるかどうかを確認します。このルールは、予測が実際の値と一致するかどうかを 99% 以上の確率で確認します。前提条件: ML モデルは、ルールを使用する前に作成されます。次のコマンドを使用して ML モデルを作成します。
  CREATE MODEL
  model-project-id.dataset-id.model-name
        OPTIONS(model_type='logistic_reg') AS
  SELECT
  IF(discount_pct IS NULL, 0, 1) AS label,
  IFNULL(customer_id, "") AS customer,
  IFNULL(currency_id, "") AS currency,
  IFNULL(amount, 0.0) AS amount
  FROM
  `data-project-id.dataset-id.table-names`
  WHERE transaction_timestamp < '2022-01-01';
  
次のルールで、予測精度が 99% より大きいかを確認します。
      SELECT
        accuracy > 0.99
      FROM
       ML.EVALUATE
        (MODEL model-project-id.dataset-id.model-name,
         (
          SELECT
            customer_id,
            currency_id,
            amount,
            discount_pct
          FROM
            data-project-id.dataset-id.table-names
          WHERE transaction_timestamp > '2022-01-01';
         )
        )
    
行の条件 discount_pct の異常を識別する BigQuery ML 予測関数。この関数は、customercurrencytransaction に基づいて割引を適用するかどうかを確認します。 このルールは、予測が一致しなかったすべての発生回数を識別します。 前提条件: ルールを使用する前に ML モデルが作成されている。次のコマンドを使用して ML モデルを作成します。
  CREATE MODEL
  model-project-id.dataset-id.model-name
        OPTIONS(model_type='logistic_reg') AS
  SELECT
  IF(discount_pct IS NULL, 0, 1) AS label,
  IFNULL(customer_id, "") AS customer,
  IFNULL(currency_id, "") AS currency,
  IFNULL(amount, 0.0) AS amount
  FROM
  `data-project-id.dataset-id.table-names`
  WHERE transaction_timestamp < '2022-01-01';
  
次のルールでは、割引予測がすべての行の実際のものと一致するかどうかを確認します。
       IF(discount_pct > 0, 1, 0)
          =(SELECT predicted_label FROM
           ML.PREDICT(
            MODEL model-project-id.dataset-id.model-name,
              (
                SELECT
                  customer_id,
                  currency_id,
                  amount,
                  discount_pct
                FROM
                  data-project-id.dataset-id.table-names AS t
                    WHERE t.transaction_timestamp =
                     transaction_timestamp
                   LIMIT 1
              )
            )
         )
    
SQL アサーション 割引率が 30 以下の行が存在するかを確認して、今日の discount_pct が 30% より大きいかを検証します。 SELECT * FROM my_project_id.dim_dataset.dim_currency WHERE discount_pct <= 30 AND transaction_timestamp >= current_date()
SQL アサーション(データ参照パラメータを指定)

現在サポートされているすべての通貨で discount_pct が 30% より大きいかを確認します。

日付フィルタ transaction_timestamp >= current_date() は、データソース テーブルの行フィルタとして適用されます。

データ参照パラメータ ${data()}my_project_id.dim_dataset.dim_currency WHERE transaction_timestamp >= current_date() のプレースホルダとして機能し、行フィルタを適用します。

SELECT * FROM ${data()} WHERE discount_pct > 30

gcloud CLI を使用してデータ品質ルールを定義する

次の YAML ファイルの例では、組み込み型を使用したサンプルルールおよびカスタム SQL のサンプルルールと同じルールをいくつか使用しています。この YAML ファイルは、gcloud CLI コマンドの入力として使用できます。

rules:
- uniquenessExpectation: {}
  column: transaction_id
  dimension: UNIQUENESS
- nonNullExpectation: {}
  column: amount
  dimension: COMPLETENESS
  threshold: 1
- regexExpectation:
    regex: '^[0-9]{8}[a-zA-Z]{16}$'
  column : customer_id
  ignoreNull : true
  dimension : VALIDITY
  threshold : 1
- setExpectation :
    values :
    - 'USD'
    - 'JPY'
    - 'INR'
    - 'GBP'
    - 'CAN'
  column : currency_id
  ignoreNull : true
  dimension : VALIDITY
  threshold : 1
- rangeExpectation:
    minValue : '0'
    maxValue : '100'
  column : discount_pct
  ignoreNull : true
  dimension : VALIDITY
  threshold : 1
- rowConditionExpectation:
    sqlExpression : 0 < `discount_pct` AND `discount_pct` < 100
  column: discount_pct
  dimension: VALIDITY
  threshold: 1
- rowConditionExpectation:
    sqlExpression : currency_id in (select id from `my_project_id.dim_dataset.dim_currency`)
  column: currency_id
  dimension: VALIDITY
  threshold: 1
- tableConditionExpectation:
    sqlExpression : 30 < avg(discount_pct) AND avg(discount_pct) < 50
  dimension: VALIDITY
- rowConditionExpectation:
    sqlExpression : TIMESTAMP(transaction_timestamp) < CURRENT_TIMESTAMP()
  column: transaction_timestamp
  dimension: VALIDITY
  threshold: 1
- sqlAssertion:
    sqlStatement : SELECT * FROM `my_project_id.dim_dataset.dim_currency` WHERE discount_pct > 100
  dimension: VALIDITY

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

Console

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

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

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

    1. [表示名] を入力します。

    2. 自分の ID を指定しない場合、スキャン ID は自動的に生成されます。リソースの命名規則をご覧ください。

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

    4. [テーブル] フィールドで [参照] をクリックし、テーブルを選択し、[選択] をクリックします。Dataplex は、標準の BigQuery テーブルのみをサポートしています。

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

      Dataplex レイク内で整理されたテーブルを参照するには、[Dataplex レイク内で参照] をクリックします。

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

      • [増分] を選択した場合: [タイムスタンプ列] フィールドで、BigQuery テーブルから DATE または TIMESTAMP 型の列を選択します。このテーブルは、単調に増加し、新しいレコードを識別するために使用できます。テーブルを分割する列でもかまいません。
    6. (省略可)ラベルを追加します。ラベルとは、key:value ペアで、これを使用すると、関連するオブジェクトや他の Google Cloud リソースと一緒にグループ化できます。

    7. データをフィルタするには、[フィルタ] をクリックします。[行をフィルタする] チェックボックスをオンにします。行フィルタの入力値は、BigQuery 標準 SQL 構文の WHERE 句の一部として使用できる有効な SQL 式である必要があります。例: col1 >= 0。フィルタには、複数の列条件を組み合わせることができます。例: col1 >= 0 AND col2 < 10

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

    9. ソーステーブルの Google Cloud コンソールの BigQuery ページと Data Catalog ページでデータ品質スキャンの結果を公開するには、[BigQuery と Dataplex カタログ UI に結果を公開する] チェックボックスをオンにします。 最新のスキャン結果は、ソーステーブルの BigQuery ページと Data Catalog ページの [データ品質] タブで表示できます。ユーザーが公開されたスキャン結果にアクセスできるようにするには、公開された結果を共有するをご覧ください。次の場合には、公開オプションを使用できないことがあります。

      • 表に必要な権限がない。
      • 結果を公開するように別のデータ品質スキャンが設定されている。

      公開された結果を表示するために必要な権限の詳細については、権限をご覧ください。

    10. [続行] をクリックします。

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

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

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

    [続行] をクリックします。

  5. [データ品質ルール] ウィンドウで、このデータ品質スキャン用に構成するルールを定義します。[ルールを追加] をクリックし、次のいずれかのオプションを選択します。

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

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

      2. プロジェクトのスキャン: 既存のデータ プロファイリング スキャンに基づく推奨事項。デフォルトでは、Dataplex はデータ品質スキャンを作成するものと同じプロジェクトからプロファイリング スキャンを選択します。別のプロジェクトでスキャンを作成した場合は、プロファイル スキャンを取得するプロジェクトを指定する必要があります。

      3. プロファイル結果の選択: 選択した列とプロジェクトに基づいて、複数のプロファイルの結果が表示されます。

      4. 1 つ以上のプロファイル結果を選択し、[OK] をクリックします。これによって選択するルールのリストが入力されます。

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

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

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

      2. ルールの種類を選択する: 選択した列に基づいて、選択可能な複数のルールの種類が表示されます。

      3. 1 つ以上のルールタイプを選択し、[OK] をクリックします。これによって選択するルールのリストが入力されます。

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

    • SQL 行チェックルール: 各行に適用するカスタム 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. [追加] をクリックします。

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

    • ルール名: カスタムルール名を 63 文字以下で入力します。 ルール名には、文字(az、AZ)、数字(0 ~ 9)、ハイフン(-)を使用できます。先頭は文字、末尾は数字または文字にする必要があります
    • 説明: ルールの説明を入力します。最大長は 1,024 文字です。

    [続行] をクリックします。

  6. 省略可: スキャン結果を BigQuery 標準テーブルにエクスポートします。[スキャン結果を BigQuery テーブルにエクスポートする] セクションで、[参照] をクリックして、データ品質スキャンの結果を保存する既存の BigQuery データセットを選択します。

    指定したテーブルが存在しない場合は、Dataplex によって作成されます。既存のテーブルを使用している場合は、エクスポート テーブルのスキーマと互換性があることを確認してください。

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

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

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

gcloud

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

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

gcloud dataplex datascans create data-quality DATASCAN \
    --location=LOCATION \
    --data-quality-spec-file=DATA_QUALITY_SPEC_FILE \
    --data-source-entity=DATA_SOURCE_ENTITY

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

gcloud dataplex datascans create data-quality DATASCAN \
    --location=LOCATION \
    --data-quality-spec-file=DATA_QUALITY_SPEC_FILE \
    --data-source-resource=DATA_SOURCE_RESOURCE

次の変数を置き換えます。

  • DATASCAN: データ品質スキャンの名前。
  • LOCATION: データ品質スキャンを作成する Google Cloud リージョン。
  • DATA_QUALITY_SPEC_FILE: データ品質スキャンの仕様を含む JSON または YAML ファイルのパス。このファイルは、ローカル ファイルまたは接頭辞 gs:// を持つ Cloud Storage パスです。 このファイルを使用して、スキャンのデータ品質ルールを指定します。このファイルで、フィルタ、サンプリング率、スキャン後のアクション(BigQuery へのエクスポート、メール通知レポートの送信など)などの詳細を指定することもできます。JSON 表現のドキュメントをご覧ください。
  • DATA_SOURCE_ENTITY: データ品質スキャンのデータを含む Dataplex エンティティ。例: projects/test-project/locations/test-location/lakes/test-lake/zones/test-zone/entities/test-entity
  • DATA_SOURCE_RESOURCE: データ品質スキャンのデータを含むリソースの名前。例: //bigquery.googleapis.com/projects/test-project/datasets/test-dataset/tables/test-table

REST

API Explorer を使用して、データ品質 スキャンを作成します。

データ プロファイリング スキャンの結果に基づくルールの推奨事項を使用してデータ品質スキャンのルールを作成する場合は、データ プロファイリング スキャンで dataScans.jobs.generateDataQualityRules メソッドを呼び出して推奨事項を取得します。

テーブル スキーマをエクスポートする

データ品質スキャンの結果を既存の BigQuery テーブルにエクスポートするには、テーブルが次のテーブル スキーマと互換性があることを確認します。

列名 列データ型 サブフィールド名
(該当する場合)
サブフィールドのデータ型 モード
data_quality_scan struct/record resource_name string nullable //dataplex.googleapis.com/projects/test-project/locations/europe-west2/datascans/test-datascan
project_id string nullable dataplex-back-end-dev-project
location string nullable us-central1
data_scan_id string nullable test-datascan
data_source struct/record resource_name string nullable エンティティのケース:
//dataplex.googleapis.com/projects/dataplex-back-end-dev-project/locations/europe-west2/lakes/a0-datascan-test-lake/zones/a0-datascan-test-zone/entities/table1

テーブルのケース: //bigquery.googleapis.com/projects/test-project/datasets/test-dataset/tables/test-table
dataplex_entity_project_id string nullable dataplex-back-end-dev-project
dataplex_entity_project_number integer nullable 123456789
dataplex_lake_id string nullable (ソースがエンティティである場合にのみ有効)
test-lake
dataplex_zone_id string nullable (ソースがエンティティである場合にのみ有効)
test-zone
dataplex_entity_id string nullable (ソースがエンティティである場合にのみ有効)
test-entity
table_project_id string nullable test-project
table_project_number integer nullable 987654321
dataset_id string nullable (ソースがテーブルである場合にのみ有効)
test-dataset
table_id string nullable (ソースがテーブルである場合にのみ有効)
test-table
data_quality_job_id string nullable caeba234-cfde-4fca-9e5b-fe02a9812e38
data_quality_job_configuration json trigger string nullable ondemand/schedule
incremental boolean nullable true/false
sampling_percent float nullable (0〜100)
20.0(20% を示す)
row_filter string nullable col1 >= 0 AND col2 < 10
job_labels json nullable {"key1":value1}
job_start_time timestamp nullable 2023-01-01 00:00:00 UTC
job_end_time timestamp nullable 2023-01-01 00:00:00 UTC
job_rows_scanned integer nullable 7500
rule_name string nullable test-rule
rule_type string nullable Range Check
rule_evaluation_type string nullable Per row
rule_column string nullable Rule only attached to a certain column
rule_dimension string nullable UNIQUENESS
job_quality_result struct/record passed boolean nullable true/false
score float nullable 90.8
job_dimension_result json nullable {"ACCURACY":{"passed":true,"score":100},"CONSISTENCY":{"passed":false,"score":60}}
rule_threshold_percent float nullable (0.0〜100.0)
Rule-threshold-pct in API * 100
rule_parameters json nullable {min: 24, max:5345}
rule_pass boolean nullable True
rule_rows_evaluated integer nullable 7400
rule_rows_passed integer nullable 3
rule_rows_null integer nullable 4
rule_failed_records_query string nullable "SELECT * FROM `test-project.test-dataset.test-table` WHERE (NOT((`cTime` >= '15:31:38.776361' and `cTime` <= '19:23:53.754823') IS TRUE));"

データ品質スキャン ジョブに BigQueryExport を構成する場合は、次のガイドラインに沿って操作します。

  • resultsTable フィールドには、//bigquery.googleapis.com/projects/{project-id}/datasets/{dataset-id}/tables/{table-id} の形式を使用します。
  • BigQuery 標準テーブルを使用します。
  • スキャンが作成または更新されたときにテーブルが存在しない場合は、Dataplex によってテーブルが作成されます。
  • デフォルトでは、テーブルは job_start_time 列で毎日パーティション分割されます。
  • テーブルを他の構成でパーティション分割する場合や、パーティションを作成しない場合は、必要なスキーマと構成でテーブルを再作成し、事前に作成されたテーブルを結果テーブルとして用意します。
  • 結果テーブルがソーステーブルと同じ場所にあることを確認します。
  • プロジェクトで VPC-SC が構成されている場合、結果テーブルはソーステーブルと同じ VPC-SC 境界内にある必要があります。
  • スキャン実行ステージでテーブルが変更されると、現在実行中のジョブが以前の結果テーブルにエクスポートされ、テーブルの変更は次のスキャンジョブから有効になります。
  • テーブル スキーマを変更しないでください。列をカスタマイズする必要がある場合は、テーブルにビューを作成します。
  • 費用を削減するには、ユースケースに基づいてパーティションの有効期限を設定します。 詳細については、パーティションの有効期限を設定する方法をご覧ください。

データ品質スキャンを実行する

Console

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

  2. 実行するデータ品質スキャンをクリックします。

  3. [今すぐ実行] をクリックします。

gcloud

データ品質スキャンを実行するには、gcloud dataplex datascans run コマンドを使用します。

gcloud dataplex datascans run DATASCAN \
--location=LOCATION \

次の変数を置き換えます。

  • LOCATION: データ品質スキャンが作成された Google Cloud リージョン。
  • DATASCAN: データ品質スキャンの名前。

REST

API Explorer を使用して、データ品質スキャンを実行します。

データ品質スキャンの結果を表示する

Console

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

  2. スキャンの詳細な結果を表示するには、スキャンの名前をクリックします。

    • [概要] セクションには、いつスキャンが実行されたか、各ジョブでスキャンされたレコード数、すべてのデータ品質チェックに合格したか、失敗した場合、失敗したデータ品質チェックの数、失敗したディメンションなど、過去 7 回のジョブに関する情報が表示されます。

    • [データ品質スキャンの構成] セクションには、スキャンについての詳細が表示されます。

  3. 合格したルールの割合を示すデータ品質スコアを確認するには、[ジョブ履歴] タブをクリックします。ジョブ ID をクリックします。

gcloud

データ品質スキャン ジョブの結果を表示するには、gcloud dataplex datascans jobs describe コマンドを使用します。

gcloud dataplex datascans jobs describe JOB \
--location=LOCATION \
--datascan=DATASCAN \
--view=FULL

次の変数を置き換えます。

  • JOB: データ品質スキャン ジョブのジョブ ID。
  • LOCATION: データ品質スキャンが作成された Google Cloud リージョン。
  • DATASCAN: ジョブが属するデータ品質スキャンの名前。
  • --view=FULL: スキャンジョブの結果を表示するには、FULL を指定します。

REST

API Explorer を使用して、データ品質スキャンの結果を表示します。

スキャン結果の履歴を表示する

Dataplex は、過去 300 件のジョブ、または過去 1 年間のいずれか早いほうのデータ プロファイルのスキャン履歴を保存します。

Console

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

  2. スキャンの名前をクリックします。

  3. [ジョブ履歴] タブをクリックします。

    [ジョブ履歴] タブは、過去のジョブに関する情報を提供します。 すべてのジョブ、各ジョブでスキャンされたレコード数、ジョブのステータス、ジョブの実行時刻、各ルールの合否などが表示されます。

  4. ジョブについての詳細情報を表示するには、[ジョブ ID] 列でジョブをクリックします。

gcloud

データ品質スキャンのすべてのジョブを表示するには、gcloud dataplex datascans jobs list コマンドを使用します。

gcloud dataplex datascans jobs list \
--location=LOCATION \
--datascan=DATASCAN \

次の変数を置き換えます。

  • LOCATION: データ品質スキャンが作成された Google Cloud リージョン。
  • DATASCAN: すべてのジョブを表示するデータ品質スキャンの名前。

REST

API Explorer を使用して、すべてのスキャンジョブを表示します。

公開された結果を共有する

データ プロファイル スキャンを作成する際に、スキャン結果を Google Cloud コンソールの BigQuery と Data Catalog ページで公開することを選択した場合は、最新のスキャン結果が、これらのページの [データ品質] タブで利用可能です。

組織内のユーザーに、公開されたスキャン結果へのアクセスを許可することができます。スキャン結果へのアクセスを許可する手順は次のとおりです。

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

  2. 結果を共有するデータ品質スキャンをクリックします。

  3. [権限] タブに移動します。

  4. [アクセス権を付与] をクリックします。

  5. [新しいプリンシパル] フィールドに、アクセス権限を付与するメールアドレスを追加します。

  6. [ロールを選択] フィールドで、[Dataplex DataScan データ閲覧者] を選択します。

  7. [保存] をクリックします。

プリンシパルの公開スキャン結果へのアクセス権を削除する手順は次のとおりです。

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

  2. 結果を共有するデータ品質スキャンをクリックします。

  3. [権限] タブに移動します。

  4. [Dataplex DataScan データ閲覧者] のロールを削除するプリンシパルを選択します。

  5. [アクセス権を削除] をクリックします。

  6. [確認] をクリックします。

Cloud Logging でアラートを設定する

Cloud Logging のログを使用してデータ品質エラーのアラートを設定する手順は次のとおりです。

Console

  1. Google Cloud コンソールで、Cloud Logging の [ログ エクスプローラ] に移動します。

    [ログ エクスプローラ] に移動

  2. [クエリ] ウィンドウで、クエリを入力します。サンプルクエリをご覧ください。

  3. [クエリを実行] をクリックします。

  4. [アラートを作成] をクリックします。サイドパネルが開きます。

  5. アラート ポリシー名を入力し、[次へ] をクリックします。

  6. クエリを確認します。

    1. [ログをプレビュー] ボタンをクリックして、クエリをテストします。条件に一致するログが表示されます。

    2. [次へ] をクリックします。

  7. 通知の間隔を設定し、[次へ] をクリックします。

  8. アラートの通知先を定義し、[保存] をクリックしてアラート ポリシーを作成します。

または、Google Cloud コンソールで [Monitoring] > [アラート] に移動し、アラートを構成して編集することも可能です。

gcloud

サポートされていません。

REST

APIs Explorer を使用して Cloud Logging でアラートを設定します。

ジョブレベルまたはディメンション レベルのアラートを設定するためのサンプルクエリ

  • データ品質スキャンのデータ品質全体のエラーアラートを設定するサンプルクエリ。

    resource.type="dataplex.googleapis.com/DataScan"
    AND labels."dataplex.googleapis.com/data_scan_state"="SUCCEEDED"
    AND resource.labels.resource_container="projects/112233445566"
    AND resource.labels.datascan_id="a0-test-dec6-dq-3"
    AND NOT jsonPayload.dataQuality.passed=true
    
  • 特定のデータ品質スキャンのディメンション(一意性など)のデータ品質エラーに関するアラートを設定するサンプルクエリ。

    resource.type="dataplex.googleapis.com/DataScan"
    AND labels."dataplex.googleapis.com/data_scan_state"="SUCCEEDED"
    AND resource.labels.resource_container="projects/112233445566"
    AND resource.labels.datascan_id="a0-test-dec6-dq-3"
    AND jsonPayload.dataQuality.dimensionPassed.UNIQUENESS=false
    
  • テーブルのデータ品質エラーに関するアラートを設定するサンプルクエリ。

    • Dataplex レイクで編成されていない BigQuery テーブルに対するデータ品質エラーのアラートを設定します。

      resource.type="dataplex.googleapis.com/DataScan"
      AND jsonPayload.dataSource="//bigquery.googleapis.com/projects/test-project/datasets/testdataset/table/chicago_taxi_trips"
      AND labels."dataplex.googleapis.com/data_scan_state"="SUCCEEDED"
      AND resource.labels.resource_container="projects/112233445566"
      AND NOT jsonPayload.dataQuality.passed=true
      
    • Dataplex レイクに編成された BigQuery テーブルに対するデータ品質エラーのアラートを設定します。

      resource.type="dataplex.googleapis.com/DataScan"
      AND jsonPayload.dataSource="projects/test-project/datasets/testdataset/table/chicago_taxi_trips"
      AND labels."dataplex.googleapis.com/data_scan_state"="SUCCEEDED"
      AND resource.labels.resource_container="projects/112233445566"
      AND NOT jsonPayload.dataQuality.passed=true
      

ルールごとのアラートで設定するサンプルクエリ

  • データ品質スキャンに指定されたカスタムルール名を使用して、失敗したすべてのデータ品質ルールのアラートを設定するサンプルクエリ。

    resource.type="dataplex.googleapis.com/DataScan"
    AND jsonPayload.ruleName="custom-name"
    AND jsonPayload.result="FAILED"
    
  • データ品質スキャンの特定の評価タイプで失敗したすべてのデータ品質ルールのアラートを設定するサンプルクエリ。

    resource.type="dataplex.googleapis.com/DataScan"
    AND jsonPayload.evalutionType="PER_ROW"
    AND jsonPayload.result="FAILED"
    
  • データ品質スキャンに使用されるテーブル内の列に対して、失敗したすべてのデータ品質ルールのアラートを設定するサンプルクエリ。

    resource.type="dataplex.googleapis.com/DataScan"
    AND jsonPayload.column="CInteger"
    AND jsonPayload.result="FAILED"
    

データ品質エラーのトラブルシューティング

行レベルのルールがエラーになるジョブごとに、Dataplex はエラーになったレコードを取得するクエリを提供します。このクエリを実行すると、ルールに一致しなかったレコードが表示されます。

Console

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

  2. レコードのトラブルシューティングを行うスキャンの名前をクリックします。

  3. [ジョブ履歴] タブをクリックします。

  4. データ品質エラーを特定したジョブのジョブ ID をクリックします。

  5. 表示されたジョブ ウィンドウの [ルール] セクションで、[失敗したレコードを取得するクエリ] 列を見つけます。失敗したルールの [クリップボードにクエリをコピー] をクリックします。

  6. BigQuery でクエリを実行して、ジョブの失敗の原因となったレコードを確認します。

gcloud

サポートされていません。

REST

API Explorer を使用して、失敗したジョブの失敗したレコードを取得するクエリを確認します。

データ品質スキャンを更新する

Console

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

  2. スキャンを編集する行で、縦 3 点リーダー > [編集] をクリックします。

  3. 値を編集します。

  4. [保存] をクリックします。

gcloud

データ品質スキャンの説明を更新するには、gcloud dataplex datascans update data-quality コマンドを使用します。

gcloud dataplex datascans update data-quality DATASCAN \
--location=LOCATION \
--description=DESCRIPTION

以下を置き換えます。

  • DATASCAN: 更新するデータ品質スキャンの名前。
  • LOCATION: データ品質スキャンが作成された Google Cloud リージョン。
  • DESCRIPTION: データ品質スキャンの新しい説明。

REST

API Explorer を使用して、データ品質スキャンを編集します。

データ品質スキャンを削除する

Console

  1. Google Cloud コンソールで、[データ品質] ページに移動します。

    データ品質に移動

  2. 削除するスキャンをクリックします。

  3. [削除] をクリックします。

gcloud

データ品質スキャンを削除するには、gcloud dataplex datascans delete コマンドを使用します。

gcloud dataplex datascans delete DATASCAN \
--location=LOCATION \
--async

次の変数を置き換えます。

  • DATASCAN: 削除するデータ品質スキャンの名前。
  • LOCATION: データ品質スキャンが作成された Google Cloud リージョン。

REST

API Explorer を使用して、データ品質スキャンを削除します。

次のステップ