1. Giới thiệu
Lớp học lập trình này cung cấp một bản thiết kế kỹ thuật cho những người thực hành dữ liệu. Tài liệu này trình bày phương pháp "ưu tiên mã" để quản trị dữ liệu, minh hoạ cách nhúng tính năng quản lý siêu dữ liệu và chất lượng mạnh mẽ trực tiếp vào vòng đời phát triển. Về cơ bản, Danh mục kiến thức đóng vai trò là một kết cấu dữ liệu thông minh, cho phép các tổ chức quản lý, giám sát và kiểm soát dữ liệu một cách tập trung trên toàn bộ tài sản của họ, từ hồ dữ liệu đến kho dữ liệu.
Lớp học lập trình này minh hoạ cách tận dụng Danh mục kiến thức, BigQuery và Antigravity CLI để đơn giản hoá dữ liệu phức tạp, lập trình để lập hồ sơ dữ liệu, tạo các đề xuất thông minh về quy tắc chất lượng dữ liệu và triển khai các quy trình quét chất lượng tự động. Mục tiêu chính là vượt qua các quy trình thủ công, dựa trên giao diện người dùng (dễ xảy ra lỗi và khó mở rộng quy mô), thay vào đó, hãy thiết lập một khung "chính sách dưới dạng mã" mạnh mẽ, có thể kiểm soát phiên bản.
Kiến thức bạn sẽ học được
- Cách làm phẳng dữ liệu BigQuery lồng nhau bằng Chế độ xem cụ thể hoá để bật tính năng lập hồ sơ toàn diện.
- Cách kích hoạt và quản lý các lượt quét hồ sơ Danh mục tri thức theo phương thức lập trình bằng Thư viện ứng dụng Python của Danh mục tri thức.
- Cách xuất dữ liệu hồ sơ và cấu trúc dữ liệu đó dưới dạng dữ liệu đầu vào cho một mô hình AI tạo sinh.
- Cách thiết kế một câu lệnh cho Antigravity CLI để phân tích dữ liệu hồ sơ và tạo một tệp quy tắc YAML tuân thủ Danh mục kiến thức.
- Tầm quan trọng của quy trình tương tác có sự tham gia của con người (HITL) để xác thực các cấu hình do AI tạo.
- Cách triển khai các quy tắc đã tạo dưới dạng một quy trình quét chất lượng dữ liệu tự động.
Bạn cần có
- Tài khoản Google Cloud và dự án trên Google Cloud
- Một trình duyệt web như Chrome
Các khái niệm chính: các trụ cột về chất lượng dữ liệu của Danh mục kiến thức
Việc hiểu rõ các thành phần cốt lõi của Danh mục kiến thức là điều cần thiết để xây dựng một chiến lược hiệu quả về chất lượng dữ liệu.
- Quét hồ sơ dữ liệu: Một công việc trong Danh mục tri thức giúp phân tích dữ liệu và tạo siêu dữ liệu thống kê, bao gồm cả tỷ lệ phần trăm giá trị rỗng, số lượng giá trị riêng biệt và phân phối giá trị. Đây là giai đoạn "khám phá" theo phương thức lập trình của chúng tôi.
- Quy tắc về chất lượng dữ liệu: Các câu khai báo xác định những điều kiện mà dữ liệu của bạn phải đáp ứng (ví dụ:
NonNullExpectation,SetExpectation,RangeExpectation). - AI tạo sinh cho Đề xuất quy tắc: Sử dụng mô hình ngôn ngữ lớn (chẳng hạn như Gemini) để phân tích hồ sơ dữ liệu và đề xuất các quy tắc chất lượng dữ liệu có liên quan. Việc này giúp đẩy nhanh quá trình xác định khung chất lượng cơ bản.
- Quét chất lượng dữ liệu: Một công việc trong Danh mục kiến thức giúp xác thực dữ liệu dựa trên một tập hợp các quy tắc được xác định trước hoặc tuỳ chỉnh.
- Quản trị theo chương trình: Chủ đề chính của việc quản lý các chế độ kiểm soát hoạt động quản trị (chẳng hạn như quy tắc về chất lượng) dưới dạng mã (ví dụ: trong tệp YAML và tập lệnh Python). Điều này cho phép tự động hoá, tạo phiên bản và tích hợp vào các quy trình CI/CD.
- Con người trong vòng lặp (HITL): Điểm kiểm soát quan trọng để tích hợp chuyên môn và sự giám sát của con người vào một quy trình tự động. Đối với các cấu hình do AI tạo, HITL là yếu tố cần thiết để xác thực tính chính xác, mức độ phù hợp với hoạt động kinh doanh và độ an toàn của các đề xuất trước khi triển khai.
2. Thiết lập và yêu cầu
Khởi động Cloud Shell
Mặc dù có thể vận hành Google Cloud từ xa trên máy tính xách tay, nhưng trong lớp học lập trình này, bạn sẽ sử dụng Google Cloud Shell, một môi trường dòng lệnh chạy trên Cloud.
Trên Bảng điều khiển Google Cloud, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và hoạt động xác thực. Bạn có thể thực hiện mọi thao tác trong lớp học lập trình này trong trình duyệt. Bạn không cần cài đặt bất cứ thứ gì.
Bật các API bắt buộc và định cấu hình môi trường
Trong Cloud Shell, hãy đảm bảo bạn đã thiết lập mã dự án:
export PROJECT_ID=$(gcloud config get-value project)
gcloud config set project $PROJECT_ID
export LOCATION="us-central1"
export BQ_LOCATION="us"
export DATASET_ID="kc_dq_codelab"
export TABLE_ID="ga4_transactions"
gcloud services enable dataplex.googleapis.com \
bigquery.googleapis.com \
serviceusage.googleapis.com \
aiplatform.googleapis.com
Trong ví dụ này, chúng ta sẽ sử dụng us (nhiều khu vực) làm vị trí vì dữ liệu mẫu công khai mà chúng ta sẽ sử dụng cũng nằm ở us (nhiều khu vực). BigQuery yêu cầu dữ liệu nguồn và bảng đích cho một truy vấn phải nằm ở cùng một vị trí.
Tạo một tập dữ liệu BigQuery chuyên dụng
Tạo một tập dữ liệu BigQuery mới để lưu trữ dữ liệu và kết quả mẫu.
bq --location=us mk --dataset $PROJECT_ID:$DATASET_ID
Chuẩn bị dữ liệu mẫu
Trong lớp học lập trình này, bạn sẽ sử dụng một tập dữ liệu công khai chứa dữ liệu thương mại điện tử ở dạng xáo trộn của Google Merchandise Store. Vì tập dữ liệu công khai chỉ có thể đọc, nên bạn phải tạo một bản sao có thể thay đổi trong tập dữ liệu của riêng mình. Lệnh bq sau đây sẽ tạo một bảng mới (ga4_transactions) trong tập dữ liệu kc_dq_codelab. Thao tác này sao chép dữ liệu từ một ngày (2021-01-31) để đảm bảo các lượt quét chạy nhanh.
bq query \
--use_legacy_sql=false \
--destination_table=$PROJECT_ID:$DATASET_ID.$TABLE_ID \
--replace=true \
'SELECT * FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_20210131`'
Thiết lập thư mục minh hoạ
Để bắt đầu, bạn sẽ sao chép một kho lưu trữ GitHub chứa cấu trúc thư mục và các tệp hỗ trợ cần thiết cho lớp học lập trình này.
# Perform a shallow clone to get only the latest repository structure without the full history
git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos
# Specify and download only the folder we need for this lab
git sparse-checkout set data-analytics/programmatic-dq
cd data-analytics/programmatic-dq
Thư mục này hiện là khu vực làm việc đang hoạt động của bạn. Tất cả các tệp tiếp theo sẽ được tạo ở đây.
3. Tự động khám phá dữ liệu bằng cách lập hồ sơ Knowledge Catalog
Hồ sơ dữ liệu Danh mục tri thức là một công cụ mạnh mẽ để tự động khám phá thông tin thống kê về dữ liệu của bạn, chẳng hạn như tỷ lệ phần trăm giá trị rỗng, tính duy nhất và mức phân phối giá trị. Quy trình này rất cần thiết để hiểu rõ cấu trúc và chất lượng dữ liệu của bạn. Tuy nhiên, hạn chế đã biết của việc lập hồ sơ Danh mục tri thức là không thể kiểm tra đầy đủ các trường lặp lại hoặc lồng nhau (ví dụ: các loại RECORD hoặc ARRAY) trong một bảng. Nó có thể xác định rằng một cột là một loại phức tạp nhưng không thể lập hồ sơ cho các trường riêng lẻ trong cấu trúc lồng nhau đó.
Để khắc phục vấn đề này, chúng ta sẽ làm phẳng dữ liệu thành các Khung hiển thị cụ thể được tạo sẵn. Chiến lược này sẽ biến mọi trường thành một cột cấp cao nhất, cho phép Danh mục tri thức lập hồ sơ cho từng trường riêng lẻ.
Tìm hiểu về giản đồ lồng nhau
Trước tiên, hãy xem xét giản đồ của bảng nguồn. Tập dữ liệu Google Analytics 4 (GA4) chứa một số cột lặp lại và lồng nhau. Để truy xuất toàn bộ giản đồ theo phương thức lập trình, bao gồm cả tất cả các cấu trúc lồng nhau, bạn có thể sử dụng lệnh bq show và lưu đầu ra dưới dạng tệp JSON.
bq show --schema --format=json $PROJECT_ID:$DATASET_ID.$TABLE_ID > bq_schema.json
Kiểm tra tệp bq_schema.json sẽ cho thấy các cấu trúc phức tạp như thiết bị, vị trí địa lý, thương mại điện tử và các mục bản ghi lặp lại. Đây là những cấu trúc cần được làm phẳng để lập hồ sơ hiệu quả.
Làm phẳng dữ liệu bằng Khung hiển thị cụ thể hoá
Tạo Chế độ xem đã cụ thể hoá (MV) là giải pháp hiệu quả và thiết thực nhất cho thách thức về dữ liệu lồng nhau này. Bằng cách tính toán trước các kết quả được đơn giản hoá, MV mang lại những lợi thế đáng kể về hiệu suất và chi phí truy vấn, đồng thời cung cấp một cấu trúc đơn giản hơn, tương tự như cấu trúc quan hệ cho các nhà phân tích và công cụ lập hồ sơ.
Điều đầu tiên bạn nghĩ đến có thể là làm phẳng mọi thứ thành một khung hiển thị khổng lồ. Tuy nhiên, phương pháp trực quan này ẩn chứa một cạm bẫy nguy hiểm có thể dẫn đến tình trạng hỏng dữ liệu nghiêm trọng. Hãy cùng tìm hiểu lý do đây là một lỗi nghiêm trọng.
mv_ga4_user_session_flat.sql
CREATE OR REPLACE MATERIALIZED VIEW `$PROJECT_ID.$DATASET_ID.mv_ga4_user_session_flat`
OPTIONS (
enable_refresh = true,
refresh_interval_minutes = 30
) AS
SELECT
event_date, event_timestamp, event_name, user_pseudo_id, user_id, stream_id, platform,
device.category AS device_category,
device.operating_system AS device_os,
device.operating_system_version AS device_os_version,
device.language AS device_language,
device.web_info.browser AS device_browser,
geo.continent AS geo_continent,
geo.country AS geo_country,
geo.region AS geo_region,
geo.city AS geo_city,
traffic_source.name AS traffic_source_name,
traffic_source.medium AS traffic_source_medium,
traffic_source.source AS traffic_source_source
FROM
`$PROJECT_ID.$DATASET_ID.ga4_transactions`;
mv_ga4_ecommerce_transactions.sql
CREATE OR REPLACE MATERIALIZED VIEW `$PROJECT_ID.$DATASET_ID.mv_ga4_ecommerce_transactions`
OPTIONS (
enable_refresh = true,
refresh_interval_minutes = 30
) AS
SELECT
event_date, event_timestamp, user_pseudo_id, ecommerce.transaction_id,
ecommerce.total_item_quantity,
ecommerce.purchase_revenue_in_usd,
ecommerce.purchase_revenue,
ecommerce.refund_value_in_usd,
ecommerce.refund_value,
ecommerce.shipping_value_in_usd,
ecommerce.shipping_value,
ecommerce.tax_value_in_usd,
ecommerce.tax_value,
ecommerce.unique_items
FROM
`$PROJECT_ID.$DATASET_ID.ga4_transactions`
WHERE
ecommerce.transaction_id IS NOT NULL;
mv_ga4_ecommerce_items.sql
CREATE OR REPLACE MATERIALIZED VIEW `$PROJECT_ID.$DATASET_ID.mv_ga4_ecommerce_items`
OPTIONS (
enable_refresh = true,
refresh_interval_minutes = 30
) AS
SELECT
event_date, event_timestamp, event_name, user_pseudo_id, ecommerce.transaction_id,
item.item_id,
item.item_name,
item.item_brand,
item.item_variant,
item.item_category,
item.item_category2,
item.item_category3,
item.item_category4,
item.item_category5,
item.price_in_usd,
item.price,
item.quantity,
item.item_revenue_in_usd,
item.item_revenue,
item.coupon,
item.affiliation,
item.item_list_name,
item.promotion_name
FROM
`$PROJECT_ID.$DATASET_ID.ga4_transactions`,
UNNEST(items) AS item
WHERE
ecommerce.transaction_id IS NOT NULL;
Giờ đây, hãy thực thi các mẫu này bằng công cụ dòng lệnh bq. Lệnh envsubst sẽ đọc từng tệp, thay thế các biến như $PROJECT_ID và $DATASET_ID bằng các giá trị của chúng trong môi trường shell, đồng thời chuyển SQL hợp lệ cuối cùng đến lệnh truy vấn bq.
envsubst < mv_ga4_user_session_flat.sql | bq query --use_legacy_sql=false
envsubst < mv_ga4_ecommerce_transactions.sql | bq query --use_legacy_sql=false
envsubst < mv_ga4_ecommerce_items.sql | bq query --use_legacy_sql=false
Thực hiện quét hồ sơ thông qua ứng dụng Python
Giờ đây, khi đã có các khung hiển thị được làm phẳng và có thể lập hồ sơ, chúng ta có thể tạo và chạy các bản quét hồ sơ dữ liệu Danh mục tri thức theo phương thức lập trình cho từng khung hiển thị. Tập lệnh Python sau đây sử dụng thư viện ứng dụng google-cloud-dataplex để tự động hoá quy trình này.
Trước khi chạy tập lệnh, bạn nên tạo một môi trường Python riêng biệt trong thư mục dự án. Đây là một phương pháp hay quan trọng. Điều này đảm bảo rằng các phần phụ thuộc của dự án được quản lý riêng biệt, ngăn chặn xung đột với các gói khác trong môi trường Cloud Shell.
# Create the virtual environment
python3 -m venv dq_venv
# Activate the environment
source dq_venv/bin/activate
Bây giờ, hãy cài đặt thư viện ứng dụng Knowledge Catalog trong môi trường vừa kích hoạt.
# Install the Knowledge Catalog client library
pip install google-cloud-dataplex
Sau khi thiết lập môi trường và cài đặt thư viện, bạn có thể tạo tập lệnh điều phối.
Trong thanh công cụ Cloud Shell, hãy nhấp vào biểu tượng Mở trình chỉnh sửa. Tạo một tệp mới có tên là 1_run_scan.py rồi dán đoạn mã Python sau đây vào tệp đó. Nếu bạn sao chép kho lưu trữ GitHub, thì tệp này đã có trong thư mục của bạn.
Tập lệnh này sẽ tạo một quy trình quét cho từng Khung hiển thị được cụ thể hoá (nếu chưa có), chạy quy trình quét, rồi thăm dò cho đến khi tất cả các quy trình quét hoàn tất.
import os
import sys
import time
from google.cloud import dataplex_v1
from google.api_core.exceptions import AlreadyExists
def create_and_run_scan(
client: dataplex_v1.DataScanServiceClient,
project_id: str,
location: str,
data_scan_id: str,
target_resource: str,
) -> dataplex_v1.DataScanJob | None:
"""
Creates and runs a single data profile scan.
Returns the executed Job object without waiting for completion.
"""
parent = client.data_scan_path(project_id, location, data_scan_id).rsplit('/', 2)[0]
scan_path = client.data_scan_path(project_id, location, data_scan_id)
# 1. Create Data Scan (skips if it already exists)
try:
data_scan = dataplex_v1.DataScan()
data_scan.data.resource = target_resource
data_scan.data_profile_spec = dataplex_v1.DataProfileSpec()
print(f"[INFO] Creating data scan '{data_scan_id}'...")
client.create_data_scan(
parent=parent,
data_scan=data_scan,
data_scan_id=data_scan_id
).result() # Wait for creation to complete
print(f"[SUCCESS] Data scan '{data_scan_id}' created.")
except AlreadyExists:
print(f"[INFO] Data scan '{data_scan_id}' already exists. Skipping creation.")
except Exception as e:
print(f"[ERROR] Error creating data scan '{data_scan_id}': {e}")
return None
# 2. Run Data Scan
try:
print(f"[INFO] Running data scan '{data_scan_id}'...")
run_response = client.run_data_scan(name=scan_path)
print(f"[SUCCESS] Job started for '{data_scan_id}'. Job ID: {run_response.job.name.split('/')[-1]}")
return run_response.job
except Exception as e:
print(f"[ERROR] Error running data scan '{data_scan_id}': {e}")
return None
def main():
"""Main execution function"""
# --- Load configuration from environment variables ---
PROJECT_ID = os.environ.get("PROJECT_ID")
LOCATION = os.environ.get("LOCATION")
DATASET_ID = os.environ.get("DATASET_ID")
if not all([PROJECT_ID, LOCATION, DATASET_ID]):
print("[ERROR] One or more required environment variables are not set.")
print("Please ensure PROJECT_ID, LOCATION, and DATASET_ID are exported in your shell.")
sys.exit(1)
print(f"[INFO] Using Project: {PROJECT_ID}, Location: {LOCATION}, Dataset: {DATASET_ID}")
# List of Materialized Views to profile
TARGET_VIEWS = [
"mv_ga4_user_session_flat",
"mv_ga4_ecommerce_transactions",
"mv_ga4_ecommerce_items"
]
# ----------------------------------------------------
client = dataplex_v1.DataScanServiceClient()
running_jobs = []
# 1. Create and run jobs for all target views
print("\n--- Starting Data Profiling Job Creation and Execution ---")
for view_name in TARGET_VIEWS:
data_scan_id = f"profile-scan-{view_name.replace('_', '-')}"
target_resource = f"//bigquery.googleapis.com/projects/{PROJECT_ID}/datasets/{DATASET_ID}/tables/{view_name}"
job = create_and_run_scan(client, PROJECT_ID, LOCATION, data_scan_id, target_resource)
if job:
running_jobs.append(job)
print("-------------------------------------------------------\n")
if not running_jobs:
print("[ERROR] No jobs were started. Exiting.")
return
# 2. Poll for all jobs to complete
print("--- Monitoring job completion status (checking every 30 seconds) ---")
completed_jobs = {}
while running_jobs:
jobs_to_poll_next = []
print(f"\n[STATUS] Checking status for {len(running_jobs)} running jobs...")
for job in running_jobs:
job_id_short = job.name.split('/')[-1][:13]
try:
updated_job = client.get_data_scan_job(name=job.name)
state = updated_job.state
if state in (dataplex_v1.DataScanJob.State.RUNNING, dataplex_v1.DataScanJob.State.PENDING, dataplex_v1.DataScanJob.State.CANCELING):
print(f" - Job {job_id_short}... Status: {state.name}")
jobs_to_poll_next.append(updated_job)
else:
print(f" - Job {job_id_short}... Status: {state.name} (Complete)")
completed_jobs[job.name] = updated_job
except Exception as e:
print(f"[ERROR] Could not check status for job {job_id_short}: {e}")
running_jobs = jobs_to_poll_next
if running_jobs:
time.sleep(30)
# 3. Print final results
print("\n--------------------------------------------------")
print("[SUCCESS] All data profiling jobs have completed.")
print("\nFinal Job Status Summary:")
for job_name, job in completed_jobs.items():
job_id_short = job_name.split('/')[-1][:13]
print(f" - Job {job_id_short}: {job.state.name}")
if job.state == dataplex_v1.DataScanJob.State.FAILED:
print(f" - Failure Message: {job.message}")
print("\nNext step: Analyze the profile results and generate quality rules.")
if __name__ == "__main__":
main()
Bây giờ, hãy thực thi tập lệnh từ cửa sổ dòng lệnh Cloud Shell.
python 1_run_scan.py
Giờ đây, tập lệnh sẽ điều phối việc lập hồ sơ của 3 Khung hiển thị được cụ thể hoá, cung cấp thông tin cập nhật trạng thái theo thời gian thực. Sau khi hoàn tất, bạn sẽ có một hồ sơ thống kê phong phú, có thể đọc được bằng máy cho từng khung hiển thị, sẵn sàng cho giai đoạn tiếp theo của quy trình làm việc: tạo quy tắc chất lượng dữ liệu dựa trên AI.
Bạn có thể xem các bản quét hồ sơ đã hoàn tất trong Bảng điều khiển Google Cloud.
- Trong trình đơn điều hướng, hãy chuyển đến mục Danh mục kiến thức và Hồ sơ dữ liệu và chất lượng trong phần Quản trị.
- Bạn sẽ thấy 3 bản quét hồ sơ của mình cùng với trạng thái công việc mới nhất của các bản quét đó. Bạn có thể nhấp vào một bản quét để xem kết quả chi tiết.
Từ hồ sơ BigQuery đến dữ liệu đầu vào sẵn sàng cho AI
Đã chạy thành công các lượt quét hồ sơ Danh mục kiến thức. Mặc dù kết quả có trong Knowledge Catalog API, nhưng để sử dụng kết quả đó làm dữ liệu đầu vào cho một mô hình AI tạo sinh, chúng ta cần trích xuất kết quả đó vào một tệp có cấu trúc, cục bộ.
Tập lệnh Python sau đây, 2_dq_profile_save.py, sẽ tìm thấy theo phương thức lập trình công việc quét hồ sơ thành công gần đây nhất cho chế độ xem mv_ga4_user_session_flat của chúng tôi. Sau đó, ứng dụng sẽ truy xuất kết quả hồ sơ đầy đủ và chi tiết rồi lưu kết quả đó dưới dạng tệp JSON cục bộ có tên là dq_profile_results.json. Tệp này sẽ đóng vai trò là dữ liệu đầu vào trực tiếp cho hoạt động phân tích bằng AI của chúng tôi ở bước tiếp theo.
Trong trình chỉnh sửa Cloud Shell, hãy tạo một tệp mới có tên là 2_dq_profile_save.py rồi dán mã sau vào tệp đó. Tương tự như bước trước, bạn có thể bỏ qua bước tạo tệp nếu đã sao chép kho lưu trữ.
import os
import sys
import json
from google.cloud import dataplex_v1
from google.api_core.exceptions import NotFound
from google.protobuf.json_format import MessageToDict
# --- Configuration ---
# The Materialized View to analyze is fixed for this step.
TARGET_VIEW = "mv_ga4_user_session_flat"
OUTPUT_FILENAME = "dq_profile_results.json"
def save_to_json_file(content: dict, filename: str):
"""Saves the given dictionary content to a JSON file."""
try:
with open(filename, "w", encoding="utf-8") as f:
# Use indent=2 for a readable, "pretty-printed" JSON file.
json.dump(content, f, indent=2, ensure_ascii=False)
print(f"\n[SUCCESS] Profile results were saved to '{filename}'.")
except (IOError, TypeError) as e:
print(f"[ERROR] An error occurred while saving the file: {e}")
def get_latest_successful_job(
client: dataplex_v1.DataScanServiceClient,
project_id: str,
location: str,
data_scan_id: str
) -> dataplex_v1.DataScanJob | None:
"""Finds and returns the most recently succeeded job for a given data scan."""
scan_path = client.data_scan_path(project_id, location, data_scan_id)
print(f"\n[INFO] Looking for the latest successful job for scan '{data_scan_id}'...")
try:
# List all jobs for the specified scan, which are ordered most-recent first.
jobs_pager = client.list_data_scan_jobs(parent=scan_path)
# Iterate through jobs to find the first one that succeeded.
for job in jobs_pager:
if job.state == dataplex_v1.DataScanJob.State.SUCCEEDED:
return job
# If no successful job is found after checking all pages.
return None
except NotFound:
print(f"[WARN] No scan history found for '{data_scan_id}'.")
return None
def main():
"""Main execution function."""
# --- Load configuration from environment variables ---
PROJECT_ID = os.environ.get("PROJECT_ID")
LOCATION = os.environ.get("LOCATION")
if not all([PROJECT_ID, LOCATION]):
print("[ERROR] Required environment variables PROJECT_ID or LOCATION are not set.")
sys.exit(1)
print(f"[INFO] Using Project: {PROJECT_ID}, Location: {LOCATION}")
print(f"--- Starting Profile Retrieval for: {TARGET_VIEW} ---")
# Construct the data_scan_id based on the target view name.
data_scan_id = f"profile-scan-{TARGET_VIEW.replace('_', '-')}"
# 1. Initialize client and get the latest successful job.
client = dataplex_v1.DataScanServiceClient()
latest_job = get_latest_successful_job(client, PROJECT_ID, LOCATION, data_scan_id)
if not latest_job:
print(f"\n[ERROR] No successful job record was found for '{data_scan_id}'.")
print("Please ensure the '1_run_scan.py' script has completed successfully.")
return
job_id_short = latest_job.name.split('/')[-1]
print(f"[SUCCESS] Found the latest successful job: '{job_id_short}'.")
# 2. Fetch the full, detailed profile result for the job.
print(f"[INFO] Retrieving detailed profile results for job '{job_id_short}'...")
try:
request = dataplex_v1.GetDataScanJobRequest(
name=latest_job.name,
view=dataplex_v1.GetDataScanJobRequest.DataScanJobView.FULL,
)
job_with_full_results = client.get_data_scan_job(request=request)
except Exception as e:
print(f"[ERROR] Failed to retrieve detailed job results: {e}")
return
# 3. Convert the profile result to a dictionary and save it to a JSON file.
if job_with_full_results.data_profile_result:
profile_dict = MessageToDict(job_with_full_results.data_profile_result._pb)
save_to_json_file(profile_dict, OUTPUT_FILENAME)
else:
print("[WARN] The job completed, but no data profile result was found within it.")
print("\n[INFO] Script finished successfully.")
if __name__ == "__main__":
main()
Bây giờ, hãy chạy tập lệnh từ thiết bị đầu cuối:
python 2_dq_profile_save.py
Sau khi hoàn tất, bạn sẽ có một tệp mới tên là dq_profile_results.json trong thư mục của mình. Tệp này chứa siêu dữ liệu thống kê chi tiết và phong phú mà chúng tôi sẽ dùng để tạo các quy tắc về chất lượng dữ liệu. Nếu bạn muốn kiểm tra nội dung của dq_profile_results.json, hãy thực thi lệnh sau:
cat dq_profile_results.json
4. Tạo quy tắc chất lượng dữ liệu bằng Antigravity CLI
Giờ đây, bạn có thể dùng Antigravity CLI (agy) để đọc kết quả quét hồ sơ cục bộ. Việc viết thủ công các quy cách chất lượng dữ liệu cho các tập dữ liệu phức tạp tốn nhiều thời gian và dễ xảy ra lỗi. Việc sử dụng một tác nhân AI tạo sinh trong thiết bị đầu cuối sẽ đẩy nhanh quy trình này bằng cách soạn thảo cấu hình khai báo ban đầu trong vài giây. Điều này cho phép các nhóm dữ liệu chuyển từ việc soạn thảo cú pháp theo cách thủ công sang việc giám sát cấp cao, phù hợp với hoạt động kinh doanh của Con người trong vòng lặp (HITL).
Để khởi động Antigravity CLI, hãy chạy lệnh sau trong cửa sổ dòng lệnh:
agy
Bây giờ, bạn đã sẵn sàng tạo các quy tắc về chất lượng. Vì CLI có thể đọc các tệp trong thư mục hiện tại, nên CLI có thể sử dụng trực tiếp dữ liệu quét hồ sơ mới của bạn.
Yêu cầu tác nhân tạo kế hoạch
Trước tiên, chúng ta sẽ yêu cầu tác nhân Antigravity phân tích hồ sơ thống kê và đề xuất một kế hoạch hành động. Chúng ta hướng dẫn rõ ràng cho nó không viết tệp YAML ngay. Điều này tập trung sự chú ý vào việc phân tích và biện minh.
Trong phiên Antigravity CLI tương tác, hãy nhập câu lệnh có cấu trúc sau:
# Context
You are preparing a data quality rule configuration plan for Google Cloud Knowledge Catalog based on data profile statistics.
# Input
- File Path: `./dq_profile_results.json` (contains metrics like null percentage, distinct counts, and distributions)
# Task
Analyze the input statistics and propose a step-by-step plan for establishing automated data quality rules.
*Do not write any YAML code in this step.* Focus only on analytical planning.
# Rule Mapping Strategy
For candidate columns, match the statistical metrics to the most appropriate expectations:
- `nonNullExpectation`: Propose for columns with 0% null values in the profile.
- `setExpectation`: Propose for columns with a highly limited, stable set of categorical values.
- `rangeExpectation`: Propose for numeric columns with consistent and predictable value boundaries.
# Guidelines
- Provide a metric-based justification for each proposed rule (e.g., "Recommend `nonNullExpectation` for column 'user_pseudo_id' because its null percentage is 0%").
- Flag volatile metrics such as hardcoded row counts that could cause false-positive alerts in production.
# Output Format
Provide your analysis and proposed rules as a structured, step-by-step markdown plan with clear headings.
Tác nhân sẽ phân tích tệp JSON và phải trả về một kế hoạch có cấu trúc tương tự như sau:
Automated Data Quality Rule Configuration Plan
Google Cloud Knowledge Catalog (Dataplex Data Quality)
──────
## Executive Summary
This analytical planning document outlines a step-by-step strategy for configuring automated data quality (DQ) rules in Google Cloud Knowledge Catalog (formerly Dataplex Data Quality) based on profiling statistics.
The dataset contains 26,489 rows representing GA4 event logs. Based on statistical metrics (null ratios, distinct value distributions, and data types), candidate columns are mapped to appropriate expectation rules.
──────
## 1. Data Profile Overview & Statistical Highlights
Column Name │ Data Type │ Null Ratio │ Distinct Count │ Key Value Range / Categories
─────────────────┼───────────┼────────────────┼────────────────┼──────────────────────────────────────────────────
event_date │ STRING │ 0.0% (0) │ 1 (3.78e-05) │ "20210131" (100%)
event_timestamp │ INTEGER │ 0.0% (0) │ ~16,539 (0.62) │ Min: 1612051200657906, Max: 1612137595412363
event_name │ STRING │ 0.0% (0) │ 16 (0.0006) │ page_view (35.8%), user_engagement (18.9%), etc.
user_pseudo_id │ STRING │ 0.0% (0) │ ~2,545 (0.09) │ 18–21 characters string identifiers
user_id │ STRING │ 100.0% (1.0) │ 0 (0.0) │ Entirely NULL
device_category │ STRING │ 0.0% (0) │ 3 (0.0001) │ desktop (57.5%), mobile (40.1%), tablet (2.4%)
... │ ... │ ... │ ... │ ...
──────
## 2. Rule Mapping Strategy & Analytical Justifications
### Step 1: Nullability Rules (nonNullExpectation)
Propose nonNullExpectation for mandatory columns where the data profile demonstrates 0% null values.
• user_pseudo_id, event_timestamp, event_name, event_date, stream_id, platform, device_category (Metric Justification: nullRatio is 0.0%)
│ [!NOTE] Exclusions:
│ • user_id: Has a nullRatio of 100.0% (unauthenticated traffic).
│ • device_language: Has a nullRatio of 37.53%.
──────
### Step 2: Categorical Value Set Validation (setExpectation)
Propose setExpectation for columns with a highly limited, stable set of categorical domain values.
• device_category: Distinct count is exactly 3. Allowed set: ['desktop', 'mobile', 'tablet']
• platform: Distinct count is 1. Allowed set expanded to: ['WEB', 'ANDROID', 'IOS'] to avoid over-fitting.
• geo_continent: Distinct count is 6. Allowed set: ['Americas', 'Asia', 'Europe', 'Africa', 'Oceania', 'Antarctica', '(not set)']
──────
### Step 3: Numeric & Timestamp Boundary Validation (rangeExpectation)
Propose rangeExpectation for numeric columns with consistent and predictable value boundaries.
• event_timestamp: rangeExpectation requiring event_timestamp > 0 (avoid dynamic microsecond range hardcoding)
• stream_id: rangeExpectation requiring positive integer stream IDs (stream_id > 0)
──────
## 3. Risk Warning: Volatile Metrics & Production False Positives
│ [!WARNING] Volatile Metrics Flagged for Risk Mitigation:
1. Hardcoded Total Row Count (rowCount = 26,489) -> Daily event volume fluctuates. Use dynamic volume thresholds.
2. Hardcoded Partition Date (event_date = '20210131') -> Breaks on future runs. Validate against YYYYMMDD regex patterns.
3. Exact Timestamp Range Bounds -> Enforcing these microsecond limits on incoming live pipelines will reject all future data.
4. Single-Value Domain Restrictions -> Single profile sample might lack active streams. Set sets according to enterprise schema.
──────
## Summary Table of Proposed Rules
Target Column │ Rule Type │ Metric-Based Justification │ Operational Considerations
─────────────────┼────────────────────┼────────────────────────────┼──────────────────────────────────────────────────
user_pseudo_id │ nonNullExpectation │ Null Ratio: 0.0% │ Core identifier, strictly required
event_timestamp │ nonNullExpectation │ Null Ratio: 0.0% │ Temporal key, strictly required
event_timestamp │ rangeExpectation │ Min: > 0 (Microseconds) │ Avoid hardcoding epoch min/max
event_name │ nonNullExpectation │ Null Ratio: 0.0% │ Required event taxonomy key
event_name │ setExpectation │ Categorical distribution │ Map to standard GA4 event taxonomy
device_category │ nonNullExpectation │ Null Ratio: 0.0% │ Required form-factor dimension
device_category │ setExpectation │ Distinct Count: 3 values │ ['desktop', 'mobile', 'tablet']
... │ ... │ ... │ ...
Tạo các quy tắc chất lượng dữ liệu
Đây là bước quan trọng nhất trong toàn bộ quy trình: quy trình đánh giá có sự tham gia của con người (HITL). Kế hoạch do tác nhân tạo ra chỉ dựa trên các mẫu thống kê trong dữ liệu. Công cụ này không hiểu bối cảnh kinh doanh, những thay đổi về dữ liệu trong tương lai hoặc ý định cụ thể đằng sau dữ liệu của bạn. Vai trò của bạn là chuyên gia là xác thực, sửa và phê duyệt kế hoạch này trước khi chuyển thành mã.
Xem xét kỹ kế hoạch mà nhân viên hỗ trợ đã cung cấp.
- Như vậy có hợp lý không?
- Thông tin này có phù hợp với kiến thức kinh doanh của bạn không?
- Có quy tắc nào hợp lý về mặt thống kê nhưng lại vô dụng trên thực tế không?
Kết quả mà bạn nhận được từ trợ lý có thể khác nhau. Mục tiêu của bạn là tinh chỉnh nó. Ví dụ: hãy tưởng tượng kế hoạch đề xuất một quy tắc rowCount vì bảng có một số lượng hàng cố định trong dữ liệu mẫu. Là một chuyên gia, bạn có thể biết rằng quy mô của bảng này dự kiến sẽ tăng lên hằng ngày, khiến quy tắc đếm số hàng nghiêm ngặt trở nên không thực tế và có khả năng gây ra cảnh báo sai. Đây là một ví dụ hoàn hảo về việc áp dụng bối cảnh kinh doanh mà AI không có.
Bây giờ, bạn sẽ cung cấp ý kiến phản hồi cho tác nhân và đưa ra lệnh cuối cùng để tạo mã. Bạn phải điều chỉnh câu lệnh sau đây dựa trên kế hoạch mà bạn thực sự nhận được và những điểm điều chỉnh mà bạn muốn thực hiện.
Câu lệnh bên dưới là một mẫu. Dòng đầu tiên là nơi bạn sẽ cung cấp thông tin chỉnh sửa cụ thể. Nếu kế hoạch mà nhân viên hỗ trợ đưa ra là hoàn hảo và không cần thay đổi, bạn chỉ cần xoá dòng đó.
Trong cùng một phiên Antigravity, hãy nhập phiên bản thích ứng của câu lệnh sau:
# Feedback & Approvals
[YOUR CORRECTIONS AND APPROVAL GO HERE. Examples:
- "The plan looks good. Please proceed."
- "The rowCount rule is not necessary, as the table size changes daily. The rest of the plan is approved. Please proceed."
- "For the setExpectation on the geo_continent column, please also include 'Antarctica'."]
# Objective
Based on the approved analysis plan and the provided feedback, generate the final `dq_rules.yaml` file conforming to the standard `DataQualityRule` schema.
# Instructions
1. **Rule Justifications**: For every generated rule, add a YAML comment (`#`) on the line directly above it, briefly explaining the justification established in the plan.
2. **Schema Alignment**: Ensure the structure strictly adheres to the required Knowledge Catalog data quality scan specification. Refer to the `sample_rule.yaml` file in the current directory and the `DataQualityRule` class definition in the local virtual environment path (`./dq_venv/.../google/cloud/dataplex_v1/types/data_quality.py`) as the schema authority.
3. **Data-Driven Values**: Derive all rule parameters, such as thresholds or expected values, directly from the statistical metrics in `dq_profile_results.json`.
# Constraints
- **Output Purity**: Return ONLY the raw, valid, and properly formatted YAML code block.
- Do not include conversational preambles, introductory sentences, explanations, or markdown blocks around the YAML.
Giờ đây, tác nhân sẽ tạo nội dung YAML dựa trên hướng dẫn chính xác và đã được con người xác thực của bạn. Sau khi hoàn tất, bạn sẽ thấy một tệp mới có tên là dq_rules.yaml trong thư mục làm việc.
Tạo và chạy quy trình quét chất lượng dữ liệu
Giờ đây, khi đã có một tệp dq_rules.yaml do tác nhân tạo và được con người xác thực, bạn có thể tự tin triển khai tệp đó.
Thoát khỏi Antigravity CLI bằng cách nhập /quit hoặc nhấn Ctrl+C hai lần.
Lệnh gcloud sau đây sẽ tạo một tài nguyên quét dữ liệu Danh mục tri thức mới. Thao tác này chưa chạy quy trình quét; thao tác này chỉ đăng ký định nghĩa và cấu hình của quy trình quét (tệp YAML của chúng ta) với Danh mục kiến thức.
Thực thi lệnh này trong cửa sổ dòng lệnh:
export DQ_SCAN="dq-scan"
gcloud dataplex datascans create data-quality $DQ_SCAN \
--project=$PROJECT_ID \
--location=$LOCATION \
--data-quality-spec-file=dq_rules.yaml \
--data-source-resource="//bigquery.googleapis.com/projects/$PROJECT_ID/datasets/$DATASET_ID/tables/mv_ga4_user_session_flat"
Sau khi xác định quá trình quét, bạn có thể kích hoạt một công việc để thực thi quá trình quét đó.
gcloud dataplex datascans run $DQ_SCAN --location=$LOCATION --project=$PROJECT_ID
Lệnh này sẽ xuất ra một mã nhận dạng công việc. Bạn có thể theo dõi trạng thái của công việc này trong phần Danh mục kiến thức của Google Cloud Console. Sau khi hoàn tất, kết quả sẽ được ghi vào một bảng BigQuery để phân tích.
5. Vai trò quan trọng của Con người tham gia vào quy trình (HITL)
Mặc dù việc sử dụng tác nhân Antigravity để tăng tốc quá trình tạo quy tắc mang lại hiệu quả đáng kinh ngạc, nhưng bạn cần coi AI là một trợ lý ảo có kỹ năng cao, chứ không phải một trợ lý ảo hoàn toàn tự động. Quy trình có sự tham gia của con người (HITL) không phải là một đề xuất không bắt buộc; đây là một bước cơ bản, không thể thương lượng trong bất kỳ quy trình quản trị dữ liệu nào. Việc chỉ triển khai các thành phần do AI tạo mà không có sự giám sát chặt chẽ của con người là một công thức dẫn đến thất bại.
Hãy coi dq_rules.yaml do AI tạo là một yêu cầu kéo do một nhà phát triển AI cực kỳ nhanh nhưng thiếu kinh nghiệm gửi. Bạn (một chuyên gia cấp cao) cần xem xét kỹ lưỡng trước khi có thể hợp nhất vào "nhánh chính" của chính sách quản trị và triển khai. Việc xem xét này là cần thiết để giảm thiểu những điểm yếu vốn có của Mô hình ngôn ngữ lớn.
Sau đây là thông tin chi tiết về lý do quy trình đánh giá thủ công này là không thể thiếu và những điều cụ thể mà bạn phải tìm hiểu:
1. Xác thực theo ngữ cảnh: AI thiếu nhận thức về hoạt động kinh doanh
- Điểm yếu của LLM: LLM là chuyên gia về các mẫu và số liệu thống kê, nhưng không hiểu gì về bối cảnh kinh doanh của bạn. Ví dụ: nếu một cột,
new_campaign_idcó tỷ lệ giá trị rỗng là 98%, thì LLM có thể bỏ qua cột này vì lý do thống kê. - Vai trò quan trọng của con người: Bạn, chuyên gia là con người, biết rằng trường
new_campaign_idvừa được thêm vào ngày hôm qua cho một sự kiện ra mắt sản phẩm lớn vào tuần tới. Bạn biết rằng tỷ lệ giá trị rỗng của chỉ số này hiện ở mức cao nhưng dự kiến sẽ giảm đáng kể. Bạn cũng biết rằng sau khi được điền sẵn, giá trị này phải tuân theo một định dạng cụ thể. AI không thể suy luận kiến thức về doanh nghiệp bên ngoài này. Vai trò của bạn là áp dụng bối cảnh kinh doanh này cho các đề xuất thống kê của AI, ghi đè hoặc bổ sung cho các đề xuất đó nếu cần.
2. Tính chính xác và độ chuẩn xác: ngăn chặn hiện tượng ảo tưởng và lỗi nhỏ
- Điểm yếu của LLM: LLM có thể "tự tin đưa ra thông tin sai lệch". Chúng có thể "ảo tưởng" hoặc tạo ra mã không chính xác một cách tinh vi. Ví dụ: công cụ này có thể tạo một tệp YAML có quy tắc được đặt tên chính xác nhưng có tham số không hợp lệ, hoặc có thể viết sai loại quy tắc (ví dụ:
setExpectationsthay vìsetExpectationchính xác). Những lỗi nhỏ này sẽ khiến quá trình triển khai không thành công, nhưng có thể khó phát hiện. - Vai trò quan trọng của con người: Công việc của bạn là đóng vai trò là trình kiểm tra cú pháp và trình xác thực lược đồ tối ưu. Bạn phải kiểm tra kỹ tệp YAML đã tạo dựa trên quy cách chính thức của Danh mục kiến thức
DataQualityRule. Bạn không chỉ kiểm tra xem nó có "hiển thị đúng cách" hay không; bạn đang xác thực tính chính xác về cú pháp và ngữ nghĩa để đảm bảo rằng nó tuân thủ 100% API mục tiêu. Đây là lý do khiến lớp học lập trình nhắc tác nhân tham chiếu các tệp lược đồ (để giảm khả năng xảy ra lỗi), nhưng bạn là người xác minh cuối cùng.
3. An toàn và giảm thiểu rủi ro: ngăn chặn hậu quả về sau
- Điểm yếu của LLM: Việc triển khai một quy tắc chất lượng dữ liệu có lỗi vào quy trình sản xuất có thể gây ra hậu quả nghiêm trọng. Nếu AI đề xuất một
rangeExpectationcho số tiền giao dịch tài chính quá lớn, thì AI có thể không phát hiện được hoạt động gian lận. Ngược lại, nếu đề xuất một quy tắc quá nghiêm ngặt dựa trên một mẫu dữ liệu nhỏ, thì quy tắc đó có thể làm ngập lụt nhóm hỗ trợ trực tiếp của bạn bằng hàng nghìn cảnh báo dương tính giả, dẫn đến tình trạng mệt mỏi vì cảnh báo và khiến bạn bỏ lỡ các vấn đề thực sự. - Vai trò quan trọng của con người: Bạn là kỹ sư an toàn. Bạn phải đánh giá tác động tiềm ẩn ở hạ nguồn của từng quy tắc mà AI đề xuất. Hãy tự hỏi: "Điều gì sẽ xảy ra nếu quy tắc này không thành công? Cảnh báo này có hữu ích không? Nếu quy tắc này được thực thi không chính xác thì sẽ có rủi ro gì?" Việc đánh giá rủi ro là một khả năng đặc biệt của con người, giúp cân nhắc chi phí của việc thất bại so với lợi ích của việc kiểm tra.
4. Quản trị như một quy trình liên tục: kết hợp kiến thức hướng đến tương lai
- Điểm yếu của LLM: Kiến thức của AI dựa trên ảnh chụp nhanh tĩnh của dữ liệu – kết quả hồ sơ từ một thời điểm cụ thể. Công cụ này không biết về các sự kiện trong tương lai.
- Vai trò quan trọng của con người: Chiến lược quản trị của bạn phải hướng đến tương lai. Bạn biết rằng một nguồn dữ liệu sẽ được di chuyển vào tháng tới, điều này sẽ làm thay đổi stream_id. Bạn biết rằng một quốc gia mới đang được thêm vào danh sách
geo_country. Quy trình HITL là nơi bạn đưa kiến thức về trạng thái trong tương lai này vào, cập nhật hoặc tạm thời vô hiệu hoá các quy tắc để ngăn chặn sự cố trong quá trình phát triển kinh doanh hoặc kỹ thuật theo kế hoạch. Chất lượng dữ liệu không phải là một chế độ thiết lập một lần; đó là một quy trình liên tục phải phát triển và chỉ có con người mới có thể hướng dẫn quá trình phát triển đó.
Tóm lại, HITL là cơ chế đảm bảo chất lượng và an toàn thiết yếu, giúp chuyển đổi hoạt động quản trị dựa trên AI từ một ý tưởng mới lạ nhưng đầy rủi ro thành một hoạt động có trách nhiệm, có khả năng mở rộng và đạt tiêu chuẩn doanh nghiệp. Điều này đảm bảo rằng các chính sách cuối cùng được triển khai không chỉ được AI hỗ trợ mà còn được con người xác thực, kết hợp tốc độ của máy móc với sự hiểu biết và bối cảnh của các chuyên gia.
Tuy nhiên, việc nhấn mạnh vào sự giám sát của con người không làm giảm giá trị của AI. Ngược lại, AI tạo sinh đóng vai trò quan trọng trong việc đẩy nhanh chính quy trình HITL.
Nếu không có AI, kỹ sư dữ liệu sẽ phải:
- Viết thủ công các truy vấn SQL phức tạp để lập hồ sơ dữ liệu (ví dụ:
COUNT DISTINCT,AVG,MIN,MAXcho mỗi cột). - Phân tích kết quả một cách tỉ mỉ theo từng bảng tính.
- Viết từng dòng của tệp quy tắc YAML từ đầu, một việc tẻ nhạt và dễ xảy ra lỗi.
AI sẽ tự động hoá các bước tốn nhiều công sức và thời gian này. Công cụ này đóng vai trò là một nhà phân tích không mệt mỏi, xử lý ngay lập tức hồ sơ thống kê và cung cấp "bản nháp đầu tiên" hoàn chỉnh 80% của chính sách.
Điều này thay đổi cơ bản bản chất công việc của con người. Thay vì mất hàng giờ để xử lý dữ liệu thủ công và viết mã chung, chuyên gia có thể tập trung ngay vào những việc có giá trị cao nhất:
- Áp dụng bối cảnh kinh doanh quan trọng.
- Xác thực tính chính xác của logic AI.
- Đưa ra quyết định chiến lược về những quy tắc thực sự quan trọng.
Trong mối quan hệ đối tác này, AI xử lý "điều gì" (mẫu thống kê là gì?), giúp con người có thể tập trung vào "tại sao" (tại sao mẫu này lại quan trọng đối với doanh nghiệp của chúng ta?) và "vậy thì sao" (vậy thì chính sách của chúng ta nên là gì?). Do đó, AI không thay thế vòng lặp mà giúp mỗi chu kỳ trong vòng lặp diễn ra nhanh hơn, thông minh hơn và có tác động lớn hơn.
6. Dọn dẹp môi trường
Để tránh phát sinh các khoản phí trong tương lai cho tài khoản Google Cloud của bạn đối với các tài nguyên được dùng trong lớp học lập trình này, bạn nên xoá dự án chứa các tài nguyên đó. Tuy nhiên, nếu muốn giữ lại dự án, bạn có thể xoá từng tài nguyên mà mình đã tạo.
Xoá các bản quét trong Knowledge Catalog
Trước tiên, hãy xoá hồ sơ và các bản quét chất lượng mà bạn đã tạo. Để ngăn chặn việc vô tình xoá các tài nguyên quan trọng, các lệnh này sẽ sử dụng tên cụ thể của các hoạt động quét được tạo trong lớp học lập trình này.
# Delete the Data Quality Scan
gcloud dataplex datascans delete dq-scan \
--location=us-central1 \
--project=$PROJECT_ID --quiet
# Delete the Data Profile Scans
gcloud dataplex datascans delete profile-scan-mv-ga4-user-session-flat \
--location=us-central1 \
--project=$PROJECT_ID --quiet
gcloud dataplex datascans delete profile-scan-mv-ga4-ecommerce-transactions \
--location=us-central1 \
--project=$PROJECT_ID --quiet
gcloud dataplex datascans delete profile-scan-mv-ga4-ecommerce-items \
--location=us-central1 \
--project=$PROJECT_ID --quiet
Xoá tập dữ liệu BigQuery
Tiếp theo, hãy xoá tập dữ liệu BigQuery. Bạn không thể huỷ lệnh này sau khi thực hiện và lệnh này dùng cờ -f (force) để xoá tập dữ liệu và tất cả các bảng của tập dữ liệu đó mà không cần xác nhận.
# Manually type this command to confirm you are deleting the correct dataset
bq rm -r -f --dataset $PROJECT_ID:kc_dq_codelab
7. Xin chúc mừng!
Bạn đã hoàn tất thành công lớp học lập trình này!
Bạn đã xây dựng một quy trình quản trị dữ liệu có lập trình từ đầu đến cuối. Bạn bắt đầu bằng cách sử dụng Chế độ xem đã cụ thể hoá để đơn giản hoá dữ liệu BigQuery phức tạp, giúp dữ liệu phù hợp cho việc phân tích. Sau đó, bạn chạy các lượt quét hồ sơ Danh mục kiến thức theo phương thức lập trình để tạo siêu dữ liệu thống kê. Quan trọng nhất là bạn đã tận dụng Antigravity CLI để phân tích đầu ra của hồ sơ và tạo một cách thông minh một cấu phần phần mềm "chính sách dưới dạng mã" (dq_rules.yaml). Sau đó, bạn đã sử dụng CLI để triển khai cấu hình này dưới dạng một quy trình Quét chất lượng dữ liệu tự động, khép lại vòng lặp trong một chiến lược quản trị hiện đại, có khả năng mở rộng.
Giờ đây, bạn đã nắm được mẫu cơ bản để xây dựng các hệ thống chất lượng dữ liệu đáng tin cậy, được tăng tốc bằng AI và được con người xác thực trên Google Cloud.
Tiếp theo là gì?
- Tích hợp với CI/CD: Lấy tệp
dq_rules.yamlrồi xác nhận tệp đó vào một kho lưu trữ Git. Tạo một quy trình CI/CD (ví dụ: sử dụng Cloud Build hoặc GitHub Actions) tự động triển khai quy trình quét Danh mục kiến thức bất cứ khi nào tệp quy tắc được cập nhật. - Khám phá các quy tắc SQL tuỳ chỉnh: Vượt ra ngoài các loại quy tắc tiêu chuẩn. Danh mục kiến thức hỗ trợ các quy tắc SQL tuỳ chỉnh để thực thi logic phức tạp hơn, dành riêng cho doanh nghiệp mà không thể thể hiện bằng các quy tắc kiểm tra được xác định trước. Đây là một tính năng giúp điều chỉnh quy trình xác thực theo các yêu cầu riêng của bạn.
- Tối ưu hoá các lượt quét để tăng hiệu quả và giảm chi phí: Đối với các bảng rất lớn, bạn có thể cải thiện hiệu suất và giảm chi phí bằng cách không phải lúc nào cũng quét toàn bộ tập dữ liệu. Khám phá cách sử dụng bộ lọc để thu hẹp phạm vi quét xuống các khung thời gian hoặc phân đoạn dữ liệu cụ thể, hoặc định cấu hình các lượt quét được lấy mẫu để kiểm tra tỷ lệ phần trăm đại diện của dữ liệu.
- Trực quan hoá kết quả: Đầu ra của mỗi lần quét chất lượng dữ liệu trong Danh mục tri thức sẽ được ghi vào một bảng BigQuery. Kết nối bảng này với Looker Studio để tạo trang tổng quan theo dõi điểm chất lượng dữ liệu theo thời gian, được tổng hợp theo các phương diện mà bạn đã xác định (ví dụ: Tính đầy đủ, Tính hợp lệ). Điều này giúp việc giám sát trở nên chủ động và tất cả các bên liên quan đều có thể thấy được.
- Chia sẻ các phương pháp hay nhất: Khuyến khích việc chia sẻ kiến thức trong tổ chức để tận dụng kinh nghiệm tập thể và cải thiện chiến lược chất lượng dữ liệu. Việc thúc đẩy văn hoá tin tưởng dữ liệu là chìa khoá để khai thác tối đa các nỗ lực quản trị của bạn.
- Đọc tài liệu: