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 chung của Dataplex đó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ộ hệ thống 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 Dataplex, BigQuery và Gemini CLI để làm phẳng dữ liệu phức tạp, lập trình theo cách có hệ thống, tạo đề xuất quy tắc chất lượng dữ liệu thông minh 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.
Điều kiện tiên quyết
- Có kiến thức cơ bản về Google Cloud Console
- Kỹ năng cơ bản về giao diện dòng lệnh và Google Cloud Shell
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ơ Dataplex theo phương thức lập trình bằng Thư viện ứng dụng Dataplex Python.
- 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ế câu lệnh cho Gemini CLI để phân tích dữ liệu hồ sơ và tạo tệp quy tắc YAML tuân thủ Dataplex.
- 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
Khái niệm chính: các trụ cột của chất lượng dữ liệu trên Dataplex
Việc nắm rõ các thành phần cốt lõi của Dataplex 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 Dataplex phân tích dữ liệu và tạo siêu dữ liệu thống kê, bao gồm 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 lệnh 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 tính năng Đề 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. Điều 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 Dataplex 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 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 tham gia vào 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="dataplex_dq_codelab"
export TABLE_ID="ga4_transactions"
gcloud services enable dataplex.googleapis.com \
bigquery.googleapis.com \
serviceusage.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ử được xáo trộn từ 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 dataplex_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.
git clone https://github.com/GoogleCloudPlatform/devrel-demos
cd devrel-demos/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 tính năng lập hồ sơ Dataplex
Hồ sơ dữ liệu Dataplex 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à 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ơ Dataplex là không thể kiểm tra đầy đủ các trường lặp lại hoặc lồng nhau (ví dụ: 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 cho mục đích này. Chiến lược này biến mọi trường thành một cột cấp cao nhất, cho phép Dataplex lập hồ sơ cho từng trường riêng lẻ.
Tìm hiểu về giản đồ lồng ghép
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
Khi kiểm tra tệp bq_schema.json
, bạn sẽ 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 các Khung hiển thị cụ thể hoá
Tạo các khung hiển thị được 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ị duy nhất và 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 sai lầm 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 thi các lượt quét hồ sơ thông qua ứng dụng Python
Giờ đây, khi đã có các chế độ xem có thể lập hồ sơ và được đơn giản hoá, chúng ta có thể tạo và chạy các lượt quét hồ sơ dữ liệu Dataplex cho từng chế độ xem theo phương thức lập trình. 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 biệt lập 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 Dataplex trong môi trường vừa kích hoạt.
# Install the Dataplex 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 Mở trình chỉnh sửa. Tạo một tệp mới có tên là 1_run_dataplex_scans.py
rồi dán đoạn mã Python sau 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 công việc 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_dataplex_scans.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ụ 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 chế độ xem, 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 Google Cloud Console.
- Trong trình đơn điều hướng, hãy chuyển đến Danh mục phổ quát và Hồ sơ Dataplex 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. 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ơ Dataplex. Mặc dù kết quả có trong Dataplex 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 ở 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 Dataplex 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 'run_dataplex_scans.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 có 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 Gemini CLI
Cài đặt và định cấu hình Gemini CLI
Mặc dù bạn có thể gọi API Gemini theo phương thức lập trình, nhưng việc sử dụng một công cụ như Gemini CLI mang đến một cách thức mạnh mẽ và mang tính tương tác để tích hợp AI tạo sinh trực tiếp vào quy trình làm việc trên thiết bị đầu cuối. Gemini CLI không chỉ là một chatbot mà còn là một công cụ quy trình làm việc trên dòng lệnh có thể đọc các tệp cục bộ, hiểu mã của bạn và tương tác với các công cụ hệ thống khác (chẳng hạn như gcloud) để tự động hoá các tác vụ phức tạp. Điều này khiến nó trở thành lựa chọn lý tưởng cho trường hợp sử dụng của chúng tôi.
Điều kiện tiên quyết
Trước tiên, hãy đảm bảo bạn đã đáp ứng điều kiện tiên quyết bắt buộc: Bạn phải cài đặt Node.js phiên bản 20 trở lên trong môi trường Cloud Shell. Bạn có thể kiểm tra phiên bản bằng cách chạy node -v
.
Cài đặt
Có hai cách để sử dụng Gemini CLI: cài đặt tạm thời hoặc cài đặt lâu dài hơn. Chúng ta sẽ đề cập đến cả hai phương thức này.
Bạn có thể chạy Gemini CLI trực tiếp cho một phiên duy nhất mà không cần cài đặt vĩnh viễn. Đây là cách đơn giản và nhanh nhất để "dùng thử" vì cách này không sửa đổi môi trường của bạn.
Trong cửa sổ dòng lệnh Cloud Shell, hãy chạy:
npx https://github.com/google-gemini/gemini-cli
Lệnh này tạm thời tải xuống và chạy gói CLI.
Đối với mọi dự án thực tế, phương pháp hay nhất mà bạn nên áp dụng là cài đặt CLI cục bộ vào thư mục dự án. Phương pháp này có một số ưu điểm chính:
- Cô lập phần phụ thuộc: Việc này đảm bảo dự án của bạn có phiên bản riêng của CLI, ngăn chặn xung đột phiên bản với các dự án khác.
- Khả năng tái tạo: Bất kỳ ai sao chép dự án của bạn đều có thể cài đặt các phần phụ thuộc giống hệt nhau, giúp chế độ thiết lập của bạn trở nên đáng tin cậy và có tính di động.
- Phù hợp với phương pháp hay nhất: Nó tuân theo mô hình tiêu chuẩn để quản lý các phần phụ thuộc của dự án Node.js, tránh được những cạm bẫy của các bản cài đặt trên toàn cầu (-g).
Để cài đặt CLI cục bộ, hãy thực thi lệnh sau từ thư mục dự án (programmatic-dq
):
npm install @google/gemini-cli
Thao tác này sẽ tạo một thư mục node_modules bên trong programmatic-dq. Để chạy phiên bản bạn vừa cài đặt, hãy dùng lệnh npx.
npx gemini
Thiết lập lần đầu
Dù bạn chọn phương thức nào, lần đầu tiên bạn chạy CLI, phương thức đó sẽ hướng dẫn bạn thực hiện quy trình thiết lập một lần.
Bạn sẽ được nhắc chọn một giao diện màu rồi xác thực. Phương thức đơn giản nhất là Đăng nhập bằng Tài khoản Google khi được nhắc. Bậc miễn phí được cung cấp là đủ cho lớp học lập trình này.
Giờ đây, bạn đã cài đặt và định cấu hình xong CLI, nên có thể tiếp tục tạo các quy tắc. CLI nhận biết được các tệp trong thư mục hiện tại của nó, điều này rất quan trọng cho bước tiếp theo.
Tạo các quy tắc về chất lượng dữ liệu
Mặc dù bạn có thể yêu cầu LLM tạo tệp cấu hình ngay lập tức, nhưng bản chất không xác định của các mô hình tạo sinh có nghĩa là đầu ra không phải lúc nào cũng hoàn toàn tuân thủ lược đồ nghiêm ngặt mà các công cụ như gcloud yêu cầu. Một phương pháp đáng tin cậy hơn là quy trình tương tác gồm nhiều bước, trong đó trước tiên, bạn yêu cầu AI đóng vai trò là nhà phân tích để đề xuất một kế hoạch, bạn (chuyên gia là con người) xem xét và phê duyệt kế hoạch đó, rồi sau đó AI mới tạo mã cuối cùng dựa trên hướng dẫn đã được bạn phê duyệt.
Phương pháp này biến quy trình từ một lệnh đơn giản thành một phiên cộng tác, đảm bảo đầu ra cuối cùng chính xác, được xác thực và sẵn sàng triển khai.
Trước tiên, chúng ta sẽ yêu cầu Gemini phân tích hồ sơ thống kê và đóng vai trò là một kỹ sư dữ liệu chuyên nghiệp, đề xuất một kế hoạch hành động. Chúng ta đang yêu cầu rõ ràng không được ghi tệp YAML. Điều này tập trung sự chú ý vào việc phân tích và biện minh.
Trong phiên Gemini CLI tương tác, hãy dán câu lệnh sau:
You are an expert Google Cloud Dataplex engineer.
Your first task is to create a plan. I have a file in the current directory named ./dq_profile_results.json.
Based on the statistical data within that file, propose a step-by-step plan to create a Dataplex data quality rules file.
Your plan should identify which specific columns are good candidates for rules like nonNullExpectation, setExpectation, or rangeExpectation, and explain why based on the metrics (e.g., "Plan to create a nonNullExpectation for column X because its null percentage is 0%").
Do not write the YAML file yet. Just provide the plan.
Gemini sẽ phân tích tệp JSON và trả về một kế hoạch có cấu trúc tương tự như sau:
Plan to create Dataplex data quality rules
1. Create a row count rule:
- Analysis: The profile shows a total of 26,489 rows.
- Proposed Rule: I will implement a rowCount rule to ensure the table's row count remains within a healthy range (e.g., 20,000 to 30,000). This is a fundamental check to guard against major data loading failures or unexpected deletions.
2. Implement non-null expectation rules:
- Analysis: The profiling results show that many columns have no null values. For example, event_date, event_timestamp, event_name, user_pseudo_id, stream_id, and platform all appear to be fully populated.
- Proposed Rules: I will create nonNullExpectation rules for columns where the nullRatio is 0 or not present, indicating they are always expected to contain a value:
- event_date
- event_timestamp
- event_name
- user_pseudo_id
- stream_id
- platform
- device_category
- device_os
3. Implement set expectation rules:
- Analysis: Several columns contain a small, finite set of values, making them ideal for set validation.
- Proposed Rules: I will create setExpectation rules for these columns:
- platform: It only contains the value "WEB".
- device_category: It contains only "desktop", "mobile", and "tablet".
- geo_continent: It has a well-defined list of continents.
traffic_source_medium: It has a small list of valid mediums like "organic", "(none)", and "referral".
4. Implement range expectation rules:
- Analysis: The profile provides minimum and maximum values for numeric and string length fields.
- Proposed Rules: I will create rangeExpectation rules for the following:
- event_timestamp: The profile shows a clear min and max. I will use these values to create a range check.
- event_date (String Length): The profile indicates that the minLength and maxLength are both 8, which is perfect for enforcing a YYYYMMDD format.
Đâ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 Gemini tạo ra hoàn toàn dựa trên các quy luật thống kê trong dữ liệu. Công cụ này không hiểu được 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, chỉnh sửa và phê duyệt kế hoạch này trước khi chuyển đổi thành mã.
Xem xét kỹ kế hoạch mà Gemini đã 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 không có tác dụng thực tế không?
Kết quả mà bạn nhận được từ Gemini 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 kích thước 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 Gemini và đưa ra lệnh cuối cùng để Gemini 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 nội dung chỉnh sửa cụ thể. Nếu kế hoạch mà Gemini đư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 Gemini, hãy dán phiên bản đã điều chỉnh của câu lệnh sau:
[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'."]
Once you have incorporated my feedback, please generate the `dq_rules.yaml` file.
You must adhere to the following strict requirements:
- Schema Compliance: The YAML structure must strictly conform to the DataQualityRule specification. For a definitive source of truth, you must 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.
- Data-Driven Values: All rule parameters, such as thresholds or expected values, must be derived directly from the statistical metrics in dq_profile_results.json.
- Rule Justification: For each rule, add a comment (#) on the line above explaining the justification, as you outlined in your plan.
- Output Purity: The final output must only be the raw YAML code block, perfectly formatted and ready for immediate deployment.
Giờ đây, Gemini 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, bạn có thể tự tin triển khai tệp dq_rules.yaml
do AI tạo và được con người xác thực.
Thoát Gemini 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 Dataplex mới. Lệnh này chưa chạy quy trình quét; mà 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 tôi) với Dataplex.
Thực thi lệnh này trong thiết bị đầu cuối:
export DQ_SCAN="dq-scan"
gcloud dataplex datascans create data-quality $DQ_SCAN \
--project=$PROJECT_ID \
--location=$REGION \
--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=$REGION --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 Dataplex 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 trong vòng lặp (HITL)
Mặc dù việc sử dụng Gemini để tăng tốc quá trình tạo quy tắc là một tính năng vô cùng mạnh mẽ, nhưng bạn cần coi AI là một phi công phụ có kỹ năng cao, chứ không phải là một phi công 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 mọi quy trình quản trị dữ liệu mạnh mẽ và đáng tin cậy. Việc chỉ triển khai các sản phẩm 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 cần phải 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 bối cảnh: AI thiếu kiế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_id
có 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_id
vừ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: Ngăn chặn hiện tượng ảo giác 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ụ: nó có thể tạo một tệp YAML có quy tắc được đặt tên chính xác nhưng có thông số không hợp lệ, hoặc có thể viết sai loại quy tắc (ví dụ:
setExpectations
thay vìsetExpectation
chí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 bạn khó có thể phát hiện ra. - Vai trò quan trọng của con người: Nhiệm vụ 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 Dataplex
DataQualityRule
. Bạn không chỉ kiểm tra xem nó có "vẻ ngoài phù hợp" 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 lớp học lập trình nhắc Gemini 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
rangeExpectation
cho 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ể khiến nhóm hỗ trợ của bạn nhận được 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à 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 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? Điều gì sẽ xảy ra nếu quy tắc này được áp dụng không chính xác?" 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 thông tin tổng quan nhanh về dữ liệu tĩnh – 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 tình trạng gián đoạn 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 chất lượng dành cho 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 tăng tốc 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 các truy vấn SQL phức tạp theo cách thủ công để lập hồ sơ dữ liệu (ví dụ:
COUNT DISTINCT
,AVG
,MIN
,MAX
cho 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 đến 80% của chính sách.
Điều này thay đổi căn 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 theo cách thủ công và viết mã soạn sẵn, chuyên gia có thể tập trung ngay vào những nhiệm vụ 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 sẽ 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 hoạt động quét Dataplex
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. Để tránh 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 data-scans delete profile-scan-mv-ga4-user-session-flat \
--location=us-central1 \
--project=$PROJECT_ID --quiet
gcloud dataplex data-scans delete profile-scan-mv-ga4-ecommerce-transactions \
--location=us-central1 \
--project=$PROJECT_ID --quiet
gcloud dataplex data-scans 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:dataplex_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 các Khung hiển thị được 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ơ Dataplex 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 Gemini 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 của 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.
Các bước tiếp theo
- Tích hợp với CI/CD: Lấy tệp dq_rules.yaml và xác nhận thay đổi 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 quá trình quét Dataplex 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. Dataplex 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 trình kiểm tra được xác định trước. Đây là một tính năng mạnh mẽ để đ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 thành 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 Dataplex đượ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ụ: Mức độ hoàn chỉnh, Tính hợp lệ). Nhờ đó, 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: