Menggunakan tugas kualitas data

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

  1. Mengaktifkan Dataproc API.

    Mengaktifkan API

  2. 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:

  1. 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.

  2. Buat bucket Cloud Storage.
  3. 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, seperti NOT_NULL dan REGEX, atau memperluasnya dengan pernyataan SQL kustom seperti CUSTOM_SQL_EXPR dan CUSTOM_SQL_STATEMENT. Pernyataan CUSTOM_SQL_EXPR menandai setiap baris yang dievaluasi oleh custom_sql_expr sebagai False sebagai kegagalan. Pernyataan CUSTOM_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): Menentukan rules dan rule 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 kolom dimension yang sesuai.

    Contoh:

    rule_dimensions:
      - consistency
      - correctness
      - duplication
      - completeness
      - conformance

    Kolom dimension bersifat opsional untuk aturan. Bagian dimensi aturan bersifat wajib jika dimension 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:

Opsional: Menggunakan setelan lanjutan

Langkah-langkah ini bersifat opsional:

  1. 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.

  2. 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

  1. Di konsol Google Cloud, buka halaman Process Dataplex.

    Buka Process

  2. Klik Create task.
  3. Di kartu Check Data Quality, klik Create task.
  4. Untuk Dataplex lake, pilih lake Anda.
  5. Untuk ID, masukkan ID.
  6. Di bagian Data quality specification, lakukan tindakan berikut:
    1. Di kolom Select GCS file, klik Browse.
    2. Pilih bucket Cloud Storage Anda.

    3. Klik Select.

  7. Di bagian Results table, lakukan hal berikut:

    1. Di kolom Select BigQuery dataset, klik Browse.

    2. Pilih set data BigQuery untuk menyimpan hasil validasi.

    3. Klik Pilih.

    4. 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.

  8. Dalam bagian Service account, pilih akun layanan dari menu User service account.

  9. Klik Lanjutkan.

  10. Di bagian Set schedule, konfigurasikan jadwal untuk menjalankan tugas kualitas data.

  11. 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

  1. 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"
  2. 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:

  1. Bagian reference_columns. Di bagian ini, Anda dapat membuat satu atau beberapa kumpulan kolom referensi, dengan setiap kumpulan menentukan satu atau beberapa kolom.

  2. 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 bagian reference_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)
Hasil untuk contoh ini akan berisi satu atau beberapa baris untuk kolom 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