自動データ品質の概要

このドキュメントでは、データの品質を定義して測定できる Dataplex のデータ品質自動向上機能について説明します。データのスキャンを自動化し、定義済みルールに照らしてデータを検証し、データが品質要件を満たしていない場合はアラートを記録できます。データ品質ルールとデプロイメントをコードとして管理することで、データ プロダクション パイプラインの完全性を向上させることができます。

開始するには、Dataplex データ プロファイリング ルールの推奨事項を使用するか、Google Cloud コンソールでカスタム ルールを作成します。Dataplex は、Dataplex 自動データ品質と統合されたモニタリング、トラブルシューティング、Cloud Logging アラートを提供します。

概念モデル

データ品質のスキャンでは、テーブルデータに品質ルールを適用し、結果を報告します。

データのスキャンは、BigQuery と Cloud Storage からデータをサンプリングして、さまざまなタイプのメタデータを推測する Dataplex ジョブです。自動データ品質を使用してテーブルの品質を測定するには、data quality タイプの DataScan オブジェクトを作成します。スキャンは 1 つの BigQuery テーブルでのみ実行されます。スキャンでは Google テナント プロジェクトのリソースを使用するため、独自のインフラストラクチャを設定する必要はありません。

データ品質スキャンの作成と使用は、次の手順から成ります。

  1. データ品質ルールを定義する
  2. ルールの実行を構成する
  3. データ品質スキャンの結果を分析する
  4. モニタリングとアラートを設定する
  5. データ品質エラーのトラブルシューティング

ルールの定義

データ品質スキャンに関連付けられたデータ品質ルールは、データの期待値を定義します。データ品質ルールは次の方法で作成できます。

事前定義ルール

Dataplex では、事前定義ルールとして行レベルと集計の 2 つのカテゴリがサポートされています。

行レベル

行レベルのカテゴリルールの場合、期待値は各データ行に対して適用されます。各行は独立して条件に合格または不合格になります。例: column_A_value < 1

行レベルのチェックでは、合格しきい値を指定する必要があります。ルールに合格する行の割合がしきい値を下回ると、ルールは失敗します。

集計

集計ルールの場合、データ全体で集計された単一の値に対して期待値が適用されます。たとえば、Avg(someCol) >= 10。チェックが合格するには、ブール値 true に評価される必要があります。集計ルールは、行ごとに独立して合格や失敗の回数を示すものではありません。

どちらのルールカテゴリでも、次のパラメータを設定できます。

  • ルールが適用される列。
  • 事前定義された一連のディメンションのディメンション

次の表では、サポートされている行レベルと集計ルールの種類を示します。

ルールタイプ
(Google Cloud Console での名前)
行レベルルールまたは集計ルール 説明 サポートされているカラムの型 ルール固有のパラメータ
RangeExpectation
範囲チェック
行レベル 値が min と max の範囲内にあるかどうかを確認します。 すべての数値型、日付型、タイムスタンプ型の列。 必須:
  • しきい値に合格する割合
  • min 値または max 値: 少なくとも 1 つの値を指定します。
省略可:
  • strict min を有効にする: 有効にすると、ルールチェックでは「>=」ではなく「>」が使用されます。
  • strict max を有効にする: 有効にすると、ルールチェックでは「<=」ではなく「<」が使用されます。
  • ignore null を有効にする: 有効にすると、ルールチェックで null 値が無視されます。
NonNullExpectation
NULL チェック
行レベル 列の値が NULL でないことを確認します。 サポートされているすべての列の型。 必須:
  • しきい値に合格する割合。
SetExpectation
セットのチェック
行レベル 列の値が、セット内の指定された値のいずれかであるかどうかを確認します。 サポートされているすべての列の型(RecordStruct を除く)。 必須:
  • 照合する文字列値のセット。
  • しきい値に合格する割合。
省略可:
  • ignore null を有効にする: 有効にすると、ルールチェックで null 値が無視されます。
RegexExpectation
正規表現チェック
行レベル 指定された正規表現と値を照合します。 文字列 必須:
  • チェックに使用する正規表現パターン。
  • しきい値に合格する割合。
  • 注: Google 標準 SQL は、re2 ライブラリを使用した正規表現をサポートしています。正規表現の構文については、該当するドキュメントをご覧ください。
省略可:
  • ignore null を有効にする: 有効にすると、ルールチェックで null 値が無視されます。
Uniqueness
一意性チェック
集計 列内のすべての値が一意かどうかを確認します。 サポートされているすべての列の型(RecordStruct を除く)。 必須:
  • サポートされているパラメータの列とディメンション。
省略可:
  • ignore null を有効にする: 有効にすると、ルールチェックで null 値が無視されます。
StatisticRangeExpectation
統計情報のチェック
集計 指定された統計測定値が範囲の期待値と一致しているかどうかを確認します。 サポートされているすべての数値列の型。 必須:
  • meanmin、または max の値: 少なくとも 1 つの値を指定します。
省略可:
  • strict min を有効にする: 有効にすると、ルールチェックでは「>=」ではなく「>」が使用されます。
  • strict max を有効にする: 有効にすると、ルールチェックでは「<=」ではなく「<」が使用されます。

サポートされているカスタム SQL ルールの種類

SQL ルールを使用すると、カスタム ロジックで検証を柔軟に拡張できます。これらのルールには次の種類があります。

ルールの種類 行レベルルールまたは集計ルール 説明 サポートされているカラムの型 ルール固有のパラメータ
行の条件 行レベル

WHERE 句で SQL 式を定義して、各行の期待値を指定します。SQL 式は、行ごとに true(成功)または false(失敗)を評価する必要があります。Dataplex は、この期待値に合格した行の割合を計算し、この値を合格しきい値の割合と比較して、ルールの成功または失敗を決定します。

この式は、たとえば参照整合性チェックを行うために、別テーブルへの参照を含めることができます。

すべての列 必須:
  • 使用する SQL 条件
  • しきい値に合格する割合
  • ディメンション
省略可:
  • このルールを関連付ける列。
grossWeight <= netWeight
テーブル条件
(集計 SQL 式)
集計

これらのルールはテーブルごとに 1 回実行されます。ブール値の true(合格)または false(不合格)と評価される SQL 式を指定します。

SQL 式には、式サブクエリを使用して別のテーブルへの参照を含めることができます。

すべての列 必須:
  • 使用する SQL 条件
  • ディメンション
省略可:
  • このルールを関連付ける列

単純な集計の例:
avg(price) > 100

式サブクエリを使用して、別のテーブル全体で値を比較する:
(SELECT COUNT(*) FROM `example_project.example_dataset.different-table`) < COUNT(*)

SQL アサーション 集計

アサーション ルールは、データ品質クエリを使用して、クエリで指定された 1 つ以上の条件を満足しない行を見つけます。無効な状態に一致する行を返すように評価される SQL ステートメントを指定します。クエリが行を返す場合、ルールは失敗します。

SQL ステートメントの末尾のセミコロンを省略します。

SQL ステートメントには、式サブクエリを使用して別のテーブルへの参照を含めることができます。

すべての列 必須:
  • 無効な状態を確認する SQL ステートメント
  • ディメンション
省略可:
  • このルールを関連付ける列。

discount_pct が 100 より大きくならないようにする簡単な集計の例:
SELECT * FROM example_project.example_dataset.table WHERE discount_pct > 100

式サブクエリを使用して、別のテーブル全体で値を比較する:
SELECT * FROM `example_project.example_dataset.different-table` WHERE gross_weight > (SELECT avg(gross_weight) FROM `example_project.example_dataset.different-table`)

ルールの例については、自動データ品質のサンプルルールをご覧ください。

サポートされている SQL 関数については、GoogleSQL リファレンスをご覧ください。

ディメンション

ディメンションを使用すると、モニタリングとアラートに対する複数のデータ品質ルールの結果を集計できます。すべてのデータ品質ルールをディメンションに関連付ける必要があります。Dataplex は、次のディメンションをサポートしています。

  • 鮮度
  • ボリューム
  • 完全性
  • 有効期間
  • 整合性
  • 精度
  • 一意性

ルールで入力された入力

すべての値パラメータは、文字列値として API に渡されます。Dataplex では、BigQuery で指定された形式に従った入力が必要です。

バイナリ型のパラメータは、base64 でエンコードされた文字列として渡すことができます。

タイプ サポートされているファイル形式
バイナリ Base64 でエンコードされた値 YXBwbGU=
タイムスタンプ YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]] [time_zone]
または YYYY-[M]M-[D]D[( |T)[H]H:[M]M:[S]S[.F]][time_zone_offset]
2014-09-27 12:30:00.45-08
日付 YYYY-M[M]-D[D] 2014-09-27
時間 [H]H:[M]M:[S]S[.DDDDDD] 12:30:00.45
DateTime YYYY-[M]M-[D]D [[H]H:[M]M:[S]S[.DDDDDD]] 2014-09-27 12:30:00.45

データ参照パラメータ

カスタム SQL ルールを作成する場合、ソーステーブルとそのフィルタを明示的に記述する代わりに、ルールでデータ参照パラメータ ${data()} を使用することで、データソース テーブルとそのすべての前提条件フィルタを参照できます。Dataplex は、このパラメータをソーステーブルとそのフィルタへの参照として解釈します。前提条件フィルタの例としては、行フィルタ、サンプリング パーセンテージ、増分フィルタなどがあります。

たとえば、my_project_id.dim_dataset.dim_currency というデータソース テーブルがあるとします。新しい日次データに対してのみスキャンする増分データ品質スキャンを実行したいとします。テーブルに、今日のエントリをフィルタする行フィルタ transaction_timestamp >= current_date() が適用されています。

今日の discount_pct を使用して行を見つけるカスタム SQL ルールは、次のようになります。

discount_pct IN (SELECT discount_pct FROM my_project_id.dim_dataset.dim_currency WHERE transaction_timestamp >= current_date())

データ参照パラメータを使用すると、ルールを簡素化できます。テーブルとその前提条件フィルタの記述を ${data()} パラメータに置き換えます。

discount_pct IN (SELECT discount_pct FROM ${data()})

Dataplex は、${data()} パラメータを、今日のエントリを含むデータソース テーブルへの参照(my_project_id.dim_dataset.dim_currency WHERE transaction_timestamp >= current_date())として解釈します。この例では、データ参照パラメータは増分データのみを参照します。

${data()} パラメータでは大文字と小文字が区別されます。

サブクエリ内でエイリアスを使用して参照元テーブルの列を参照する場合は、データ参照パラメータを使用して参照元テーブルを参照するか、テーブル参照を省略します。WHERE 句で直接テーブル参照を使用して、参照元テーブルの列を参照しないでください。

推奨:

  • データ参照パラメータを使用して参照元テーブルを参照します。

    discount_pct IN (
    SELECT discount_pct FROM
    `my_project_id.dim_dataset.dim_currency` AS temp-table
    WHERE
    temp-table.transaction_timestamp = ${data()}.timestamp
    )
    
  • テーブル参照を省略します。

    discount_pct IN (
    SELECT discount_pct FROM
    `my_project_id.dim_dataset.dim_currency` AS temp-table
    WHERE
    temp-table.transaction_timestamp = timestamp
    )
    

非推奨:

  • 直接テーブル参照を使用して、参照元テーブルの列を参照しないでください。

    discount_pct IN (
    SELECT discount_pct FROM
    `my_project_id.dim_dataset.dim_currency` AS temp-table
    WHERE
    temp-table.transaction_timestamp = `my_project_id.dim_dataset.dim_currency`.timestamp
    )
    

ルールの実行

データ品質スキャンを特定の間隔で実行するようにスケジュール設定することも、オンデマンドでスキャンを実行することもできます。データ品質スキャンを管理するには、API または Google Cloud コンソールを使用します。

データ品質スキャンを実行すると、Dataplex によってジョブが作成されます。データ品質スキャンの仕様の一部として、ジョブの範囲を次のいずれかに指定できます。

テーブル全体
それぞれのジョブでテーブル全体が検証されます。
インクリメンタル
それぞれのジョブで増分データが検証されます。増分を定めるには、テーブル内にマーカーとして使用可能な Date / Timestamp 列を用意します。通常、これはテーブルが分割される列です。

データをフィルタリングする

Dataplex は、行フィルタを使用してデータ品質のためにスキャンされるデータをフィルタリングできます。行フィルタを作成すると、特定の期間内や特定のセグメント(特定のリージョンなど)のデータにフォーカスできます。フィルタを使用すると、実行時間とコストを削減できます。たとえば、特定の日付より前のタイムスタンプを持つデータを除外できます。

サンプルデータ

Dataplex では、データ品質スキャンを実行するために、データからサンプリングするレコードの割合を指定できます。より少ないデータサンプルでデータ品質スキャンを作成すると、データセット全体のクエリに比べて実行時間と費用を削減できます。

データ品質スキャンの結果

データ品質スキャンの結果は Dataplex で確認できます。 次の方法でスキャン結果を確認して分析することもできます。

  • 結果を BigQuery にエクスポートする

    スキャン結果を BigQuery テーブルにエクスポートして、さらに分析を行うことができます。レポートをカスタマイズするには、BigQuery テーブルデータを Looker ダッシュボードに接続します。複数のスキャンで同じ結果テーブルを使用して、集計レポートを作成できます。

  • Google Cloud コンソールで結果を公開する

    データ品質スキャンの結果は、Google Cloud コンソールのソーステーブルの BigQuery ページと Data Catalog ページに公開できます。最新のスキャン結果は、ソーステーブルの [データ品質] タブで確認できます。

  • データ品質スコアを確認する

    各スキャン結果には、合格したルールの割合を示すデータ品質スコアが表示されます。スコアは、ジョブ全体レベル、列レベル(ルールが列に対して評価される場合)、ディメンション レベルで報告されます。データ品質スコアを使用して、テーブルまたは列全体でデータ品質を正規化し、傾向を追跡し、品質要件を満たしていないデータを特定します。

詳細については、データ品質スキャンの結果を表示するをご覧ください。

モニタリングとアラート

データ品質スキャンをモニタリングしてアラートを取得するには、次の方法を使用します。

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

    ログ エクスプローラの data_scan ログと data_quality_scan_rule_result ログを使用して、データ品質ジョブをモニタリングできます。

    データ品質ジョブごとに、data_scan_type フィールドが DATA_QUALITY に設定された data_scan ログに次の情報が含まれます。

    • データスキャンに使用されるデータソース。
    • ジョブの実行の詳細(作成時間、開始時間、終了時間、ジョブの状態など)。
    • データ品質ジョブの結果: 合格または失敗。
    • ディメンション レベルの合格または失敗。

    成功したすべてのジョブには、data_quality_scan_rule_result ログが含まれています。このログには、そのジョブ内の各ルールに関する詳細情報が含まれています。

    • ルール情報、ルールタイプ、評価タイプ、ディメンションなどの構成情報
    • 合格または失敗、合計行数、合格行数、null 行数、評価された行数などの結果情報。

    ログの情報は、API と Google Cloud コンソールで確認できます。この情報を使用して、アラートを設定できます。詳細については、Cloud Logging でアラートを設定するをご覧ください。

  • メール通知レポートを送信する

    メール通知レポートを送信して、データ品質ジョブのステータスと結果を通知できます。通知レポートは、次のシナリオで利用できます。

    • データ品質スコアが指定した目標スコアより低い
    • ジョブが失敗した
    • ジョブが完了した

    通知レポートは、データ品質スキャンを作成するときに構成します。

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

ルールが失敗すると、Dataplex は失敗したレコードを取得するクエリを生成します。このクエリを実行すると、ルールに一致しなかったレコードが表示されます。詳細については、データ品質エラーのトラブルシューティングをご覧ください。

制限事項

  • データ品質スキャンの結果は、タグとして Data Catalog に公開されません。
  • ルールの推奨事項は gcloud CLI ではサポートされていません。
  • ディメンションの選択は、事前定義された 7 つのディメンションのいずれかに固定されます。
  • データ品質スキャンあたりのルール数は 1,000 に制限されています。
  • 列レベルで報告されるデータ品質スコアは、API でのみサポートされています。

料金

  • Dataplex は、プレミアム処理 SKU を使用して自動データ品質の料金を請求します。詳細については、Dataplex の料金をご覧ください。

  • 自動データ品質結果のカタログへの公開は、まだ利用できません。利用可能になると、カタログ メタデータ ストレージの料金と同じレートが適用されます。詳しくは、料金をご覧ください。

  • 自動データ品質のための Dataplex プレミアム処理は、最小 1 分として秒単位で課金されます。

  • 失敗したデータ品質スキャンには課金されません。

  • 料金は、行数、列数、スキャンしたデータの量、データ品質ルールの構成、テーブルのパーティショニングとクラスタリングの設定、スキャンの頻度によって異なります。

  • 自動データ品質スキャンのコストを削減する方法は複数あります。

  • Dataplex プレミアム処理 SKU で、データ品質の課金を他の課金と分離するには、Cloud Billing レポートで、ラベル goog-dataplex-workload-type を値 DATA_QUALITY で使用します。

  • 集計された課金をフィルタリングするには、次のラベルを使用します。

    • goog-dataplex-datascan-data-source-dataplex-entity
    • goog-dataplex-datascan-data-source-dataplex-lake
    • goog-dataplex-datascan-data-source-dataplex-zone
    • goog-dataplex-datascan-data-source-project
    • goog-dataplex-datascan-data-source-region
    • goog-dataplex-datascan-id
    • goog-dataplex-datascan-job-id

次のステップ