Dokumen ini menunjukkan cara membuat tugas kualitas data Dataplex yang memungkinkan Anda menjadwalkan dan menjalankan pemeriksaan kualitas data untuk tabel BigQuery bawaan dan eksternal.
Untuk informasi selengkapnya, lihat Ringkasan tugas kualitas data.
Sebelum memulai
Dokumen ini mengasumsikan bahwa Anda memiliki data lake Dataplex yang sudah ada untuk membuat tugas kualitas data.
Mengaktifkan Google API dan layanan
Mengaktifkan Dataproc API.
Aktifkan Akses Google Pribadi untuk jaringan dan subjaringan Anda. Aktifkan Akses Google Pribadi di jaringan yang akan Anda gunakan dengan tugas kualitas data Dataplex. Jika Anda tidak menentukan jaringan atau subnetwork saat membuat tugas kualitas data Dataplex, Dataplex akan menggunakan subnet default. Dalam hal ini, Anda perlu mengaktifkan Akses Google Pribadi di subnet default.
Membuat file spesifikasi
Dataplex menggunakan CloudDQ open source sebagai program driver. Persyaratan pemeriksaan kualitas data dataplex ditentukan dalam file spesifikasi YAML CloudDQ.
Sebagai input untuk tugas kualitas data, Anda dapat memiliki satu file YAML atau satu arsip zip yang berisi satu atau beberapa file YAML. Sebaiknya Anda menangkap persyaratan pemeriksaan kualitas data dalam file spesifikasi YAML terpisah, dengan satu file untuk setiap bagian.
Untuk menyiapkan file spesifikasi, lakukan hal berikut:
-
Buat satu atau beberapa file spesifikasi YAML CloudDQ yang menentukan persyaratan pemeriksaan kualitas data Anda. Untuk informasi selengkapnya tentang sintaksis yang diperlukan, lihat bagian Tentang file spesifikasi dalam dokumen ini.
Simpan file spesifikasi YAML dalam format
.yml
atau.yaml
. Jika Anda membuat beberapa file spesifikasi YAML, simpan semua file dalam satu arsip zip. - Buat bucket Cloud Storage.
- Upload file spesifikasi ke bucket Cloud Storage.
Tentang file spesifikasi
File spesifikasi YAML CloudDQ Anda harus memiliki bagian berikut:
Aturan (ditentukan dalam node YAML
rules
tingkat atas): Daftar aturan yang akan dijalankan. Anda dapat membuat aturan ini dari jenis aturan yang telah ditetapkan sebelumnya, sepertiNOT_NULL
danREGEX
, atau memperluasnya dengan pernyataan SQL kustom sepertiCUSTOM_SQL_EXPR
danCUSTOM_SQL_STATEMENT
. PernyataanCUSTOM_SQL_EXPR
menandai setiap baris yang dievaluasi olehcustom_sql_expr
sebagaiFalse
sebagai kegagalan. PernyataanCUSTOM_SQL_STATEMENT
menandai nilai apa pun yang ditampilkan oleh seluruh pernyataan sebagai kegagalan.Filter baris (ditentukan dalam node YAML
row_filters
tingkat atas): Ekspresi SQL yang menampilkan nilai boolean yang menentukan filter untuk mengambil subset data dari subjek entity pokok untuk validasi.Binding aturan (ditentukan dalam node YAML
rule_bindings
level atas): Menentukanrules
danrule filters
untuk diterapkan pada tabel.Dimensi aturan (ditentukan dalam node YAML
rule_dimensions
): Menentukan daftar dimensi aturan kualitas data yang diizinkan yang dapat ditentukan oleh aturan pada kolomdimension
yang sesuai.Contoh:
rule_dimensions: - consistency - correctness - duplication - completeness - conformance
Kolom
dimension
bersifat opsional untuk aturan. Bagian dimensi aturan bersifat wajib jikadimension
tercantum dalam aturan apa pun.
Untuk informasi selengkapnya, lihat panduan referensi CloudDQ dan contoh file spesifikasi.
Membuat set data untuk menyimpan hasil
-
Untuk menyimpan hasilnya, buat set data BigQuery.
Set data harus berada di region yang sama dengan tabel tempat Anda menjalankan tugas kualitas data.
Dataplex menggunakan set data ini, dan membuat atau menggunakan kembali tabel pilihan Anda untuk menyimpan hasilnya.
Membuat akun layanan
Buat akun layanan yang memiliki peran dan izin Identity and Access Management (IAM) berikut:
- Akses baca ke jalur Cloud Storage yang berisi spesifikasi YAML. Anda dapat menggunakan peran Storage Object Viewer (
roles/storage.objectViewer
) di bucket Cloud Storage. - Akses baca ke set data BigQuery dengan data yang akan divalidasi. Anda dapat menggunakan peran BigQuery Data Viewer.
- Tulis akses ke set data BigQuery untuk membuat tabel (jika perlu) dan tulis hasilnya ke tabel tersebut. Anda dapat menggunakan peran BigQuery Data Editor (
roles/bigquery.dataEditor
) di tingkat set data. - Peran BigQuery Job User (
roles/bigquery.jobUser
) di level project untuk membuat tugas BigQuery dalam sebuah project. - Peran Dataplex Metadata Reader (
roles/dataplex.metadataReader
) di level project atau lake. - Peran Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) di level project. - Peran Pekerja Dataproc.
- Izin
iam.serviceAccounts.actAs
yang diberikan kepada pengguna yang mengirimkan tugas. - Peran pengguna akun layanan yang diberikan ke akun layanan Dataplex lake. Anda dapat melihat akun layanan Dataplex lake di Google Cloud Console.
Opsional: Menggunakan setelan lanjutan
Langkah-langkah ini bersifat opsional:
BigQuery menjalankan pemeriksaan kualitas data pada project pengguna saat ini secara default. Atau, Anda dapat memilih project lain untuk menjalankan tugas BigQuery dengan menggunakan argumen
--gcp_project_id
TASK_ARGS
untuk properti--execution-args
tugas.Jika project ID yang ditentukan untuk menjalankan kueri BigQuery berbeda dengan project tempat akun layanan (ditentukan oleh
--execution-service-account
) dibuat, pastikan bahwa kebijakan organisasi yang menonaktifkan penggunaan akun layanan lintas project (iam.disableServiceAccountCreation
) dinonaktifkan. Selain itu, pastikan akun layanan dapat mengakses jadwal tugas BigQuery di project tempat kueri BigQuery dijalankan.
Batasan
- Semua tabel yang ditentukan untuk tugas kualitas data tertentu harus berasal dari region Google Cloud yang sama.
Menjadwalkan tugas kualitas data
Konsol
- Di konsol Google Cloud, buka halaman Process Dataplex.
- Klik Create task.
- Di kartu Check Data Quality, klik Create task.
- Untuk Dataplex lake, pilih lake Anda.
- Untuk ID, masukkan ID.
- Di bagian Data quality specification, lakukan tindakan berikut:
- Di kolom Select GCS file, klik Browse.
Pilih bucket Cloud Storage Anda.
Klik Select.
Di bagian Results table, lakukan hal berikut:
Di kolom Select BigQuery dataset, klik Browse.
Pilih set data BigQuery untuk menyimpan hasil validasi.
Klik Pilih.
Di kolom BigQuery table, masukkan nama tabel untuk menyimpan hasil. Jika tabel tidak ada, Dataplex akan membuatnya untuk Anda. Jangan gunakan nama
dq_summary
karena dicadangkan untuk tugas pemrosesan internal.
Dalam bagian Service account, pilih akun layanan dari menu User service account.
Klik Lanjutkan.
Di bagian Set schedule, konfigurasikan jadwal untuk menjalankan tugas kualitas data.
Klik Create.
gcloud CLI
Berikut adalah contoh eksekusi tugas kualitas data yang menggunakan perintah gcloud CLI tugas Dataplex:
export USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH="USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH" # Google Cloud project where the Dataplex task is created. export GOOGLE_CLOUD_PROJECT="GOOGLE_CLOUD_PROJECT" # Google Cloud region for the Dataplex lake. export DATAPLEX_REGION_ID="DATAPLEX_REGION_ID" # Public Cloud Storage bucket containing the prebuilt data quality executable artifact. There is one bucket for each Google Cloud region. export DATAPLEX_PUBLIC_GCS_BUCKET_NAME="dataplex-clouddq-artifacts-${DATAPLEX_REGION_ID}" # The Dataplex lake where your task is created. export DATAPLEX_LAKE_NAME="DATAPLEX_LAKE_NAME" # The service account used for running the task. Ensure that this service account has sufficient IAM permissions on your project, including BigQuery Data Editor, BigQuery Job User, Dataplex Editor, Dataproc Worker, and Service Usage Consumer. # The BigQuery dataset used for storing the intermediate data quality summary results and the BigQuery views associated with each rule binding. export TARGET_BQ_DATASET="TARGET_BQ_DATASET" # If you want to use a different dataset for storing the intermediate data quality summary results and the BigQuery views associated with each rule binding, use the following: export CLOUDDQ_BIGQUERY_DATASET=$TARGET_BQ_DATASET # The BigQuery dataset where the final results of the data quality checks are stored. This could be the same as CLOUDDQ_BIGQUERY_DATASET. export TARGET_BQ_DATASET="TARGET_BQ_DATASET" # The BigQuery table where the final results of the data quality checks are stored. export TARGET_BQ_TABLE="TARGET_BQ_TABLE" # The unique identifier for the task. export TASK_ID="TASK_ID" gcloud dataplex tasks create \ --location="${DATAPLEX_REGION_ID}" \ --lake="${DATAPLEX_LAKE_NAME}" \ --trigger-type=ON_DEMAND \ --execution-service-account="$DATAPLEX_TASK_SERVICE_ACCOUNT" \ --spark-python-script-file="gs://${DATAPLEX_PUBLIC_GCS_BUCKET_NAME}/clouddq_pyspark_driver.py" \ --spark-file-uris="gs://${DATAPLEX_PUBLIC_GCS_BUCKET_NAME}/clouddq-executable.zip","gs://${DATAPLEX_PUBLIC_GCS_BUCKET_NAME}/clouddq-executable.zip.hashsum","${USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH}" \ --execution-args=^::^TASK_ARGS="clouddq-executable.zip, ALL, ${USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH}, --gcp_project_id='GOOGLE_CLOUD_PROJECT', --gcp_region_id='${DATAPLEX_REGION_ID}', --gcp_bq_dataset_id='${TARGET_BQ_DATASET}', --target_bigquery_summary_table='${GOOGLE_CLOUD_PROJECT}.${TARGET_BQ_DATASET}.${TARGET_BQ_TABLE}'," \ "$TASK_ID"
Parameter | Deskripsi |
---|---|
USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH |
Jalur Cloud Storage ke input konfigurasi YAML kualitas data Anda untuk tugas kualitas data. Anda dapat memiliki satu file YAML dalam format .yml atau .yaml atau satu arsip zip yang berisi beberapa file YAML. |
GOOGLE_CLOUD_PROJECT |
Project Google Cloud tempat tugas Dataplex dan tugas BigQuery dibuat. |
DATAPLEX_REGION_ID |
Region dataplex lake tempat tugas kualitas data dibuat. |
SERVICE_ACCOUNT |
Akun layanan yang digunakan untuk menjalankan tugas. Pastikan akun layanan ini memiliki izin IAM yang memadai seperti yang diuraikan di bagian Sebelum memulai. |
Untuk --execution-args
, argumen berikut harus diteruskan sebagai argumen yang diposisikan, sehingga dalam urutan ini:
Argumen | Deskripsi |
---|---|
clouddq-executable.zip |
File yang dapat dieksekusi sebelumnya dan diteruskan dalam spark-file-uris dari bucket Cloud Storage publik. |
ALL |
Menjalankan semua binding aturan. Atau, Anda dapat memberikan binding aturan tertentu sebagai daftar yang dipisahkan koma.
Misalnya, RULE_1,RULE_2 . |
gcp-project-id |
ID project yang menjalankan kueri BigQuery. |
gcp-region-id |
Region untuk menjalankan tugas BigQuery untuk validasi kualitas data. Region ini harus sama dengan region untuk gcp-bq-dataset-id dan target_bigquery_summary_table . |
gcp-bq-dataset-id |
Set data BigQuery yang digunakan untuk menyimpan tampilan rule_binding dan hasil ringkasan kualitas data menengah. |
target-bigquery-summary-table |
Referensi ID tabel dari tabel BigQuery tempat hasil akhir pemeriksaan kualitas data disimpan. Jangan gunakan nilai ID
dq_summary karena dicadangkan untuk tugas pemrosesan internal. |
--summary_to_stdout |
(Opsional) Jika flag ini diteruskan, semua baris hasil validasi yang dibuat dalam tabel dq_summary selama terakhir kali dijalankan akan dicatat dalam log sebagai data JSON ke Cloud Logging dan stdout . |
API
Ganti kode berikut:
PROJECT_ID = "Your Dataplex Project ID" REGION = "Your Dataplex lake region" LAKE_ID = "Your Dataplex lake ID" SERVICE_ACC = "Your service account used for reading the data" DATAPLEX_TASK_ID = "Unique task ID for the data quality task" BUCKET_NAME = "Your Cloud Storage bucket name containing the CloudDQ configs or YAML specification" GCP_BQ_BILLING_PROJECT_ID = "Your BigQuery billing project" GCP_BQ_REGION_ID = "Your BigQuery dataset region ID" #Optional GCP_BQ_DATASET_ID = "Your BigQuery dataset to store the data quality summary results" TARGET_TABLE_NAME = "Your target table name to store the results in BigQuery dataset"
- Kirim permintaan POST HTTP:
POST https://dataplex.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/lakes/${LAKE_ID}/tasks?task_id=${DATAPLEX_TASK_ID} { "spark": { "python_script_file": f"gs://dataplex-clouddq-artifacts-us-central1/clouddq_pyspark_driver.py", "file_uris": [ f"gs://dataplex-clouddq-artifacts-us-central1/clouddq-executable.zip", f"gs://dataplex-clouddq-artifacts-us-central1/clouddq-executable.zip.hashsum", f"gs://dataplex-clouddq-artifacts-us-central1/your-clouddq-configs.zip" ] }, "execution_spec": { "args": { "TASK_ARGS":f"clouddq-executable.zip, ALL, gs://BUCKET_NAME/your-clouddq-configs.zip, --gcp_project_id=${GCP_BQ_BILLING_PROJECT_ID}, --gcp_region_id=${GCP_BQ_REGION_ID}, --gcp_bq_dataset_id=${GCP_BQ_DATASET_ID}, --target_bigquery_summary_table=${GCP_BQ_BILLING_PROJECT_ID}.${GCP_BQ_DATASET_ID}.${TARGET_TABLE_NAME}" }, "service_account": "SERVICE_ACC" }, "trigger_spec": { "type": "ON_DEMAND" }, "description": "${DATAPLEX_TASK_DESCRIPTION}" }
Lihat juga Contoh DAG Airflow untuk tugas kualitas data Dataplex.
Memantau tugas kualitas data terjadwal
Lihat cara memantau tugas Anda.
Melihat hasil
Hasil validasi kualitas data disimpan dalam set data BigQuery dan tabel ringkasan yang Anda tentukan, seperti yang dijelaskan dalam Membuat set data untuk menyimpan hasil. Tabel ringkasan berisi ringkasan output untuk setiap kombinasi binding aturan dan aturan untuk setiap validasi yang dijalankan. Output dalam tabel ringkasan mencakup informasi berikut:
Nama kolom | Deskripsi |
---|---|
dataplex_lake |
(string) ID Dataplex lake yang berisi tabel yang sedang divalidasi. |
dataplex_zone |
(string) ID zona Dataplex yang berisi tabel yang sedang divalidasi. |
dataplex_asset_id |
(string) ID aset Dataplex yang berisi tabel yang sedang divalidasi. |
execution_ts |
(stempel waktu) Stempel waktu saat kueri validasi dijalankan. |
rule_binding_id |
(string) ID binding aturan yang hasil validasinya dilaporkan. |
rule_id |
(string) ID aturan di bawah binding aturan yang melaporkan hasil validasi. |
dimension |
(string) Dimensi kualitas data rule_id . Nilai ini hanya dapat berupa salah satu nilai yang ditentukan dalam node YAML rule_dimensions . |
table_id |
(string) ID entitas yang hasil validasinya dilaporkan.
ID ini ditentukan di bagian parameter entity dari binding aturan masing-masing. |
column_id |
(string) ID kolom yang hasil validasinya dilaporkan.
ID ini ditentukan di bagian parameter column dari binding aturan masing-masing. |
last_modified |
(stempel waktu) Stempel waktu perubahan terakhir dari table_id yang sedang divalidasi. |
metadata_json_string |
(string) Key-value pair konten parameter metadata yang ditentukan berdasarkan binding aturan atau selama kualitas data berjalan. |
configs_hashsum |
(string) Jumlah hash dokumen JSON yang berisi binding aturan dan semua aturan, binding aturan, filter baris, serta konfigurasi entity yang terkait.
configs_hashsum memungkinkan pelacakan saat konten ID rule_binding atau salah satu konfigurasi yang direferensikan telah berubah. |
dq_run_id |
(string) ID unik data. |
invocation_id |
(string) ID kualitas data yang dijalankan. Semua catatan ringkasan kualitas data yang dihasilkan dalam instance eksekusi kualitas data yang sama memiliki invocation_id yang sama. |
progress_watermark |
(boolean) Menentukan apakah data tertentu ini dipertimbangkan oleh pemeriksaan kualitas data untuk menentukan watermark tinggi untuk validasi inkremental. Jika FALSE , data masing-masing diabaikan saat menetapkan nilai watermark tinggi. Informasi ini berguna saat menjalankan validasi kualitas data pengujian yang tidak boleh memajukan watermark tinggi. Dataplex mengisi kolom ini dengan TRUE secara default, tetapi nilai ini dapat diganti jika argumen --progress_watermark memiliki nilai FALSE .
|
rows_validated |
(bilangan bulat) Jumlah total data yang divalidasi setelah menerapkan row_filters dan filter watermark tinggi apa pun di kolom incremental_time_filter_column_id , jika ditentukan. |
complex_rule_validation_errors_count |
(float) Jumlah baris yang ditampilkan oleh aturan CUSTOM_SQL_STATEMENT . |
complex_rule_validation_success_flag |
(boolean) Status berhasil dari aturan CUSTOM_SQL_STATEMENT .
|
success_count |
(bilangan bulat) Jumlah total catatan yang lulus validasi. Kolom ini ditetapkan ke NULL untuk aturan CUSTOM_SQL_STATEMENT .
|
success_percentage |
(float) Persentase jumlah catatan yang lulus validasi dalam jumlah total catatan yang divalidasi. Kolom ini ditetapkan ke NULL untuk aturan CUSTOM_SQL_STATEMENT . |
failed_count |
(bilangan bulat) Jumlah total catatan yang gagal divalidasi. Kolom ini ditetapkan ke NULL untuk aturan CUSTOM_SQL_STATEMENT .
|
failed_percentage |
(float) Persentase jumlah catatan yang gagal divalidasi dalam jumlah total catatan yang divalidasi. Kolom ini ditetapkan ke NULL untuk aturan CUSTOM_SQL_STATEMENT . |
null_count |
(bilangan bulat) Jumlah total catatan yang menampilkan null selama validasi.
Kolom ini ditetapkan ke NULL untuk aturan NOT_NULL dan CUSTOM_SQL_STATEMENT . |
null_percentage |
(float) Persentase jumlah catatan yang menampilkan null selama validasi dalam jumlah total catatan yang divalidasi. Kolom ini ditetapkan ke NULL untuk aturan NOT_NULL dan CUSTOM_SQL_STATEMENT . |
failed_records_query |
Untuk setiap aturan yang gagal, kolom ini menyimpan kueri yang dapat Anda gunakan untuk mendapatkan data yang gagal. Dalam dokumen ini, lihat
Memecahkan masalah aturan yang gagal dengan
failed_records_query . |
Untuk entity BigQuery, tampilan dibuat untuk setiap rule_binding
yang berisi logika validasi SQL dari eksekusi terbaru. Anda dapat menemukan tampilan ini dalam set data BigQuery yang ditentukan dalam argumen --gcp-bq-dataset-id
.
Pengoptimalan biaya
Anda dapat membantu mengurangi biaya dengan pengoptimalan berikut.
Validasi inkremental
Sering kali, Anda memiliki tabel yang diperbarui secara rutin dengan partisi baru (baris baru). Jika tidak ingin memvalidasi ulang partisi lama di setiap proses, Anda dapat menggunakan validasi inkremental.
Untuk validasi inkremental, Anda harus memiliki kolom jenis TIMESTAMP
atau DATETIME
dalam tabel tempat nilai kolom meningkat secara monoton. Anda dapat menggunakan kolom tempat tabel BigQuery Anda dipartisi.
Untuk menetapkan validasi inkremental, tentukan nilai untuk incremental_time_filter_column_id=TIMESTAMP/DATETIME type column
sebagai bagian dari binding aturan.
Saat Anda menentukan kolom, tugas kualitas data hanya mempertimbangkan baris dengan nilai TIMESTAMP
lebih besar dari stempel waktu tugas kualitas data terakhir yang berjalan.
Contoh file spesifikasi
Untuk menggunakan contoh ini, buat set data BigQuery
bernama sales
. Kemudian, buat tabel fakta bernama sales_orders
dan tambahkan data contoh dengan menjalankan kueri dengan pernyataan GoogleSQL berikut:
CREATE OR REPLACE TABLE sales.sales_orders
(
id STRING NOT NULL,
last_modified_timestamp TIMESTAMP,
customer_id STRING,
item_id STRING,
amount NUMERIC,
transaction_currency STRING
);
INSERT INTO sales.sales_orders
(id, last_modified_timestamp, customer_id, item_id, amount, transaction_currency)
VALUES
("order1",CURRENT_TIMESTAMP(),"customer1","ASDWQ123456789012345",100,"USD"),
("order1",CURRENT_TIMESTAMP(),"customer2","bad_item_id",-10,"XXX"),
("order2",CURRENT_TIMESTAMP(),"customer3","INTNL987654321098765",50,"GBP"),
("order3",CURRENT_TIMESTAMP(),"customer4","INTNL932716428593847",50,"GBP")
Contoh 1
Contoh kode berikut membuat pemeriksaan kualitas data untuk memvalidasi nilai-nilai ini:
amount
: nilainya berupa nol atau angka positif.item_id
: string alfanumerik yang terdiri dari 5 karakter alfabet, diikuti oleh 15 digit.transaction_currency
: jenis mata uang yang diizinkan, seperti yang ditentukan oleh daftar statis. Daftar statis contoh ini memungkinkan GBP dan JPY sebagai jenis mata uang. Validasi ini hanya berlaku untuk baris yang ditandai sebagai internasional.
# The following `NONE` row filter is required.
row_filters:
NONE:
filter_sql_expr: |-
True
# This filters for rows marked as international (INTNL).
INTERNATIONAL_ITEMS:
filter_sql_expr: |-
REGEXP_CONTAINS(item_id, 'INTNL')
# Rule dimensions are optional but let you aggregate reporting.
rule_dimensions:
- consistency
- correctness
- duplication
- completeness
- conformance
- integrity
# Rules can apply to multiple tables or columns.
rules:
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
dimension: correctness
params:
custom_sql_expr: |-
$column >= 0
VALID_ITEM_ID:
rule_type: REGEX
dimension: conformance
params:
pattern: |-
[A-Z]{5}[0-9]{15}
VALID_CURRENCY_ID:
rule_type: CUSTOM_SQL_EXPR
dimension: integrity
params:
custom_sql_expr: |-
$column in ('GBP', 'JPY')
# Rule bindings associate rules to columns within tables.
rule_bindings:
TRANSACTION_AMOUNT_VALID:
entity_uri: bigquery://projects/PROJECT_ID/datasets/DATASET_ID/tables/sales_orders
column_id: amount
row_filter_id: NONE
rule_ids:
- VALUE_ZERO_OR_POSITIVE
TRANSACTION_VALID_ITEM_ID:
entity_uri: bigquery://projects/PROJECT_ID/datasets/DATASET_ID/tables/sales_orders
column_id: item_id
row_filter_id: NONE
rule_ids:
- VALID_ITEM_ID
TRANSACTION_CURRENCY_VALID:
entity_uri: bigquery://projects/PROJECT_ID/datasets/DATASET_ID/tables/sales_orders
column_id: transaction_currency
row_filter_id: INTERNATIONAL_ITEMS
rule_ids:
- VALID_CURRENCY_ID
Ganti kode berikut:
PROJECT_ID
: project ID Anda.DATASET_ID
: ID set data.
Sampel 2
Jika tabel yang akan diperiksa adalah bagian dari data lake Dataplex, Anda dapat menentukan tabel menggunakan notasi data lake atau zona. Dengan begitu, Anda dapat menggabungkan hasil menurut danau atau zona. Misalnya, Anda dapat membuat skor tingkat zona.
Untuk menggunakan contoh ini, buat Dataplex lake dengan ID lake
operations
dan ID zona procurement
. Kemudian, tambahkan tabel sales_orders
sebagai aset ke zona.
# This is a convenience section that allows you to shorten the entity_uri
metadata_registry_defaults:
dataplex:
projects: PROJECT_ID
locations: REGION_ID
lakes: operations
zones: procurement
# You have to define a NONE row filter
row_filters:
NONE:
filter_sql_expr: |-
True
INTERNATIONAL_ITEMS:
filter_sql_expr: |-
REGEXP_CONTAINS(item_id, 'INTNL')
# rule dimensions are optional but allow you to aggregate reporting.
rule_dimensions:
- consistency
- correctness
- duplication
- completeness
- conformance
- integrity
# Rules can be shared across tables or columns.
rules:
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
dimension: correctness
params:
custom_sql_expr: |-
$column >= 0
VALID_ITEM_ID:
rule_type: REGEX
dimension: conformance
params:
pattern: |-
[A-Z]{5}[0-9]{15}
VALID_CURRENCY_ID:
rule_type: CUSTOM_SQL_EXPR
dimension: integrity
params:
custom_sql_expr: |-
$column in ('GBP', 'JPY')
#rule bindings associate rules to {table, column}
rule_bindings:
TRANSACTION_AMOUNT_VALID:
entity_uri: dataplex://projects/PROJECT_ID/locations/REGION_ID/lakes/operations/zones/procurement/entities/sales_orders
column_id: amount
row_filter_id: NONE
rule_ids:
- VALUE_ZERO_OR_POSITIVE
TRANSACTION_VALID_ITEM_ID:
entity_uri: dataplex://zones/procurement/entities/sales_orders # omitting projects/locations/lakes from uri path to use the default values specified in metadata_registry_defaults
column_id: item_id
row_filter_id: NONE
rule_ids:
- VALID_ITEM_ID
TRANSACTION_CURRENCY_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: transaction_currency
row_filter_id: INTERNATIONAL_ITEMS
rule_ids:
- VALID_CURRENCY_ID
Ganti kode berikut:
- PROJECT_ID: project ID Anda.
- REGION_ID: ID region data lake Dataplex tempat tabel berada, seperti
us-central1
.
Contoh 3
Contoh ini meningkatkan Contoh 2 dengan menambahkan pemeriksaan SQL kustom untuk melihat apakah nilai ID unik.
# This is a convenience section that allows you to shorten the entity_uri
metadata_registry_defaults:
dataplex:
projects: PROJECT_ID
locations: REGION_ID
lakes: operations
zones: procurement
# You have to define a NONE row filter
row_filters:
NONE:
filter_sql_expr: |-
True
INTERNATIONAL_ITEMS:
filter_sql_expr: |-
REGEXP_CONTAINS(item_id, 'INTNL')
# rule dimensions are optional but allow you to aggregate reporting.
rule_dimensions:
- consistency
- correctness
- duplication
- completeness
- conformance
- integrity
# Rules can be shared across tables or columns.
rules:
# This rule is parameterized with column_names as parameter
NO_DUPLICATES_IN_COLUMN_GROUPS:
rule_type: CUSTOM_SQL_STATEMENT
dimension: duplication
params:
custom_sql_arguments:
- column_names
custom_sql_statement: |-
select a.*
from data a
inner join (
select
$column_names
from data
group by $column_names
having count(*) > 1
) duplicates
using ($column_names)
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
dimension: correctness
params:
custom_sql_expr: |-
$column >= 0
VALID_ITEM_ID:
rule_type: REGEX
dimension: conformance
params:
pattern: |-
[A-Z]{5}[0-9]{15}
VALID_CURRENCY_ID:
rule_type: CUSTOM_SQL_EXPR
dimension: integrity
params:
custom_sql_expr: |-
$column in ('GBP', 'JPY')
#rule bindings associate rules to {table, column}
rule_bindings:
TRANSACTIONS_UNIQUE:
entity_uri: dataplex://projects/PROJECT_ID/locations/REGION_ID/lakes/operations/zones/procurement/entities/sales_orders
column_id: id
row_filter_id: NONE
rule_ids:
- NO_DUPLICATES_IN_COLUMN_GROUPS:
column_names: "id"
TRANSACTION_AMOUNT_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders # omitting projects/locations/lakes from uri path to use the default values specified in metadata_registry_defaults
column_id: amount
row_filter_id: NONE
rule_ids:
- VALUE_ZERO_OR_POSITIVE
TRANSACTION_VALID_ITEM_ID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: item_id
row_filter_id: NONE
rule_ids:
- VALID_ITEM_ID
TRANSACTION_CURRENCY_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: transaction_currency
row_filter_id: INTERNATIONAL_ITEMS
rule_ids:
- VALID_CURRENCY_ID
Contoh 4
Contoh ini meningkatkan Contoh 3 dengan menambahkan validasi inkremental menggunakan
kolom last_modified_timestamp
. Anda dapat menambahkan validasi inkremental untuk satu
atau beberapa binding aturan.
# This is a convenience section that allows you to shorten the entity_uri
metadata_registry_defaults:
dataplex:
projects: PROJECT_ID
locations: REGION_ID
lakes: operations
zones: procurement
# You have to define a NONE row filter
row_filters:
NONE:
filter_sql_expr: |-
True
INTERNATIONAL_ITEMS:
filter_sql_expr: |-
REGEXP_CONTAINS(item_id, 'INTNL')
# rule dimensions are optional but allow you to aggregate reporting.
rule_dimensions:
- consistency
- correctness
- duplication
- completeness
- conformance
- integrity
# Rules can be shared across tables or columns.
rules:
# This rule is parameterized with column_names as parameter
NO_DUPLICATES_IN_COLUMN_GROUPS:
rule_type: CUSTOM_SQL_STATEMENT
dimension: duplication
params:
custom_sql_arguments:
- column_names
custom_sql_statement: |-
select a.*
from data a
inner join (
select
$column_names
from data
group by $column_names
having count(*) > 1
) duplicates
using ($column_names)
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
dimension: correctness
params:
custom_sql_expr: |-
$column >= 0
VALID_ITEM_ID:
rule_type: REGEX
dimension: conformance
params:
pattern: |-
[A-Z]{5}[0-9]{15}
VALID_CURRENCY_ID:
rule_type: CUSTOM_SQL_EXPR
dimension: integrity
params:
custom_sql_expr: |-
$column in ('GBP', 'JPY')
#rule bindings associate rules to {table, column}
rule_bindings:
TRANSACTIONS_UNIQUE:
entity_uri: dataplex://projects/PROJECT_ID/locations/REGION_ID/lakes/operations/zones/procurement/entities/sales_orders
column_id: id
row_filter_id: NONE
incremental_time_filter_column_id: last_modified_timestamp
rule_ids:
- NO_DUPLICATES_IN_COLUMN_GROUPS:
column_names: "id"
TRANSACTION_AMOUNT_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders # omitting projects/locations/lakes from uri path to use the default values specified in metadata_registry_defaults
column_id: amount
row_filter_id: NONE
incremental_time_filter_column_id: last_modified_timestamp
rule_ids:
- VALUE_ZERO_OR_POSITIVE
TRANSACTION_VALID_ITEM_ID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: item_id
row_filter_id: NONE
incremental_time_filter_column_id: last_modified_timestamp
rule_ids:
- VALID_ITEM_ID
TRANSACTION_CURRENCY_VALID:
entity_uri: dataplex://zones/procurement/entities/sales_orders
column_id: transaction_currency
row_filter_id: INTERNATIONAL_ITEMS
incremental_time_filter_column_id: last_modified_timestamp
rule_ids:
- VALID_CURRENCY_ID
Memecahkan masalah aturan yang gagal dengan failed_records_query
Untuk setiap aturan yang gagal, tabel ringkasan akan menyimpan kueri di kolom failed_records_query
yang dapat Anda gunakan untuk mendapatkan data yang gagal.
Untuk men-debug, Anda juga dapat menggunakan reference columns
dalam file YAML, yang memungkinkan Anda menggabungkan output failed_records_query
dengan data asli untuk mendapatkan seluruh kumpulan data. Misalnya, Anda dapat menentukan kolom primary_key
atau kolom primary_key
gabungan sebagai kolom referensi.
Menentukan kolom referensi
Untuk membuat kolom referensi, Anda dapat menambahkan hal berikut ke spesifikasi YAML:
Bagian
reference_columns
. Di bagian ini, Anda dapat membuat satu atau beberapa kumpulan kolom referensi, dengan setiap kumpulan menentukan satu atau beberapa kolom.Bagian
rule_bindings
. Di bagian ini, Anda dapat menambahkan baris ke binding aturan yang menentukan ID kolom referensi (reference_columns_id
) yang akan digunakan untuk aturan dalam binding aturan tersebut. Nilai ini harus berupa salah satu kumpulan kolom referensi yang ditentukan di bagianreference_columns
.
Misalnya, file YAML berikut menentukan bagian reference_columns
dan menentukan tiga kolom: id
, last_modified_timestamp
, dan item_id
sebagai bagian dari kumpulan ORDER_DETAILS_REFERENCE_COLUMNS
. Contoh
berikut menggunakan tabel contoh sales_orders
.
reference_columns:
ORDER_DETAILS_REFERENCE_COLUMNS:
include_reference_columns:
- id
- last_modified_timestamp
- item_id
rules:
VALUE_ZERO_OR_POSITIVE:
rule_type: CUSTOM_SQL_EXPR
params:
custom_sql_expr: |-
row_filters:
NONE:
filter_sql_expr: |-
True
rule_bindings:
TRANSACTION_AMOUNT_VALID:
entity_uri: bigquery://projects/PROJECT_ID/datasets/DATASET_ID/tables/sales_orders
column_id: amount
row_filter_id: NONE
reference_columns_id: ORDER_DETAILS_REFERENCE_COLUMNS
rule_ids:
- VALUE_ZERO_OR_POSITIVE
Menggunakan kueri kumpulan data yang gagal
Kueri kumpulan data yang gagal menghasilkan baris untuk setiap catatan yang memiliki aturan yang gagal. Objek ini mencakup nama kolom yang memicu kegagalan, nilai yang memicu kegagalan, dan nilai untuk kolom referensi. Ini juga mencakup metadata yang dapat Anda gunakan untuk mengaitkan dengan eksekusi tugas kualitas data.
Berikut adalah contoh output dari kueri kumpulan data yang gagal untuk file YAML, yang dijelaskan dalam Menentukan kolom referensi. Pesan ini menunjukkan kegagalan untuk kolom amount
dan nilai -10
yang gagal. Kode ini juga mencatat nilai yang sesuai untuk kolom referensi.
_dq_validation_invocation_id | _dq_validation_rule_binding_id | _dq_validation_rule_id | _dq_validation_column_id | _dq_validation_column_value | _dq_validation_dimension | _dq_validation_simple_rule_row_is_valid | _dq_validation_complex_rule_validation_errors_count | _dq_validation_complex_rule_validation_success_flag | id | last_modified_timestamp | item_id |
---|---|---|---|---|---|---|---|---|---|---|---|
10a25be9-8dfa-446c-a42c-75f6bb4a49d9 | TRANSACTION_AMOUNT_VALID | VALUE_ZERO_OR_POSITIVE | amount | -10 | FALSE | order1 | 2022-01-22T02:30:06.321Z | bad_item_id |
Menggunakan kueri kumpulan data yang gagal untuk aturan CUSTOM_SQL_STATEMENT
Untuk aturan CUSTOM_SQL_STATEMENT
, kueri record yang gagal menyertakan kolom custom_sql_statement_validation_errors
. Kolom custom_sql_statement_validation_errors
adalah kolom bertingkat dengan kolom yang cocok dengan output pernyataan SQL Anda. Kolom referensi tidak disertakan dalam kueri record yang gagal untuk aturan CUSTOM_SQL_STATEMENT
.
Misalnya, aturan CUSTOM_SQL_STATEMENT
Anda mungkin terlihat seperti ini:
rules: TEST_RULE: rule_type: CUSTOM_SQL_STATEMENT custom_sql_arguments: - existing_id - replacement_id params: CUSTOM_SQL_STATEMENT: |- (SELECT product_name, product_key FROM data where $existing_id != $replacement_id)
custom_sql_statement_validation_errors
, dengan baris untuk setiap kemunculan dengan existing_id!=replacement_id
.
Saat dirender dalam JSON, isi sel dalam kolom ini mungkin terlihat seperti ini:
{ "custom_sql_statement_valdation_errors" :{ "product_name"="abc" "product_key"="12345678" "_rule_binding_id"="your_rule_binding" } }
Anda dapat menggabungkan hasil ini ke tabel asli dengan referensi bertingkat seperti join on custom_sql_statement_valdation_errors.product_key
.
Langkah selanjutnya
- Lihat referensi spesifikasi YAML CloudDQ.
- Untuk contoh aturan kualitas data, lihat Aturan sederhana dan Aturan lanjutan.
- Lihat Contoh DAG Airflow untuk tugas kualitas data Dataplex.