このページでは、Dataplex Universal Catalog のデータ品質スキャンを作成する方法について説明します。
データ品質スキャンの詳細については、自動データ品質についてをご覧ください。
始める前に
-
Enable the Dataplex API.
- 省略可: データ プロファイル スキャンの結果に基づいてデータ品質ルールの推奨事項を Dataplex Universal Catalog で生成する場合は、データ プロファイル スキャンを作成して実行します。
必要なロール
BigQuery テーブルでデータ品質スキャンを実行するには、BigQuery テーブルの読み取り権限と、テーブルのスキャンに使用するプロジェクトで BigQuery ジョブを作成するための権限が必要です。
BigQuery テーブルとデータ品質スキャンが異なるプロジェクトにある場合、データ品質スキャンを含むプロジェクトの Dataplex Universal Catalog サービス アカウントに、対応する BigQuery テーブルに対する読み取り権限を付与する必要があります。
データ品質ルールが追加のテーブルを参照している場合、スキャン プロジェクトのサービス アカウントには、同じテーブルに対する読み取り権限が必要です。
スキャン結果を BigQuery テーブルにエクスポートするために必要な権限を取得するには、結果のデータセットとテーブルに対する BigQuery データ編集者(
roles/bigquery.dataEditor
)IAM ロールを Dataplex Universal Catalog サービス アカウントに付与するよう管理者に依頼してください。これにより次の権限が付与されます。bigquery.datasets.get
bigquery.tables.create
bigquery.tables.get
bigquery.tables.getData
bigquery.tables.update
bigquery.tables.updateData
BigQuery データが Dataplex Universal Catalog レイクに編成されている場合は、Dataplex Universal Catalog サービス アカウントに 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 Universal Catalog サービス アカウントにバケットに対する Storage オブジェクト閲覧者(
roles/storage.objectViewer
)ロールを付与します。または、Dataplex Universal Catalog サービス アカウントに次の権限を割り当てます。storage.buckets.get
storage.objects.get
データ品質スキャンの結果を Dataplex Universal Catalog メタデータとして公開するには、テーブルに対する BigQuery データ編集者(
roles/bigquery.dataEditor
)IAM ロールと、テーブルと同じロケーションにある@bigquery
エントリ グループに対するdataplex.entryGroups.useDataQualityScorecardAspect
権限が付与されている必要があります。または、テーブルと同じロケーションにある@bigquery
エントリ グループに対する Dataplex Catalog 編集者(roles/dataplex.catalogEditor
)ロールが付与されている必要があります。または、次のすべての権限が必要です。
bigquery.tables.get
- テーブルに対する権限bigquery.tables.update
- テーブルに対する権限bigquery.tables.updateData
- テーブルに対する権限bigquery.tables.delete
- テーブルに対する権限dataplex.entryGroups.useDataQualityScorecardAspect
-@bigquery
エントリ グループに対する権限
または、次のすべての権限が必要です。
dataplex.entries.update
-@bigquery
エントリ グループに対する権限dataplex.entryGroups.useDataQualityScorecardAspect
-@bigquery
エントリ グループに対する権限
BigQuery の列レベルのアクセス ポリシーで保護されている列にアクセスする必要がある場合は、それらの列に対する権限を Dataplex Universal Catalog サービス アカウントに割り当てます。データスキャンを作成または更新しているユーザーには、列に対する権限も必要です。
テーブルで BigQuery 行レベルのアクセス ポリシーが有効になっている場合、Dataplex Universal Catalog サービス アカウントに表示される行のみをスキャンできます。行レベルのポリシーに対する個々のユーザーのアクセス権限は評価されません。
必要なデータスキャンのロール
自動データ品質を使用するには、次のいずれかの IAM ロールを付与するよう管理者に依頼してください。
DataScan
リソースに対する完全アクセス権: Dataplex DataScan 管理者(roles/dataplex.dataScanAdmin
)DataScan
リソースを作成する: プロジェクトに対する Dataplex DataScan 作成者(roles/dataplex.dataScanCreator
)DataScan
リソースに対する書き込みアクセス権: Dataplex DataScan 編集者(roles/dataplex.dataScanEditor
)- ルールと結果を除く
DataScan
リソースへの読み取りアクセス: Dataplex DataScan 閲覧者(roles/dataplex.dataScanViewer
) - ルールと結果を含む
DataScan
リソースへの読み取りアクセス権: Dataplex DataScan データ閲覧者(roles/dataplex.dataScanDataViewer
)
次の表に、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 権限を設定する |
データ品質ルールを定義する
データ品質ルールは、組み込みルールまたはカスタム SQL チェックを使用して定義できます。Google Cloud CLI を使用している場合は、これらのルールを JSON ファイルまたは YAML ファイルで定義できます。
次のセクションの例では、さまざまなデータ品質ルールを定義する方法を示します。このルールは、顧客取引に関するデータを含むサンプル テーブルを検証しています。テーブルのスキーマは次のとおりであると想定しています。
列名 | 列の型 | 列の説明 |
---|---|---|
transaction_timestamp | タイムスタンプ | 取引のタイムスタンプ。テーブルはこのフィールドでパーティション分割されます。 |
customer_id | 文字列 | 8 文字に続いて 16 桁の数字の形式のお客様 ID。 |
transaction_id | 文字列 | 取引 ID はテーブル全体で一意である必要があります。 |
currency_id | 文字列 | サポートされている通貨の一つ。通貨の種類は、ディメンション テーブル dim_currency で使用可能な通貨のいずれかと一致する必要があります。
|
amount | 浮動小数点数 | 取引金額。 |
discount_pct | 浮動小数点数 | 割引率。この値は 1~100 の範囲で指定してください。 |
組み込みルールの種類を使用してデータ品質ルールを定義する
次のルールの例は、組み込みルールの種類に基づいています。 Google Cloud コンソールまたは API を使用して、組み込みルールの種類に基づいてルールを作成できます。Dataplex Universal Catalog は、これらのルールの一部を推奨する場合があります。
列名 | ルールの種類 | 推奨サイズ | ルールのパラメータ |
---|---|---|---|
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 Universal Catalog がクエリ
SELECT COUNTIF(CUSTOM_SQL_EXPRESSION) FROM TABLE
を評価する際に成功した行数を生成する式を作成します。Dataplex Universal Catalog では、成功した行数がしきい値に対してチェックされます。行全体を評価する、またはテーブル条件を使用するルールを作成する場合は、Dataplex Universal Catalog がクエリ
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 予測句。割引が customer 、currency 、transaction に基づいて適用されるかどうかを確認します。このルールは、予測が実際の値と一致するかどうかについて、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 予測関数。この関数は、customer 、currency 、transaction に基づいて割引を適用するかどうかを確認します。このルールは、予測が一致しなかったすべての発生回数を識別します。前提条件: 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 アサーション(データ参照パラメータを指定) | 現在サポートされているすべての通貨で 日付フィルタ データ参照パラメータ |
SELECT * FROM ${data()} WHERE discount_pct > 30 |
gcloud CLI を使用してデータ品質ルールを定義する
次の YAML ファイルの例では、組み込み型を使用したサンプルルールおよびカスタム SQL のサンプルルールと同じルールをいくつか使用しています。この YAML ファイルには、フィルタやサンプリング率など、データ品質スキャンの他の仕様も含まれています。gcloud CLI を使用してデータ品質スキャンを作成または更新する際、このような YAML ファイルを --data-quality-spec-file
引数の入力として使用できます。
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
samplingPercent: 50
rowFilter: discount_pct > 100
postScanActions:
bigqueryExport:
resultsTable: projects/my_project_id/datasets/dim_dataset/tables/dim_currency
notificationReport:
recipients:
emails:
- '222larabrown@gmail.com'
- 'cloudysanfrancisco@gmail.com'
scoreThresholdTrigger:
scoreThreshold: 50
jobFailureTrigger: {}
jobEndTrigger: {}
catalogPublishingEnabled: true
データ品質スキャンを作成する
コンソール
Google Cloud コンソールで、Dataplex Universal Catalog の [データのプロファイリングと品質] ページに移動します。
[データ品質スキャンの作成] をクリックします。
[スキャンの定義] ウィンドウで、次のフィールドに入力します。
省略可: 表示名を入力します。
ID を入力します。リソースの命名規則をご覧ください。
(省略可)説明を入力します。
[テーブル] フィールドで、[参照] をクリックします。スキャンするテーブルを選択し、[選択] をクリックします。標準の BigQuery テーブルのみがサポートされています。
マルチリージョン データセット内のテーブルの場合は、データスキャンを作成するリージョンを選択します。
Dataplex Universal Catalog レイク内で整理されたテーブルを参照するには、[Dataplex レイク内のブラウジング] をクリックします。
[スコープ] フィールドで、[増分] または [データ全体] を選択します。
- [増分] を選択した場合、[タイムスタンプ列] フィールドで、新しいレコードが追加されるたびに増加し、新しいレコードの識別に使用できる BigQuery テーブルから、
DATE
型またはTIMESTAMP
型の列を選択します。テーブルを分割する列でもかまいません。
- [増分] を選択した場合、[タイムスタンプ列] フィールドで、新しいレコードが追加されるたびに増加し、新しいレコードの識別に使用できる BigQuery テーブルから、
データをフィルタするには、[行のフィルタリング] チェックボックスをオンにします。GoogleSQL 構文の
WHERE
句の一部として使用できる有効な SQL 式で構成される行フィルタを指定します。例:col1 >= 0
フィルタには、複数の列条件を組み合わせることができます。例:col1 >= 0 AND col2 < 10
データをサンプリングするには、[サンプリング サイズ] リストでサンプリング率を選択します。0.0~100.0% の範囲のパーセンテージ値(小数点以下 3 桁まで)を選択します。大規模なデータセットの場合は、低いサンプリング率を選択します。たとえば、1 PB のテーブルの場合、0.1%~1.0% の値を入力すると、データ品質スキャンは 1~10 TB のデータをサンプリングします。増分データスキャンの場合、データ品質スキャンは最新の増分にサンプリングを適用します。
データ品質スキャンの結果を Dataplex Universal Catalog メタデータとして公開するには、[BigQuery と Dataplex Catalog に結果を公開する] チェックボックスをオンにします。
最新のスキャン結果は、ソーステーブルの BigQuery ページと Dataplex Universal Catalog ページの [データ品質] タブで表示できます。ユーザーが公開されたスキャン結果にアクセスできるようにするには、このドキュメントのデータ プロファイル スキャン結果へのアクセス権を付与するをご覧ください。
[スケジュール] セクションで、次のいずれかのオプションを選択します。
繰り返し: データ品質スキャンを 1 時間ごと、毎日、毎週、毎月、カスタムのいずれかのスケジュールで実行します。スキャンの実行頻度と時間を指定します。[カスタム] を選択した場合は、cron 形式を使用してスケジュールを指定します。
オンデマンド: データ品質スキャンをオンデマンドで実行します。
[続行] をクリックします。
[データ品質ルール] ウィンドウで、このデータ品質スキャン用に構成するルールを定義します。
[ルールを追加] をクリックし、次のいずれかのオプションを選択します。
プロフィールに基づく推奨事項: 既存のデータ プロファイリング スキャンに基づいて、推奨事項からルールを作成します。
列の選択: 推奨ルールを取得する列を選択します。
スキャン プロジェクトの選択: データ プロファイリング スキャンがデータ品質スキャンを作成するプロジェクトとは異なるプロジェクトにある場合は、プロファイル スキャンを取得するプロジェクトを選択します。
プロファイルの結果を選択: 1 つ以上のプロファイルの結果を選択し、[OK] をクリックします。これにより、出発点として使用できる推奨ルールのリストが入力されます。
追加するルールのチェックボックスをオンにして、[選択] をクリックします。選択したルールは、現在のルールリストに追加されます。その後、ルールを編集できます。
組み込みルールの種類: 事前定義ルールからルールを作成します。事前定義ルールのリストを確認します。
列の選択: ルールを選択する列を選択します。
ルールの種類を選択: 選択するルールの種類を選択し、[OK] をクリックします。表示されるルールの種類は、選択した列によって異なります。
追加するルールのチェックボックスをオンにして、[選択] をクリックします。選択したルールは、現在のルールリストに追加されます。その後、ルールを編集できます。
SQL 行チェックルール: 各行に適用するカスタム SQL ルールを作成します。
[ディメンション] で、ディメンションを 1 つ選択します。
[合格のしきい値] で、チェックに合格する必要があるレコードの割合を選択します。
[列名] で列を選択します。
[SQL 式を指定] フィールドに、ブール値の
true
(合格)またはfalse
(不合格)と評価される SQL 式を入力します。詳細については、サポートされているカスタム SQL ルールの種類と、データ品質ルールを定義するの例をご覧ください。[追加] をクリックします。
SQL 集計チェックルール: カスタム SQL テーブル条件ルールを作成します。
[ディメンション] で、ディメンションを 1 つ選択します。
[列名] で列を選択します。
[SQL 式を指定] フィールドに、ブール値の
true
(合格)またはfalse
(不合格)と評価される SQL 式を入力します。詳細については、サポートされているカスタム SQL ルールの種類と、データ品質ルールを定義するの例をご覧ください。[追加] をクリックします。
SQL アサーション ルール: データの無効な状態を確認するカスタム SQL アサーション ルールを作成します。
[ディメンション] で、ディメンションを 1 つ選択します。
省略可: [列名] で列を選択します。
[SQL ステートメントを指定] フィールドに、無効な状態と一致する行を返す SQL ステートメントを入力します。行が返された場合、このルールは失敗します。SQL ステートメントの末尾のセミコロンを省略します。詳細については、サポートされているカスタム SQL ルールの種類と、データ品質ルールを定義するの例をご覧ください。
[追加] をクリックします。
省略可: どのデータ品質ルールでも、モニタリングとアラートに使用するカスタムルール名と説明を割り当てることができます。これを行うには、ルールを編集して、次の詳細を指定します。
- ルール名: カスタムルール名を 63 文字以下で入力します。ルール名には、文字(az、AZ)、数字(0~9)、ハイフン(-)を使用できます。先頭は文字、末尾は数字または文字にする必要があります
- 説明: ルールの説明を入力します。最大長は 1,024 文字です。
前の手順を繰り返して、データ品質スキャンにルールを追加します。完了したら、[次へ] をクリックします。
省略可: スキャン結果を BigQuery 標準テーブルにエクスポートします。[スキャン結果を BigQuery テーブルにエクスポートする] セクションで、次の操作を行います。
[BigQuery データセットの選択] フィールドで、[参照] をクリックします。 データ品質のスキャン結果を保存する BigQuery データセットを選択します。
[BigQuery テーブル] フィールドで、データ品質スキャンの結果を保存するテーブルを指定します。既存のテーブルを使用している場合は、エクスポート テーブル スキーマと互換性があることを確認してください。指定したテーブルが存在しない場合は、Dataplex Universal Catalog によって作成されます。
省略可: ラベルを追加します。ラベルは、関連するオブジェクトをまとめてグループ化したり、他の Google Cloud リソースと組み合わせてグループ化できる Key-Value ペアです。
省略可: データ品質スキャンジョブのステータスと結果に関するアラートを送信するメール通知レポートを設定します。[通知レポート] セクションで
[メール ID を追加] をクリックし、最大 5 つのメールアドレスを入力します。次に、レポートの送信先のシナリオを選択します。- 品質スコア(<=): ジョブが成功し、データ品質スコアが指定された目標スコアより低い場合にレポートを送信します。0~100 のターゲット品質スコアを入力します。
- ジョブの失敗: データ品質の結果に関係なく、ジョブ自体が失敗するとレポートが送信されます。
- ジョブの完了(成功または失敗): データ品質の結果に関係なく、ジョブが終了するとレポートが送信されます。
[作成] をクリックします。
スキャンが作成されたら、[今すぐ実行] をクリックすることで、いつでもスキャンを実行できます。
gcloud
データ品質スキャンを作成するには、gcloud dataplex datascans create data-quality
コマンドを使用します。
ソースデータが Dataplex Universal Catalog レイクに編成されている場合は、--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 Universal Catalog レイクに編成されていない場合は、--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 表現のドキュメントと YAML 表現の例をご覧ください。DATA_SOURCE_ENTITY
: データ品質スキャンのデータを含む Dataplex Universal Catalog エンティティ。例: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
データ品質スキャンを作成するには、dataScans.create
メソッドを使用します。
データ プロファイリング スキャンの結果に基づくルールの推奨事項を使用してデータ品質スキャンのルールを作成する場合は、データ プロファイリング スキャンで 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 |
null でも可 | dataplex-back-end-dev-project |
||
location |
string |
null でも可 | us-central1 |
||
data_scan_id |
string |
null でも可 | test-datascan |
||
data_source | struct/record |
resource_name |
string |
null でも可 | エンティティのケース://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 |
null でも可 | dataplex-back-end-dev-project |
||
dataplex_entity_project_number |
integer |
null でも可 | 123456789 |
||
dataplex_lake_id |
string |
null でも可 | (ソースがエンティティである場合にのみ有効)test-lake
|
||
dataplex_zone_id |
string |
null でも可 | (ソースがエンティティである場合にのみ有効)test-zone |
||
dataplex_entity_id |
string |
null でも可 | (ソースがエンティティである場合にのみ有効)test-entity |
||
table_project_id |
string |
null でも可 | test-project |
||
table_project_number |
integer |
null でも可 | 987654321 |
||
dataset_id |
string |
null でも可 | (ソースがテーブルである場合にのみ有効)test-dataset |
||
table_id |
string |
null でも可 | (ソースがテーブルである場合にのみ有効)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 |
null でも可 | true /false |
||
sampling_percent |
float |
null でも可 | (0~100)20.0 (20% を示す) |
||
row_filter |
string |
nullable | col1 >= 0 AND col2 < 10 |
||
job_labels | json |
null でも可 | {"key1":value1} |
||
job_start_time | timestamp |
null でも可 | 2023-01-01 00:00:00 UTC |
||
job_end_time | timestamp |
null でも可 | 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));" |
||
rule_assertion_row_count | integer |
nullable | 10 |
データ品質スキャンジョブに BigQueryExport を構成する場合は、次のガイドラインに沿って操作します。
resultsTable
フィールドには、//bigquery.googleapis.com/projects/{project-id}/datasets/{dataset-id}/tables/{table-id}
の形式を使用します。- BigQuery 標準テーブルを使用します。
- スキャンが作成または更新されたときにテーブルが存在しない場合は、Dataplex Universal Catalog によってテーブルが作成されます。
- デフォルトでは、テーブルは
job_start_time
列で毎日パーティション分割されます。 - テーブルを他の構成でパーティション分割する場合や、パーティションを作成しない場合は、必要なスキーマと構成でテーブルを再作成し、事前に作成されたテーブルを結果テーブルとして用意します。
- 結果テーブルがソーステーブルと同じロケーションにあることを確認します。
- プロジェクトで VPC-SC が構成されている場合、結果テーブルはソーステーブルと同じ VPC-SC 境界内にある必要があります。
- スキャン実行ステージでテーブルが変更されると、現在実行中のジョブが以前の結果テーブルにエクスポートされ、テーブルの変更は次のスキャンジョブから有効になります。
- テーブル スキーマを変更しないでください。列をカスタマイズする必要がある場合は、テーブルにビューを作成します。
- 費用を削減するには、ユースケースに基づいてパーティションの有効期限を設定します。詳細については、パーティションの有効期限を設定する方法をご覧ください。
データ品質スキャンを実行する
コンソール
Google Cloud コンソールで、Dataplex Universal Catalog の [データのプロファイリングと品質] ページに移動します。
実行するデータ品質スキャンをクリックします。
[今すぐ実行] をクリックします。
gcloud
データ品質スキャンを実行するには、gcloud dataplex datascans run
コマンドを使用します。
gcloud dataplex datascans run DATASCAN \ --location=LOCATION \
次の変数を置き換えます。
LOCATION
: データ品質スキャンが作成された Google Cloud リージョン。DATASCAN
: データ品質スキャンの名前。
REST
データ品質スキャンを実行するには、dataScans.run
メソッドを使用します。
データ品質スキャンの結果を表示する
コンソール
Google Cloud コンソールで、Dataplex Universal Catalog の [データのプロファイリングと品質] ページに移動します。
データ品質スキャンの名前をクリックします。
[概要] セクションには、いつスキャンが実行されたか、各ジョブでスキャンされたレコード数、すべてのデータ品質チェックに合格したか、失敗した場合、失敗したデータ品質チェックの数など、最新のジョブに関する情報が表示されます。
[データ品質スキャンの構成] セクションには、スキャンについての詳細が表示されます。
合格したルールの割合を示すデータ品質スコア、失敗したルール、ジョブログなど、ジョブの詳細情報を確認するには、[ジョブ履歴] タブをクリックします。ジョブ 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
データ品質スキャンの結果を表示するには、dataScans.get
メソッドを使用します。
公開された結果を表示する
データ品質スキャンの結果が Dataplex Universal Catalog メタデータとして公開されている場合は、Google Cloud コンソールの BigQuery ページと Dataplex Universal Catalog ページにあるソーステーブルの [データ品質] タブで最新のスキャン結果を確認できます。
Google Cloud コンソールで、Dataplex Universal Catalog の [検索] ページに移動します。
テーブルを検索して選択します。
[データ品質] タブをクリックします。
最後に公開された結果が表示されます。
スキャン結果の履歴を表示する
Dataplex Universal Catalog は、過去 300 件のジョブ、または過去 1 年間のいずれか早いほうのデータ プロファイルのスキャン履歴を保存します。
コンソール
Google Cloud コンソールで、Dataplex Universal Catalog の [データのプロファイリングと品質] ページに移動します。
データ品質スキャンの名前をクリックします。
[ジョブ履歴] タブをクリックします。
[ジョブ履歴] タブには、各ジョブでスキャンされたレコード数、ジョブのステータス、ジョブの実行時刻、各ルールの合否など、過去のジョブに関する情報が表示されます。
ジョブについての詳細情報を表示するには、[ジョブ ID] 列でジョブをクリックします。
gcloud
過去のデータ品質スキャンジョブを表示するには、gcloud dataplex datascans jobs list
コマンドを使用します。
gcloud dataplex datascans jobs list \ --location=LOCATION \ --datascan=DATASCAN \
次の変数を置き換えます。
LOCATION
: データ品質スキャンが作成された Google Cloud リージョン。DATASCAN
: 過去のジョブを表示するデータ品質スキャンの名前。
REST
データ品質スキャンジョブの履歴を表示するには、dataScans.jobs.list
メソッドを使用します。
データ品質スキャンの結果へのアクセスを許可する
組織内のユーザーがスキャン結果を表示できるようにするには、次の操作を行います。
Google Cloud コンソールで、Dataplex Universal Catalog の [データのプロファイリングと品質] ページに移動します。
結果を共有するデータ品質スキャンをクリックします。
[権限] タブをクリックします。
手順は次のとおりです。
- プリンシパルにアクセス権を付与するには、[ アクセス権を付与] をクリックします。関連するプリンシパルに Dataplex DataScan データ閲覧者ロールを付与します。
- プリンシパルからアクセス権を削除するには、Dataplex DataScan データ閲覧者ロールを削除するプリンシパルを選択します。[ アクセス権を削除] をクリックし、プロンプトが表示されたら確定します。
Cloud Logging でアラートを設定する
Cloud Logging のログを使用してデータ品質エラーのアラートを設定する手順は次のとおりです。
コンソール
Google Cloud コンソールで、Cloud Logging の [ログ エクスプローラ] に移動します。
[ログ エクスプローラ] に移動
[クエリ] ウィンドウで、クエリを入力します。サンプルクエリをご覧ください。
[クエリを実行] をクリックします。
[アラートを作成] をクリックします。サイドパネルが開きます。
アラート ポリシー名を入力し、[次へ] をクリックします。
クエリを確認します。
[ログをプレビュー] ボタンをクリックして、クエリをテストします。条件に一致するログが表示されます。
[次へ] をクリックします。
通知の間隔を設定し、[次へ] をクリックします。
アラートの通知先を定義し、[保存] をクリックしてアラート ポリシーを作成します。
または、Google Cloud コンソールで [Monitoring] > [アラート] に移動し、アラートを構成して編集することも可能です。
gcloud
サポートされていません。
REST
Cloud Logging でアラートを設定する方法の詳細については、Monitoring API を使用してログベースのアラート ポリシーを作成する方法についての記事をご覧ください。
ジョブレベルまたはディメンション レベルのアラートを設定するためのサンプルクエリ
データ品質スキャンのデータ品質全体のエラーアラートを設定するサンプルクエリ。
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 Universal Catalog レイクで編成されていない 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 Universal Catalog レイクに編成された 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 Universal Catalog はエラーになったレコードを取得するクエリを提供します。このクエリを実行して、ルールと一致しなかったレコードを表示します。
コンソール
Google Cloud コンソールで、Dataplex Universal Catalog の [データのプロファイリングと品質] ページに移動します。
レコードのトラブルシューティングを行うデータ品質スキャンの名前をクリックします。
[ジョブ履歴] タブをクリックします。
データ品質エラーを特定したジョブのジョブ ID をクリックします。
表示されたジョブ ウィンドウの [ルール] セクションで、[失敗したレコードを取得するクエリ] 列を見つけます。失敗したルールの [クエリをクリップボードにコピー] をクリックします。
BigQuery でクエリを実行して、ジョブの失敗の原因となったレコードを確認します。
gcloud
サポートされていません。
REST
データ品質エラーが特定されたジョブを取得するには、
dataScans.get
メソッドを使用します。レスポンス オブジェクトの
failingRowsQuery
フィールドにクエリが表示されます。BigQuery でクエリを実行して、ジョブの失敗の原因となったレコードを確認します。
特定のテーブルのデータ品質スキャンを管理する
このドキュメントの手順では、 Google Cloud コンソールの Dataplex Universal Catalog の [データのプロファイリングと品質] ページを使用して、プロジェクト全体でデータ プロファイル スキャンを管理する方法について説明します。
特定のテーブルを操作するときに、データ プロファイル スキャンを作成して管理することもできます。 Google Cloud コンソールのテーブルの Dataplex Universal Catalog ページで、[データ品質] タブを使用します。手順は次のとおりです。
Google Cloud コンソールで、Dataplex Universal Catalog の [検索] ページに移動します。
テーブルを検索して選択します。
[データ品質] タブをクリックします。
結果が Dataplex Universal Catalog メタデータとして公開されているデータ品質スキャンがテーブルにあるかどうかに応じて、次の方法でテーブルのデータ品質スキャンを操作できます。
データ品質スキャンの結果が公開されている: 最新のスキャン結果がページに表示されます。
このテーブルのデータ品質スキャンを管理するには、[データ品質スキャン] をクリックし、次のオプションから選択します。
新しいスキャンを作成: 新しいデータ品質スキャンを作成します。詳細については、このドキュメントのデータ品質スキャンを作成するをご覧ください。テーブルの詳細ページからスキャンを作成すると、テーブルが事前に選択されます。
今すぐ実行: スキャンを実行します。
スキャン構成を編集: 表示名、フィルタ、スケジュールなどの設定を編集します。
データ品質ルールを編集するには、[データ品質] タブで [ルール] タブをクリックします。[ルールの変更] をクリックします。ルールを更新して、[保存] をクリックします。
スキャン権限を管理: スキャン結果にアクセスできるユーザーを制御します。詳細については、このドキュメントのデータ品質スキャンの結果へのアクセスを許可するをご覧ください。
過去の結果を見る: 以前のデータ品質スキャンジョブの詳細情報を表示します。詳細については、このドキュメントのデータ品質スキャン結果を表示すると過去のスキャン結果を表示するのセクションをご覧ください。
すべてのスキャンを表示: このテーブルに適用されるデータ品質スキャンのリストを表示します。
データ品質スキャンの結果が公開されていない: 次のオプションから選択します。
データ品質スキャンの作成: 新しいデータ品質スキャンを作成します。詳細については、このドキュメントのデータ品質スキャンを作成するをご覧ください。テーブルの詳細ページからスキャンを作成すると、テーブルが事前に選択されます。
既存のスキャンを表示: このテーブルに適用されるデータ品質スキャンの一覧を表示します。
データ品質スキャンを更新する
既存のデータ品質スキャンのさまざまな設定(表示名、フィルタ、スケジュール、データ品質ルールなど)を編集できます。
コンソール
Google Cloud コンソールで、Dataplex Universal Catalog の [データのプロファイリングと品質] ページに移動します。
データ品質スキャンの名前をクリックします。
表示名、フィルタ、スケジュールなどの設定を編集するには、[編集] をクリックします。値を編集し、[保存] をクリックします。
データ品質ルールを編集するには、スキャンの詳細ページで [現在のルール] タブをクリックします。[ルールの変更] をクリックします。ルールを更新して、[保存] をクリックします。
gcloud
データ品質スキャンの説明を更新するには、gcloud dataplex datascans update data-quality
コマンドを使用します。
gcloud dataplex datascans update data-quality DATASCAN \ --location=LOCATION \ --description=DESCRIPTION
次のように置き換えます。
DATASCAN
: 更新するデータ品質スキャンの名前。LOCATION
: データ品質スキャンが作成された Google Cloud リージョン。DESCRIPTION
: データ品質スキャンの新しい説明。
REST
データ品質スキャンを編集するには、dataScans.patch
メソッドを使用します。
データ品質スキャンを削除する
コンソール
Google Cloud コンソールで、Dataplex Universal Catalog の [データのプロファイリングと品質] ページに移動します。
削除するスキャンをクリックします。
[削除] をクリックし、プロンプトが表示されたら確定します。
gcloud
データ品質スキャンを削除するには、gcloud dataplex datascans delete
コマンドを使用します。
gcloud dataplex datascans delete DATASCAN \ --location=LOCATION \ --async
次の変数を置き換えます。
DATASCAN
: 削除するデータ品質スキャンの名前。LOCATION
: データ品質スキャンが作成された Google Cloud リージョン。
REST
データ品質スキャンを削除するには、dataScans.delete
メソッドを使用します。
次のステップ
- Codelab: AI アシスタントを使用してプログラムによるデータ品質管理を効率化するに沿って対応する。
- データ プロファイリングについて確認する。
- データ プロファイリングを使用する方法を確認する。
- チュートリアルで、Terraform を使用してデータ品質ルールをコードとして管理する方法を確認する。