Menggunakan tugas kualitas data

Dokumen ini menunjukkan cara membuat tugas kualitas data Knowledge Catalog yang memungkinkan Anda menjadwalkan dan menjalankan pemeriksaan kualitas data untuk tabel BigQuery bawaan dan eksternal.

Untuk mengetahui informasi selengkapnya, lihat Ringkasan tugas kualitas data.

Sebelum memulai

Dokumen ini mengasumsikan bahwa Anda sudah memiliki lake Knowledge Catalog untuk membuat tugas kualitas data.

Mengaktifkan Google API dan layanan

  1. Mengaktifkan Dataproc API.

    Mengaktifkan API

  2. Aktifkan Akses Google Pribadi untuk jaringan dan subnetwork Anda. Aktifkan Akses Google Pribadi di jaringan yang akan Anda gunakan dengan tugas kualitas data Knowledge Catalog. Jika Anda tidak menentukan jaringan atau subnetwork saat membuat tugas kualitas data Knowledge Catalog, Knowledge Catalog akan menggunakan subnet default. Dalam hal ini, Anda perlu mengaktifkan Akses Google Pribadi di subnet default.

Membuat file spesifikasi

Knowledge Catalog menggunakan CloudDQ open source sebagai program driver. Persyaratan pemeriksaan kualitas data Knowledge Catalog ditentukan dalam file spesifikasi YAML CloudDQ.

Sebagai input terhadap 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 mengetahui 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 mengetahui informasi selengkapnya, lihat panduan referensi CloudDQ dan file spesifikasi contoh.

Buat set data untuk menyimpan hasilnya

  • Untuk menyimpan hasilnya, buat set data BigQuery.

    Set data harus berada di region yang sama dengan tabel tempat Anda menjalankan tugas kualitas data.

    Knowledge Catalog 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:

Menggunakan setelan lanjutan

Langkah-langkah ini bersifat opsional:

  • BigQuery menjalankan pemeriksaan kualitas data di project saat ini secara default. Anda dapat memilih project lain untuk menjalankan tugas BigQuery. Gunakan 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 (yang ditentukan oleh --execution-service-account) dibuat, pastikan 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 Knowledge Catalog.

    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 hasilnya. Jika tabel tidak ada, Knowledge Catalog 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 Setel jadwal, konfigurasi jadwal untuk menjalankan tugas kualitas data.

  11. Klik Create.

gcloud CLI

Berikut adalah contoh eksekusi tugas kualitas data yang menggunakan perintah gcloud CLI tugas Knowledge Catalog:

export USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH="USER_CLOUDDQ_YAML_CONFIGS_GCS_PATH"

# Google Cloud project where the Knowledge Catalog task is created.
export GOOGLE_CLOUD_PROJECT="GOOGLE_CLOUD_PROJECT"

# Google Cloud region for the Knowledge Catalog 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 Knowledge Catalog lake where your task is created.
export DATAPLEX_LAKE_ID="DATAPLEX_LAKE_ID"

# 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.
export DATAPLEX_TASK_SERVICE_ACCOUNT="DATAPLEX_TASK_SERVICE_ACCOUNT"

# 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="CLOUDDQ_BIGQUERY_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_ID}" \
    --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 Google Cloud Project tempat tugas Knowledge Catalog dan tugas BigQuery dibuat.
DATAPLEX_REGION_ID Region Knowledge Catalog 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 Knowledge Catalog Project ID"
    REGION = "Your Knowledge Catalog lake region"
    LAKE_ID = "Your Knowledge Catalog 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 Knowledge Catalog.

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 Knowledge Catalog lake yang berisi tabel yang sedang divalidasi.
dataplex_zone (string) ID zona Knowledge Catalog yang berisi tabel yang sedang divalidasi.
dataplex_asset_id (string) ID aset Knowledge Catalog 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 direferensikannya 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. Knowledge Catalog 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

Tugas kualitas data dieksekusi sebagai tugas BigQuery di project Anda. Untuk mengontrol biaya menjalankan tugas kualitas data, gunakan harga BigQuery di project tempat tugas BigQuery Anda dijalankan. Untuk mengetahui informasi selengkapnya, lihat Pengelolaan workload BigQuery.

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