کیفیت داده های برنامه ای با Dataplex و هوش مصنوعی تولیدی

1. مقدمه

این آزمایشگاه کد یک نقشه فنی برای متخصصان داده ارائه می دهد. این یک رویکرد "اول کد" برای حاکمیت داده را ترسیم می کند و نشان می دهد که چگونه می توان کیفیت قوی و مدیریت ابرداده را مستقیماً در چرخه عمر توسعه جاسازی کرد. در هسته خود، کاتالوگ جهانی Dataplex به عنوان یک بافت داده هوشمند عمل می کند و سازمان ها را قادر می سازد تا به طور متمرکز داده ها را در کل دارایی خود - از دریاچه های داده تا انبارها - مدیریت، نظارت و اداره کنند.

این نرم افزار نشان می دهد که چگونه می توان از Dataplex، BigQuery و Gemini CLI برای صاف کردن داده های پیچیده، نمایه برنامه نویسی آن، تولید پیشنهادات قانون کیفیت داده هوشمند و استقرار اسکن های کیفیت خودکار استفاده کرد. هدف اصلی این است که فراتر از فرآیندهای دستی و مبتنی بر UI - که مستعد خطا هستند و مقیاس بندی آنها دشوار است - حرکت کنیم و در عوض یک چارچوب قوی و قابل کنترل نسخه "سیاست به عنوان کد" ایجاد کنیم.

پیش نیازها

  • درک اولیه از Google Cloud Console
  • مهارت های اولیه در رابط خط فرمان و Google Cloud Shell

چیزی که یاد خواهید گرفت

  • نحوه مسطح کردن داده های BigQuery تو در تو با استفاده از Materialized Views برای فعال کردن پروفایل جامع.
  • نحوه راه اندازی و مدیریت برنامه نویسی اسکن پروفایل Dataplex با استفاده از کتابخانه Dataplex Python Client.
  • نحوه صادرات داده های نمایه و ساختار آن به عنوان ورودی برای یک مدل هوش مصنوعی تولیدی.
  • نحوه مهندسی کردن یک درخواست برای Gemini CLI برای تجزیه و تحلیل داده های نمایه و ایجاد یک فایل قانون YAML سازگار با Dataplex.
  • اهمیت فرآیند تعاملی انسان در حلقه (HITL) برای اعتبارسنجی پیکربندی های تولید شده توسط هوش مصنوعی.
  • نحوه استقرار قوانین تولید شده به عنوان یک اسکن خودکار کیفیت داده ها.

آنچه شما نیاز دارید

  • یک حساب Google Cloud و پروژه Google Cloud
  • یک مرورگر وب مانند کروم

مفاهیم کلیدی: ارکان کیفیت داده های Dataplex

درک اجزای اصلی Dataplex برای ایجاد یک استراتژی موثر کیفیت داده ضروری است.

  • Data Profile Scan: یک کار Dataplex که داده ها را تجزیه و تحلیل می کند و ابرداده های آماری از جمله درصدهای صفر، شمارش مقادیر متمایز و توزیع های ارزش را تولید می کند. این به عنوان مرحله "کشف" برنامه ای ما عمل می کند.
  • قوانین کیفیت داده: عبارات اعلانی که شرایطی را که داده‌های شما باید داشته باشند را تعریف می‌کنند (مثلاً NonNullExpectation ، SetExpectation ، RangeExpectation ).
  • هوش مصنوعی مولد برای پیشنهاد قانون: استفاده از یک مدل زبان بزرگ (مانند جمینی) برای تجزیه و تحلیل پروفایل داده و پیشنهاد قوانین مربوط به کیفیت داده. این روند تعریف چارچوب کیفیت پایه را تسریع می کند.
  • اسکن کیفیت داده: یک کار Dataplex که داده ها را در برابر مجموعه ای از قوانین از پیش تعریف شده یا سفارشی تأیید می کند.
  • حاکمیت برنامه‌ای: موضوع اصلی مدیریت کنترل‌های حاکمیتی (مانند قوانین کیفیت) به عنوان کد (مثلاً در فایل‌های YAML و اسکریپت‌های پایتون). این امر اتوماسیون، نسخه سازی و ادغام در خطوط لوله CI/CD را امکان پذیر می کند.
  • Human-in-the-Loop (HITL): نقطه کنترل حیاتی ادغام تخصص و نظارت انسانی در یک گردش کار خودکار. برای پیکربندی‌های تولید شده توسط هوش مصنوعی، HITL برای تأیید صحت، ارتباط تجاری و ایمنی پیشنهادات قبل از استقرار ضروری است.

2. راه اندازی و الزامات

Cloud Shell را راه اندازی کنید

در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.

از Google Cloud Console ، روی نماد Cloud Shell در نوار ابزار بالا سمت راست کلیک کنید:

55efc1aaa7a4d3ad.png

تهیه و اتصال به محیط فقط چند لحظه طول می کشد. وقتی تمام شد، باید چیزی شبیه به این را ببینید:

7ffe5cbb04455448.png

این ماشین مجازی با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این یک فهرست اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد و احراز هویت شبکه را تا حد زیادی افزایش می دهد. تمام کارهای شما در این کد لبه را می توان در یک مرورگر انجام داد. شما نیازی به نصب چیزی ندارید.

API های مورد نیاز را فعال کنید و محیط را پیکربندی کنید

در داخل Cloud Shell، مطمئن شوید که ID پروژه شما تنظیم شده است:

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

در مثال ما us (چند منطقه) به عنوان مکان استفاده می کنیم زیرا داده های نمونه عمومی که استفاده خواهیم کرد نیز در us (چند منطقه) قرار دارد. BigQuery نیاز دارد که داده مبدا و جدول مقصد برای یک پرس و جو در یک مکان قرار گیرند.

یک مجموعه داده اختصاصی BigQuery ایجاد کنید

یک مجموعه داده BigQuery جدید ایجاد کنید تا داده ها و نتایج نمونه ما را در خود جای دهد.

bq --location=us mk --dataset $PROJECT_ID:$DATASET_ID

داده های نمونه را آماده کنید

برای این آزمایشگاه کد، از یک مجموعه داده عمومی حاوی داده های مبهم تجارت الکترونیکی از فروشگاه کالای Google استفاده خواهید کرد. از آنجایی که مجموعه داده های عمومی فقط خواندنی هستند، باید یک کپی قابل تغییر در مجموعه داده خود ایجاد کنید. دستور bq زیر یک جدول جدید به ga4_transactions در مجموعه داده dataplex_dq_codelab شما ایجاد می کند. این داده ها را از یک روز (31-01-2021) کپی می کند تا مطمئن شود که اسکن ها به سرعت اجرا می شوند.

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`'

دایرکتوری دمو را راه اندازی کنید

برای شروع، شما یک مخزن GitHub را کلون می کنید که حاوی ساختار پوشه و فایل های پشتیبانی کننده لازم برای این کد لبه است.

git clone https://github.com/GoogleCloudPlatform/devrel-demos
cd devrel-demos/data-analytics/programmatic-dq

این فهرست اکنون منطقه کاری فعال شماست. تمام فایل های بعدی در اینجا ایجاد می شوند.

3. کشف خودکار داده ها با پروفایل Dataplex

پروفایل داده Dataplex ابزاری قدرتمند برای کشف خودکار اطلاعات آماری در مورد داده های شما، مانند درصدهای تهی، منحصر به فرد بودن و توزیع ارزش است. این فرآیند برای درک ساختار و کیفیت داده های شما ضروری است. با این حال، یک محدودیت شناخته شده در پروفایل Dataplex ناتوانی آن در بازرسی کامل فیلدهای تودرتو یا تکراری (به عنوان مثال، انواع RECORD یا ARRAY ) در یک جدول است. می‌تواند تشخیص دهد که یک ستون یک نوع پیچیده است، اما نمی‌تواند فیلدهای مجزا در آن ساختار تودرتو را نمایه کند.

برای غلبه بر این موضوع، داده‌ها را به نماهای متریال‌سازی شده با هدف تبدیل می‌کنیم. این استراتژی هر فیلد را به یک ستون سطح بالا تبدیل می‌کند و Dataplex را قادر می‌سازد تا هر کدام را به صورت جداگانه نمایه کند.

درک طرحواره تو در تو

ابتدا، بیایید طرح واره جدول منبع خود را بررسی کنیم. مجموعه داده Google Analytics 4 (GA4) شامل چندین ستون تو در تو و تکراری است. برای بازیابی برنامه‌ای کل طرحواره، شامل تمام ساختارهای تودرتو، می‌توانید از دستور bq show استفاده کنید و خروجی را به‌عنوان فایل JSON ذخیره کنید.

bq show --schema --format=json $PROJECT_ID:$DATASET_ID.$TABLE_ID > bq_schema.json

بررسی فایل bq_schema.json ساختارهای پیچیده ای مانند دستگاه، جغرافیا، تجارت الکترونیک و موارد ثبت مکرر را نشان می دهد. اینها ساختارهایی هستند که برای پروفیل موثر نیاز به صاف کردن دارند.

صاف کردن داده ها با نماهای مادی

ایجاد نماهای مادی شده (MVs) موثرترین و کاربردی ترین راه حل برای این چالش داده های تودرتو است. با از پیش محاسبه نتایج مسطح، MV ها مزایای قابل توجهی در عملکرد و هزینه پرس و جو ارائه می دهند، در حالی که ساختاری ساده تر و شبیه به رابطه را برای تحلیلگران و ابزارهای پروفایل ارائه می دهند.

اولین فکر طبیعی ممکن است این باشد که همه چیز را در یک منظره واحد و غول پیکر صاف کنیم. با این حال، این رویکرد شهودی یک دام خطرناک را پنهان می کند که می تواند منجر به فساد شدید داده ها شود. بیایید بررسی کنیم که چرا این یک اشتباه مهم است.

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

اکنون این قالب ها را با استفاده از ابزار خط فرمان bq اجرا کنید. دستور envsubst هر فایل را می‌خواند، متغیرهایی مانند $PROJECT_ID و $DATASET_ID را با مقادیر آنها از محیط پوسته شما جایگزین می‌کند و SQL نهایی و معتبر را به دستور bq query منتقل می‌کند.

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

اسکن پروفایل را از طریق کلاینت پایتون اجرا کنید

اکنون که نماهای مسطح و سودمند خود را داریم، می‌توانیم به صورت برنامه‌نویسی اسکن پروفایل داده Dataplex را برای هر یک ایجاد و اجرا کنیم. اسکریپت پایتون زیر از کتابخانه سرویس گیرنده google-cloud-dataplex برای خودکارسازی این فرآیند استفاده می کند.

قبل از اجرای اسکریپت، ایجاد یک محیط Python ایزوله در دایرکتوری پروژه شما بهترین روش حیاتی است. این تضمین می کند که وابستگی های پروژه به طور جداگانه مدیریت می شوند و از تداخل با بسته های دیگر در محیط Cloud Shell شما جلوگیری می کند.

# Create the virtual environment
python3 -m venv dq_venv

# Activate the environment
source dq_venv/bin/activate

اکنون کتابخانه سرویس گیرنده Dataplex را در محیط تازه فعال شده نصب کنید.

# Install the Dataplex client library
pip install google-cloud-dataplex

با راه اندازی محیط و نصب کتابخانه، شما آماده ایجاد اسکریپت ارکستراسیون هستید.

در نوار ابزار Cloud Shell، روی Open Editor کلیک کنید. یک فایل جدید به نام 1_run_dataplex_scans.py ایجاد کنید و کد پایتون زیر را در آن قرار دهید. اگر مخزن GitHub را کلون کنید، این فایل از قبل در پوشه شما موجود است.

این اسکریپت یک اسکن برای هر نمای Materialized ایجاد می کند (اگر قبلاً وجود نداشته باشد)، اسکن را اجرا می کند، و سپس نظرسنجی را تا زمانی که تمام کارهای اسکن کامل شوند، انجام می دهد.

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()

اکنون اسکریپت را از ترمینال Cloud Shell خود اجرا کنید.

python 1_run_dataplex_scans.py

این اسکریپت اکنون نمایه‌سازی سه نمای مادی‌شده شما را تنظیم می‌کند و به‌روزرسانی‌های وضعیت بلادرنگ را ارائه می‌کند. پس از تکمیل، یک نمایه آماری غنی و قابل خواندن توسط ماشین برای هر نما خواهید داشت که برای مرحله بعدی گردش کار ما آماده است: تولید قانون کیفیت داده با استفاده از هوش مصنوعی.

می توانید اسکن های تکمیل شده نمایه را در Google Cloud Console مشاهده کنید.

  1. در منوی ناوبری، به کاتالوگ و پروفایل Dataplex Universal در بخش Govern بروید.

5acda859404968c.png

  1. شما باید سه اسکن نمایه خود را به همراه آخرین وضعیت شغلی آنها فهرست کنید. برای مشاهده نتایج دقیق می توانید روی اسکن کلیک کنید.

8a09dae0ef485289.png

از نمایه BigQuery تا ورودی آماده هوش مصنوعی

اسکن پروفایل Dataplex با موفقیت اجرا شد. در حالی که نتایج در Dataplex API در دسترس هستند، برای استفاده از آنها به عنوان ورودی برای یک مدل هوش مصنوعی مولد، باید آنها را در یک فایل ساختاری و محلی استخراج کنیم.

اسکریپت پایتون زیر، 2_dq_profile_save.py ، به صورت برنامه‌ریزی آخرین کار اسکن نمایه موفق را برای نمای mv_ga4_user_session_flat ما پیدا می‌کند. سپس نتیجه کامل و دقیق نمایه را بازیابی می کند و آن را به عنوان یک فایل JSON محلی با نام dq_profile_results.json ذخیره می کند. این فایل به عنوان ورودی مستقیم برای تجزیه و تحلیل هوش مصنوعی ما در مرحله بعد عمل خواهد کرد.

در ویرایشگر Cloud Shell خود، یک فایل جدید به نام 2_dq_profile_save.py ایجاد کنید و کد زیر را در آن قرار دهید. همانند مرحله قبل، اگر مخزن را شبیه سازی کرده باشید، می توانید از ایجاد یک فایل صرفنظر کنید.

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()

اکنون اسکریپت را از ترمینال خود اجرا کنید:

python 2_dq_profile_save.py

پس از تکمیل موفقیت آمیز، یک فایل جدید به نام dq_profile_results.json در دایرکتوری خود خواهید داشت. این فایل حاوی فراداده های آماری غنی و دقیقی است که برای تولید قوانین کیفیت داده ها استفاده خواهیم کرد. اگر می خواهید محتویات dq_profile_results.json را بررسی کنید، دستور زیر را اجرا کنید:

cat dq_profile_results.json

4. ایجاد قوانین کیفیت داده با Gemini CLI

Gemini CLI را نصب و پیکربندی کنید

در حالی که می‌توانید Gemini API را به صورت برنامه‌نویسی فراخوانی کنید، استفاده از ابزاری مانند Gemini CLI یک راه قدرتمند و تعاملی برای ادغام هوش مصنوعی مولد مستقیماً در گردش‌های کاری پایانه شما ارائه می‌دهد. Gemini CLI فقط یک ربات گفتگو نیست. این یک ابزار گردش کار خط فرمان است که می‌تواند فایل‌های محلی شما را بخواند، کد شما را بفهمد و با سایر ابزارهای سیستم مانند gcloud تعامل داشته باشد تا وظایف پیچیده را خودکار کند. این آن را برای مورد استفاده ما ایده آل می کند.

پیش نیاز

ابتدا، مطمئن شوید که پیش نیاز لازم را دارید: Node.js نسخه 20 یا بالاتر باید در محیط Cloud Shell شما نصب شده باشد. می توانید نسخه خود را با اجرای node -v بررسی کنید.

نصب و راه اندازی

دو راه برای استفاده از Gemini CLI وجود دارد: نصب موقت یا نصب دائمی تر. ما در اینجا به هر دو روش خواهیم پرداخت.

می‌توانید Gemini CLI را مستقیماً برای یک جلسه بدون نصب دائمی اجرا کنید. این تمیزترین و سریع‌ترین راه برای «آزمایش آن» است، زیرا محیط شما را کاملاً بدون تغییر نگه می‌دارد.

در ترمینال Cloud Shell خود، اجرا کنید:

npx https://github.com/google-gemini/gemini-cli

این دستور به طور موقت بسته CLI را دانلود و اجرا می کند.

برای هر پروژه واقعی، بهترین روش توصیه شده این است که CLI را به صورت محلی در فهرست پروژه خود نصب کنید. این رویکرد چندین مزیت کلیدی دارد:

  • جداسازی وابستگی: این اطمینان را ایجاد می کند که پروژه شما نسخه خاص خود از CLI را دارد و از تضاد نسخه با پروژه های دیگر جلوگیری می کند.
  • تکرارپذیری: هرکسی که پروژه شما را شبیه سازی کند می تواند دقیقاً همان وابستگی ها را نصب کند و راه اندازی شما را قابل اعتماد و قابل حمل کند.
  • هم ترازی بهترین عمل: از مدل استاندارد برای مدیریت وابستگی های پروژه Node.js پیروی می کند و از مشکلات نصب جهانی (-g) جلوگیری می کند.

برای نصب CLI به صورت محلی، دستور زیر را از پوشه پروژه خود ( programmatic-dq ) اجرا کنید:

npm install @google/gemini-cli

این یک پوشه node_modules در داخل programmatic-dq ایجاد می کند. برای اجرای نسخه ای که به تازگی نصب کرده اید، از دستور npx استفاده کنید.

npx gemini

راه اندازی برای اولین بار

هر روشی را که انتخاب کنید، اولین باری که CLI را راه‌اندازی می‌کنید، فرآیند راه‌اندازی یک‌باره را هدایت می‌کند.

8a25fab5951c6c39.png

از شما خواسته می شود یک تم رنگی را انتخاب کنید و سپس احراز هویت کنید. ساده ترین روش این است که وقتی از شما خواسته شد با حساب Google خود وارد شوید. سطح رایگان ارائه شده برای این کد لبه کافی است.

اکنون که CLI نصب و پیکربندی شده است، آماده هستید تا به تولید قوانین ادامه دهید. CLI از فایل‌های موجود در فهرست فعلی خود آگاه است که برای مرحله بعدی بسیار مهم است.

قوانین کیفیت داده را ایجاد کنید

در حالی که می‌توان از یک LLM درخواست کرد که یک فایل پیکربندی را در یک عکس ایجاد کند، ماهیت غیر قطعی مدل‌های تولیدی به این معنی است که خروجی ممکن است همیشه کاملاً با طرح دقیق مورد نیاز ابزارهایی مانند gcloud مطابقت نداشته باشد. یک روش قابل اطمینان تر، یک فرآیند تعاملی و چند مرحله ای است که در آن ابتدا هوش مصنوعی را به عنوان یک تحلیلگر برای پیشنهاد یک طرح می خواهید، شما (کارشناس انسانی) آن طرح را بررسی و تأیید می کنید، و تنها پس از آن هوش مصنوعی کد نهایی را بر اساس دستورالعمل های تأیید شده شما تولید می کند.

این رویکرد فرآیند را از یک دستور ساده به یک جلسه مشارکتی تبدیل می‌کند و اطمینان حاصل می‌کند که خروجی نهایی دقیق، معتبر و آماده برای استقرار است.

ابتدا از Gemini می خواهیم تا مشخصات آماری را تجزیه و تحلیل کند و به عنوان یک مهندس داده خبره عمل کند و یک برنامه اقدام را پیشنهاد دهد. ما به صراحت به آن می گوییم که هنوز فایل YAML را ننویسد. این توجه خود را بر تحلیل و توجیه متمرکز می کند.

در جلسه تعاملی Gemini CLI، اعلان زیر را جای‌گذاری کنید:

cd9792a6f1eb9f3.png

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 فایل JSON را تجزیه و تحلیل خواهد کرد و باید یک طرح ساختاریافته مشابه این را برگرداند:

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.

این مهم ترین مرحله در کل گردش کار است: بررسی Human-in-the-Loop (HITL). طرح تولید شده توسط Gemini صرفا بر اساس الگوهای آماری در داده ها است. هیچ درکی از زمینه کسب و کار شما، تغییرات داده های آینده، یا هدف خاصی در پشت داده های شما ندارد. نقش شما به عنوان متخصص انسانی اعتبارسنجی، تصحیح و تأیید این طرح قبل از تبدیل آن به کد است.

طرحی که Gemini ارائه کرده است را با دقت مرور کنید.

  • آیا منطقی است؟
  • آیا با دانش تجاری شما همخوانی دارد؟
  • آیا قوانینی از نظر آماری صحیح اما عملاً بی فایده وجود دارد؟

خروجی دریافتی از Gemini ممکن است متفاوت باشد. هدف شما این است که آن را اصلاح کنید.

به عنوان مثال، تصور کنید طرح یک قانون rowCount را پیشنهاد می کند زیرا جدول دارای تعداد ثابتی از ردیف ها در داده های نمونه است. به عنوان یک متخصص انسانی، ممکن است بدانید که انتظار می‌رود اندازه این جدول هر روز افزایش یابد، که باعث می‌شود یک قانون دقیق تعداد ردیف‌ها غیرعملی باشد و احتمالاً هشدارهای نادرست ایجاد کند. این یک مثال عالی از بکارگیری زمینه تجاری است که هوش مصنوعی فاقد آن است.

اکنون به Gemini بازخورد می‌دهید و فرمان نهایی برای تولید کد را به آن می‌دهید. شما باید اعلان زیر را بر اساس طرحی که واقعاً دریافت کرده‌اید و اصلاحاتی که می‌خواهید انجام دهید، تطبیق دهید.

دستور زیر یک الگو است. خط اول جایی است که شما اصلاحات خاص خود را ارائه می دهید. اگر برنامه ای که Gemini به شما داده است کامل است و نیازی به تغییر ندارد، می توانید به سادگی آن خط را حذف کنید.

در همان جلسه Gemini، نسخه تطبیق داده شده خود را از دستور زیر قرار دهید:

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

Gemini اکنون محتوای YAML را بر اساس دستورالعمل‌های دقیق و تأیید شده توسط انسان تولید می‌کند. پس از تکمیل، یک فایل جدید به نام dq_rules.yaml در فهرست کاری خود پیدا خواهید کرد.

اسکن کیفیت داده را ایجاد و اجرا کنید

اکنون که یک فایل dq_rules.yaml تایید شده توسط هوش مصنوعی دارید، می توانید با اطمینان آن را مستقر کنید.

با تایپ کردن /quit یا دو بار فشار دادن Ctrl+C از Gemini CLI خارج شوید.

دستور gcloud زیر یک منبع داده اسکن Dataplex جدید ایجاد می کند. هنوز اسکن را اجرا نمی کند. به سادگی تعریف و پیکربندی اسکن (فایل YAML ما) را با Dataplex ثبت می کند.

این دستور را در ترمینال خود اجرا کنید:

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"

با اسکن که اکنون تعریف شده است، می توانید یک کار را برای اجرای آن فعال کنید.

gcloud dataplex datascans run $DQ_SCAN --location=$REGION --project=$PROJECT_ID

این دستور یک شناسه شغلی را تولید می کند. می توانید وضعیت این کار را در قسمت Dataplex کنسول ابری گوگل کنترل کنید. پس از تکمیل، نتایج برای تجزیه و تحلیل در جدول BigQuery نوشته می شود.

5. نقش حیاتی Human-In-The-Loop (HITL)

در حالی که استفاده از Gemini برای تسریع تولید قوانین فوق العاده قدرتمند است، بسیار مهم است که هوش مصنوعی را به عنوان یک کمک خلبان بسیار ماهر و نه یک خلبان کاملا خودمختار در نظر بگیریم. فرآیند Human-in-the-Loop (HITL) یک پیشنهاد اختیاری نیست. این یک گام غیرقابل مذاکره و اساسی در هر جریان کاری قوی و قابل اعتماد حاکمیت داده است. صرفاً استقرار مصنوعات تولید شده توسط هوش مصنوعی بدون نظارت دقیق انسانی دستوری برای شکست است.

dq_rules.yaml تولید شده توسط هوش مصنوعی را به عنوان یک درخواست کششی در نظر بگیرید که توسط یک توسعه دهنده هوش مصنوعی بسیار سریع اما بی تجربه ارسال شده است. قبل از اینکه بتوان آن را در "شاخه اصلی" خط مشی حکومتداری شما ادغام کرد و به کار گرفت، نیاز به بررسی کامل از یک متخصص ارشد انسانی - شما - دارد. این بررسی برای کاهش ضعف‌های ذاتی مدل‌های زبانی بزرگ ضروری است.

در اینجا به تفصیل توضیح داده شده است که چرا این بررسی انسانی ضروری است و به طور خاص باید به دنبال آن باشید:

1. اعتبار سنجی متنی: هوش مصنوعی فاقد آگاهی تجاری است

  • نقطه ضعف LLM : یک LLM استاد الگوها و آمار است، اما درک درستی از زمینه کسب و کار شما ندارد. به عنوان مثال، اگر یک ستون، new_campaign_id دارای نسبت تهی 98٪ باشد، یک LLM ممکن است این ستون را به دلیل آماری نادیده بگیرد.
  • نقش حیاتی انسان: شما، متخصص انسانی، می‌دانید که قسمت new_campaign_id دیروز برای معرفی محصول اصلی هفته آینده اضافه شد. شما می دانید که نسبت تهی آن باید در حال حاضر بالا باشد، اما انتظار می رود به طور قابل توجهی کاهش یابد. شما همچنین می دانید که پس از پر شدن، باید از قالب خاصی پیروی کند. AI احتمالاً نمی تواند این دانش تجارت خارجی را استنباط کند. نقش شما این است که این زمینه تجاری را برای پیشنهادات آماری هوش مصنوعی اعمال کنید و در صورت لزوم آنها را نادیده بگیرید یا تقویت کنید.

2. صحت و دقت: محافظت در برابر توهم و خطاهای ظریف

  • نقطه ضعف LLM: LLM ها می توانند "با اطمینان اشتباه کنند." آنها می توانند "توهم" کنند یا کدی را تولید کنند که به طور ماهرانه ای نادرست است. به عنوان مثال، ممکن است یک فایل YAML با یک قانون با نام درست اما یک پارامتر نامعتبر ایجاد کند، یا ممکن است یک نوع قانون را اشتباه بنویسد (به عنوان مثال، setExpectations به جای setExpectation صحیح). این خطاهای ظریف باعث می شود که استقرار با شکست مواجه شود، اما تشخیص آنها دشوار است.
  • نقش حیاتی انسان: وظیفه شما این است که به‌عنوان نهایی‌کننده و تایید کننده طرحواره عمل کنید. شما باید YAML تولید شده را با مشخصات رسمی Dataplex DataQualityRule به دقت بررسی کنید. شما فقط بررسی نمی کنید که آیا "درست به نظر می رسد". شما صحت نحوی و معنایی آن را تأیید می کنید تا مطمئن شوید که 100٪ با API هدف مطابقت دارد. به همین دلیل است که نرم‌افزار کد از Gemini می‌خواهد تا به فایل‌های طرحواره ارجاع دهد - برای کاهش احتمال خطا - اما تأیید نهایی با شماست.

3. ایمنی و کاهش خطر: جلوگیری از عواقب پایین دست

  • ضعف LLM: یک قانون کیفیت داده ناقص که برای تولید به کار می رود می تواند عواقب شدیدی داشته باشد. اگر هوش مصنوعی rangeExpectation برای مبلغ تراکنش مالی بسیار گسترده پیشنهاد کند، ممکن است در شناسایی فعالیت های متقلبانه شکست بخورد. برعکس، اگر بر اساس یک نمونه داده کوچک، قانونی را پیشنهاد کند که بیش از حد سخت‌گیرانه است، می‌تواند تیم حین تماس شما را با هزاران هشدار مثبت کاذب پر کند، که منجر به خستگی هشدار شده و باعث از دست رفتن مشکلات واقعی شود.
  • نقش حیاتی انسان: شما مهندس ایمنی هستید. شما باید تأثیر بالقوه پایین دستی تک تک قوانینی را که هوش مصنوعی پیشنهاد می کند ارزیابی کنید. از خود بپرسید: "اگر این قانون شکست بخورد چه اتفاقی می افتد؟ آیا هشدار قابل اجرا است؟ اگر این قانون به اشتباه تصویب شود چه خطری دارد؟" این ارزیابی ریسک یک قابلیت منحصر به فرد انسانی است که هزینه شکست را در مقابل سود چک می سنجد.

4. حکمرانی به عنوان یک فرآیند مستمر: ترکیب دانش آینده نگر

  • ضعف LLM: دانش هوش مصنوعی مبتنی بر یک عکس فوری ایستا از داده ها است - نمایه از یک نقطه زمانی خاص حاصل می شود. هیچ اطلاعی از رویدادهای آینده ندارد.
  • نقش حیاتی انسان: استراتژی حکمرانی شما باید آینده نگر باشد. می دانید که یک منبع داده قرار است ماه آینده منتقل شود، که stream_id را تغییر می دهد. می دانید که کشور جدیدی به لیست geo_country اضافه می شود. فرآیند HITL جایی است که شما این دانش مربوط به وضعیت آینده را تزریق می‌کنید، قوانین را به‌روزرسانی یا موقتاً غیرفعال می‌کنید تا از شکستگی در طول تحولات تجاری یا فنی برنامه‌ریزی‌شده جلوگیری کنید. کیفیت داده ها یک بار تنظیم نیست. این یک فرآیند زنده است که باید تکامل یابد و فقط یک انسان می تواند آن تکامل را هدایت کند.

به طور خلاصه، HITL تضمین کیفیت و مکانیسم ایمنی ضروری است که حکمرانی مبتنی بر هوش مصنوعی را از یک ایده بدیع اما پرخطر به یک عمل مسئول، مقیاس‌پذیر و در سطح سازمانی تبدیل می‌کند. این تضمین می‌کند که سیاست‌های نهایی اجرا شده نه تنها با هوش مصنوعی تسریع شده‌اند، بلکه توسط انسان نیز تأیید شده‌اند و سرعت ماشین‌ها را با خرد و زمینه متخصصان انسانی ترکیب می‌کنند.

با این حال، این تاکید بر نظارت انسانی از ارزش هوش مصنوعی نمی کاهد. برعکس، هوش مصنوعی مولد نقش مهمی در تسریع فرآیند HITL ایفا می کند.

بدون هوش مصنوعی، یک مهندس داده باید:

  1. پرس و جوهای پیچیده SQL را به صورت دستی بنویسید تا مشخصات داده ها را نمایان کنید (به عنوان مثال، COUNT DISTINCT ، AVG ، MIN ، MAX برای هر ستون).
  2. به دقت نتایج را صفحه گسترده به صفحه تجزیه و تحلیل کنید.
  3. تک تک خط های فایل قانون YAML را از ابتدا بنویسید، کاری خسته کننده و مستعد خطا.

هوش مصنوعی این مراحل پرزحمت و وقت گیر را خودکار می کند. این به عنوان یک تحلیلگر خستگی ناپذیر عمل می کند که فوراً مشخصات آماری را پردازش می کند و یک "نخستین پیش نویس" خط مشی کاملاً ساختاریافته و 80٪ کامل ارائه می دهد.

این به طور اساسی ماهیت کار انسان را تغییر می دهد. متخصص انسانی می‌تواند به‌جای صرف ساعت‌ها برای خرد کردن دستی داده‌ها و کدگذاری دیگ بخار، فوراً روی کارهای با ارزش‌تر تمرکز کند:

  • بکارگیری زمینه حیاتی کسب و کار
  • تأیید صحت منطق هوش مصنوعی.
  • اتخاذ تصمیمات استراتژیک در مورد قوانینی که واقعاً مهم هستند.

در این مشارکت، هوش مصنوعی «چه» را مدیریت می‌کند (الگوهای آماری چیست؟)، انسان را آزاد می‌کند تا روی «چرا» (چرا این الگو برای کسب‌وکار ما مهم است؟) و «پس چه» (پس سیاست ما چگونه باشد؟) آزاد می‌کند. بنابراین، هوش مصنوعی جایگزین حلقه نمی شود. هر چرخه را سریعتر، هوشمندانه تر و تاثیرگذارتر می کند.

6. محیط خود را تمیز کنید

برای جلوگیری از تحمیل هزینه های آتی به حساب Google Cloud خود برای منابع استفاده شده در این کد لبه، باید پروژه ای را که حاوی منابع است حذف کنید. با این حال، اگر می خواهید پروژه را حفظ کنید، می توانید منابع فردی را که ایجاد کرده اید حذف کنید.

اسکن های Dataplex را حذف کنید

ابتدا پروفایل و اسکن های با کیفیتی که ایجاد کرده اید را حذف کنید. برای جلوگیری از حذف تصادفی منابع مهم، این دستورات از نام های خاص اسکن های ایجاد شده در این کد لبه استفاده می کنند.

# 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

مجموعه داده BigQuery را حذف کنید

سپس مجموعه داده BigQuery را حذف کنید. این دستور غیر قابل برگشت است و از پرچم -f (force) برای حذف مجموعه داده و تمام جداول آن بدون تایید استفاده می کند.

# Manually type this command to confirm you are deleting the correct dataset
bq rm -r -f --dataset $PROJECT_ID:dataplex_dq_codelab

7. تبریک می گویم!

شما با موفقیت برنامه کد را تکمیل کردید!

شما یک گردش کار مدیریت داده برنامه‌ریزی شده سرتاسر ایجاد کرده‌اید. شما با استفاده از Materialized Views برای مسطح کردن داده های پیچیده BigQuery شروع کردید و آن را برای تجزیه و تحلیل مناسب ساختید. سپس به صورت برنامه نویسی اسکن پروفایل Dataplex را برای تولید فراداده های آماری اجرا کردید. مهمتر از همه، شما از Gemini CLI برای تجزیه و تحلیل خروجی نمایه و ایجاد هوشمندانه یک آرتیفکت "policy-as-code" ( dq_rules.yaml ) استفاده کردید. سپس از CLI برای استقرار این پیکربندی به عنوان یک اسکن خودکار کیفیت داده استفاده کردید، و حلقه را بر روی یک استراتژی حکومتی مدرن و مقیاس‌پذیر می‌بندید.

اکنون شما به الگوی اساسی برای ساختن سیستم‌های کیفیت داده قابل اعتماد، شتاب‌دهی شده با هوش مصنوعی و تأیید شده توسط انسان در Google Cloud مجهز شده‌اید.

بعد چه می شود؟

  • ادغام با CI/CD: فایل dq_rules.yaml را بردارید و آن را به یک مخزن Git commit کنید. یک خط لوله CI/CD ایجاد کنید (به عنوان مثال، با استفاده از Cloud Build یا GitHub Actions) که به طور خودکار اسکن Dataplex را هر زمان که فایل قانون به روز می شود، اجرا می کند.
  • قوانین سفارشی SQL را کاوش کنید: فراتر از انواع قوانین استاندارد بروید. Dataplex از قوانین سفارشی SQL پشتیبانی می کند تا منطق پیچیده تر و خاص کسب و کار را اعمال کند که نمی تواند با چک های از پیش تعریف شده بیان شود. این یک ویژگی قدرتمند برای تنظیم اعتبار با نیازهای منحصر به فرد شما است.
  • بهینه سازی اسکن ها برای کارایی و هزینه: برای جداول بسیار بزرگ، می توانید با اسکن نکردن کل مجموعه داده ها، عملکرد را بهبود بخشید و هزینه ها را کاهش دهید. با استفاده از فیلترها برای محدود کردن اسکن به بازه‌های زمانی خاص یا بخش‌های داده، یا پیکربندی اسکن‌های نمونه‌برداری شده برای بررسی درصد معرف داده‌های خود، کاوش کنید.
  • نتایج را تجسم کنید: خروجی هر اسکن کیفیت داده Dataplex در جدول BigQuery نوشته می شود. این جدول را به استودیو Looker متصل کنید تا داشبوردهایی بسازید که نمرات کیفیت داده‌های شما را در طول زمان، جمع‌آوری شده بر اساس ابعادی که تعریف کرده‌اید (به عنوان مثال، کامل بودن، اعتبار) ردیابی می‌کند. این امر نظارت را فعالانه و قابل مشاهده برای همه ذینفعان می کند.
  • بهترین شیوه ها را به اشتراک بگذارید: به اشتراک گذاری دانش در سازمان خود را تشویق کنید تا از تجربه جمعی استفاده کنید و استراتژی کیفیت داده های خود را بهبود بخشید. پرورش فرهنگ اعتماد به داده ها کلیدی است برای استفاده حداکثری از تلاش های حاکمیتی.
  • مستندات را بخوانید: