このドキュメントでは、Dataplex の自動データ品質について説明します。これにより、データ品質を定義して測定できます。データスキャンを自動化し、定義されたルールに基づいてデータを検証し、データが品質要件を満たしていない場合はアラートをログに記録できます。データ品質ルールとデプロイをコードとして管理することで、データ本番環境パイプラインの整合性を向上させることができます。
開始するには、Dataplex データ プロファイリング ルールの推奨事項を使用するか、Google Cloud コンソールでカスタム ルールを作成します。Dataplex は、Dataplex 自動データ品質に統合されたモニタリング、トラブルシューティング、Cloud Logging アラートを提供します。
概念モデル
データのスキャンは、BigQuery と Cloud Storage からデータをサンプリングして、さまざまなタイプのメタデータを推測する Dataplex ジョブです。自動データ品質を使用してテーブルの品質を測定するには、data quality
タイプの DataScan
オブジェクトを作成します。スキャンは 1 つの BigQuery テーブルでのみ実行されます。スキャンでは Google テナント プロジェクトのリソースが使用されるため、独自のインフラストラクチャを設定する必要はありません。
データ品質スキャンの作成と使用は、次の手順で構成されます。
- ルールの定義
- ルールの実行
- モニタリングとアラート
- トラブルシューティング
ルールの定義
データ品質スキャンに関連付けられているデータ品質ルールは、データの期待値を定義します。データ品質ルールは、次の方法で作成できます。
- Dataplex データのプロファイリングの推奨事項を使用する
- 事前定義ルールを使用する
- カスタム SQL ルールを作成する
事前定義ルール
Dataplex では、事前定義ルールとして行レベルと集計の 2 つのカテゴリがサポートされています。
- 行レベル
行レベルのカテゴリルールの場合、期待値は各データ行に適用されます。各行は個別に条件に合格するか失敗します。例:
column_A_value < 1
行レベルのチェックでは、合格しきい値を指定する必要があります。ルールを通過する行の割合がしきい値を下回ると、ルールは失敗します。
- 集計
集計ルールの場合、期待値はデータ全体で集計された 1 つの値に適用されます。たとえば、
Avg(someCol) >= 10
。合格するには、チェックがブール値true
に評価される必要があります。集計ルールは、行ごとに独立して合格や失敗の回数を示すものではありません。
どちらのルールカテゴリでも、次のパラメータを設定できます。
- ルールが適用される列。
- 事前に定義された一連のディメンションからのディメンション。
次の表では、サポートされている行レベルと集計ルールの種類を示します。
ルールタイプ (Google Cloud Console での名前) |
行レベルルールまたは集計ルール | 説明 | サポートされているカラムの型 | ルール固有のパラメータ |
---|---|---|---|---|
RangeExpectation (範囲チェック) |
行レベル | 値が最小値と最大値の間にあるかどうかを確認します。 | すべての数値型、日付型、タイムスタンプ型の列。 | 必須:
|
NonNullExpectation (NULL チェック) |
行レベル | 列の値が NULL ではないことを確認します。 | サポートされているすべてのカラム型。 | 必須:
|
SetExpectation (チェックを設定) |
行レベル | 列の値が、セット内の指定された値のいずれかであるかどうかを確認します。 | サポートされているすべての列型(Record と Struct を除く)。 |
必須:
|
RegexExpectation (正規表現チェック) |
行レベル | 指定した正規表現と値を確認します。 | 文字列 | 必須:
|
Uniqueness (一意性チェック) |
集計 | 列内のすべての値が一意かどうかを確認します。 | サポートされているすべての列型(Record と Struct を除く)。 |
必須:
|
StatisticRangeExpectation (統計チェック) |
集計 | 指定した統計的尺度が範囲の期待値と一致するかどうかを確認します。 | サポートされているすべての数値列型。 | 必須:
|
サポートされているカスタム SQL ルールの種類
SQL ルールでは、カスタム ロジックで検証を拡張する柔軟性があります。これらのルールには次のタイプがあります。
ルールの種類 | 行レベルルールまたは集計ルール | 説明 | サポートされているカラムの型 | ルール固有のパラメータ | 例 |
---|---|---|---|---|---|
行の条件 | 行レベル |
この式は、たとえば参照整合性チェックを行うために、別テーブルへの参照を含めることができます。 |
すべての列 | 必須:
|
grossWeight <= netWeight |
集計 SQL 式 | 集計 | これらのルールはテーブルごとに 1 回実行されます。ブール値 SQL 式には、式サブクエリを使用して別のテーブルへの参照を含めることができます。 |
すべての列 | 必須:
|
簡単な集計の例: 式サブクエリを使用して、異なるテーブル間で値を比較: |
SQL アサーション | 集計 | アサーション ルールは、データ品質クエリを使用して、クエリで指定された 1 つ以上の条件を満足しない行を見つけます。無効な状態と一致する行を返すように評価される SQL ステートメントを指定します。クエリが行を返すと、ルールは失敗します。 SQL ステートメントの末尾のセミコロンは省略します。 SQL ステートメントには、式サブクエリを使用して別のテーブルへの参照を含めることができます。 |
すべての列 | 必須:
|
式サブクエリを使用して、異なるテーブル間で値を比較: |
ルールの例については、自動データ品質のサンプルルールをご覧ください。
サポートされている 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
次のステップ
- 自動データ品質を使用する方法を確認する。
- データ プロファイリングについて確認する。
- データ プロファイリングを使用する方法を確認する。