自動データ品質の概要

このドキュメントでは、Dataplex の自動データ品質について説明します。これにより、データ品質を定義して測定できます。データスキャンを自動化し、定義されたルールに基づいてデータを検証し、データが品質要件を満たしていない場合はアラートをログに記録できます。データ品質ルールとデプロイをコードとして管理することで、データ本番環境パイプラインの整合性を向上させることができます。

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

概念モデル

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

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

データ品質スキャンの作成と使用は、次の手順で構成されます。

  1. ルールの定義
  2. ルールの実行
  3. モニタリングとアラート
  4. トラブルシューティング

ルールの定義

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

事前定義ルール

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

行レベル

行レベルのカテゴリルールの場合、期待値は各データ行に適用されます。各行は個別に条件に合格するか失敗します。例: column_A_value < 1

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

集計

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

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

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

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

ルールタイプ
(Google Cloud Console での名前)
行レベルルールまたは集計ルール 説明 サポートされているカラムの型 ルール固有のパラメータ
RangeExpectation
範囲チェック
行レベル 値が最小値と最大値の間にあるかどうかを確認します。 すべての数値型、日付型、タイムスタンプ型の列。 必須:
  • しきい値に合格する割合
  • meanmin、または 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()} を使用することで、データソース テーブルとそのすべての前提条件フィルタを参照できます。前提条件フィルタの例としては、行フィルタ、サンプリング パーセンテージ、増分フィルタなどがあります。${data()} パラメータでは、大文字と小文字が区別されます。

たとえば、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())

データ参照パラメータを使用すると、ルールを簡素化できます。

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

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

サブクエリ内でエイリアスを使用して参照元テーブルの列を参照する場合は、データ参照パラメータを使用して参照元テーブルを参照するか、テーブル参照を省略します。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 では、データ品質スキャンを実行するために、データからサンプリングするレコードの割合を指定できます。より少ないデータサンプルでデータ品質スキャンを作成すると、実行時間とデータセット全体のクエリにかかる費用を削減できます。

モニタリングとアラート

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

ログ エクスプローラの 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 にタグとして公開されません。
  • ルールの推奨事項は、Google Cloud コンソールでのみサポートされています。
  • ディメンションの選択は、事前定義された 7 つのディメンションのいずれかに固定されます。
  • データ品質スキャンあたりのルール数は 1,000 に制限されています。

料金

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

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

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

  • 失敗したデータ品質スキャンは無料です。

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

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

  • Dataplex プレミアム処理 SKU で、データ品質の課金を他の課金と分離するには、ラベル 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

次のステップ