1. مقدمة
يقدّم هذا الدرس التطبيقي حول الترميز مخططًا فنيًا لممارسي البيانات، ويحدّد نهجًا "يعتمد على الرموز البرمجية" لإدارة البيانات، ويوضّح كيفية تضمين إدارة قوية للجودة وبيانات التعريف مباشرةً في دورة حياة التطوير. في جوهره، يعمل "الكتالوج الشامل" في Knowledge Catalog كنسيج بيانات ذكي، ما يتيح للمؤسسات إدارة البيانات ومراقبتها والتحكّم فيها مركزيًا في جميع أنظمتها، بدءًا من مستودعات البيانات وصولاً إلى مخازن البيانات.
يوضّح هذا الدرس التطبيقي حول الترميز كيفية الاستفادة من "كتالوج المعرفة" وBigQuery وGemini CLI لتسوية البيانات المعقّدة، وتحديد خصائصها آليًا، وإنشاء اقتراحات ذكية لقواعد جودة البيانات، ونشر عمليات فحص الجودة المبرمَجة. الهدف الأساسي هو تجاوز العمليات اليدوية المستندة إلى واجهة المستخدم، والتي تكون عرضة للأخطاء ويصعب توسيع نطاقها، وإنشاء إطار عمل قوي يمكن التحكّم في إصداراته باسم "السياسة كرمز".
المتطلبات الأساسية
- فهم أساسي لـ Google Cloud Console
- مهارات أساسية في واجهة سطر الأوامر وGoogle Cloud Shell
ما ستتعلمه
- كيفية تسوية بيانات BigQuery المتداخلة باستخدام "طرق العرض المادية" لتفعيل إنشاء ملفات تعريف شاملة
- كيفية تشغيل عمليات فحص ملفات Knowledge Catalog الشخصية وإدارتها آليًا باستخدام Knowledge Catalog Python Client Library
- كيفية تصدير بيانات الملف الشخصي وتنظيمها كمدخل لنموذج الذكاء الاصطناعي التوليدي
- كيفية تصميم طلب لواجهة سطر الأوامر في Gemini من أجل تحليل بيانات الملف الشخصي وإنشاء ملف قواعد بتنسيق YAML متوافق مع "كتالوج المعرفة"
- أهمية عملية تفاعلية تتضمّن مشاركة بشرية (HITL) للتحقّق من صحة الإعدادات التي ينشئها الذكاء الاصطناعي
- كيفية نشر القواعد التي تم إنشاؤها كعملية مسح مبرمَجة لجودة البيانات
المتطلبات
- حساب على Google Cloud ومشروع على Google Cloud
- متصفّح ويب، مثل Chrome
المفاهيم الأساسية: أسس جودة البيانات في "كتالوج المعرفة"
يُعدّ فهم المكوّنات الأساسية في "كتالوج المعرفة" أمرًا ضروريًا لوضع استراتيجية فعّالة لجودة البيانات.
- فحص ملف بيانات: مهمة في "كتالوج المعرفة" تحلّل البيانات وتنشئ بيانات وصفية إحصائية، بما في ذلك النسب المئوية للقيم الفارغة وعدد القيم المميزة وتوزيعات القيم. يشكّل هذا الإجراء مرحلة "الاكتشاف" الآلية.
- قواعد جودة البيانات: عبارات توضيحية تحدّد الشروط التي يجب أن تستوفيها بياناتك (مثل
NonNullExpectationوSetExpectationوRangeExpectation). - الذكاء الاصطناعي التوليدي لاقتراح القواعد: استخدام نموذج لغوي كبير (مثل Gemini) لتحليل ملف بيانات واقتراح قواعد ذات صلة بجودة البيانات، ما يؤدي إلى تسريع عملية تحديد إطار عمل أساسي للجودة
- فحص جودة البيانات: مهمة في "كتالوج المعرفة" تتحقّق من صحة البيانات استنادًا إلى مجموعة من القواعد المحدّدة مسبقًا أو المخصّصة.
- إدارة الحوكمة الآلية: هي الموضوع الرئيسي لإدارة عناصر التحكّم في الحوكمة (مثل قواعد الجودة) كرمز (على سبيل المثال، في ملفات YAML وبرامج Python النصية). يتيح ذلك إمكانية التشغيل الآلي والتحكّم في الإصدارات والتكامل في مسارات الدمج المستمر/النشر المستمر.
- المشاركة البشرية (HITL): هي نقطة التحكّم المهمّة لدمج الخبرة والإشراف البشري في سير عمل آلي. بالنسبة إلى الإعدادات التي يتم إنشاؤها باستخدام الذكاء الاصطناعي، تكون المشاركة البشرية ضرورية للتحقّق من صحة الاقتراحات ومدى صلتها بالنشاط التجاري وسلامتها قبل نشرها.
2. الإعداد والمتطلبات
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة:

لن يستغرق توفير البيئة والاتصال بها سوى بضع لحظات، وبعد الانتهاء، من المفترض أن يظهر لك ما يلي:

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا دائمًا بسعة 5 غيغابايت، وتعمل على Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إكمال جميع المهام في هذا الدرس العملي ضمن المتصفّح. لست بحاجة إلى تثبيت أي تطبيق.
تفعيل واجهات برمجة التطبيقات المطلوبة وإعداد البيئة
داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك:
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. وينسخ البيانات من يوم واحد (2021-01-31) لضمان تشغيل عمليات الفحص بسرعة.
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- الرصد التلقائي للبيانات باستخدام ميزة إنشاء الملفات الشخصية في "كتالوج المعارف"
يُعدّ إنشاء ملفات تعريف البيانات في "كتالوج المعرفة" أداة فعّالة لاكتشاف المعلومات الإحصائية حول بياناتك تلقائيًا، مثل نسب القيم الفارغة والفرادة وتوزيع القيم. هذه العملية ضرورية لفهم بنية بياناتك وجودتها. ومع ذلك، فإنّ إحدى القيود المعروفة لإنشاء ملفات تعريف في "كتالوج المعرفة" هي عدم القدرة على فحص الحقول المتداخلة أو المتكرّرة بالكامل (مثل الأنواع RECORD أو ARRAY) ضِمن جدول. يمكنه تحديد أنّ العمود من النوع المعقّد، ولكن لا يمكنه إنشاء ملف شخصي للحقول الفردية داخل هذه البنية المتداخلة.
للتغلّب على هذه المشكلة، سنحوّل البيانات إلى "طرق عرض مجسّمة" مصمّمة خصيصًا، ما يجعل كل حقل عمودًا من المستوى الأعلى، ويتيح لـ "كتالوج المعرفة" إنشاء ملف شخصي لكل حقل على حدة.
فهم المخطط المتداخل
أولاً، لنفحص مخطط جدول المصدر. تحتوي مجموعة بيانات "إحصاءات Google 4" على العديد من الأعمدة المتداخلة والمتكرّرة. لاسترداد المخطط الكامل آليًا، بما في ذلك جميع البُنى المتداخلة، يمكنك استخدام الأمر bq show وحفظ الناتج كملف JSON.
bq show --schema --format=json $PROJECT_ID:$DATASET_ID.$TABLE_ID > bq_schema.json
يكشف فحص الملف bq_schema.json عن بنى معقّدة، مثل الجهاز والموقع الجغرافي والتجارة الإلكترونية وعناصر السجلّ المتكرّرة. هذه هي البُنى التي تتطلّب تسطيحًا لإعداد ملفات تعريف فعّالة.
تسوية البيانات باستخدام "طرق العرض المادية"
يُعدّ إنشاء "طرق عرض مجسَّمة" (MVs) الحلّ الأكثر فعالية وعملية لمشكلة البيانات المتداخلة هذه. من خلال إجراء العمليات الحسابية المسبقة للنتائج المسطّحة، توفّر "العروض المادية" مزايا كبيرة في أداء طلبات البحث والتكلفة، مع توفير بنية أبسط تشبه البنية العلائقية لأدوات التحليل وإنشاء الملفات الشخصية.
قد يكون أول ما يخطر في بالك هو دمج كل شيء في عرض واحد ضخم، ولكن هذا الأسلوب البسيط يخفي فخًا خطيرًا يمكن أن يؤدي إلى تلف البيانات بشكل كبير. لنستكشف سبب كون هذا خطأً فادحًا.
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;
الآن، نفِّذ هذه النماذج باستخدام أداة سطر الأوامر bq. سيقرأ الأمر envsubst كل ملف، ويستبدل المتغيرات مثل $PROJECT_ID و$DATASET_ID بقيمها من بيئة shell، وينقل SQL النهائي والصالح إلى أمر طلب البحث 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
تنفيذ عمليات فحص الملفات الشخصية من خلال برنامج Python
بعد أن أصبح لدينا عروض مسطّحة وقابلة للإنشاء، يمكننا إنشاء عمليات فحص ملفات بيانات Knowledge Catalog وتشغيلها آليًا لكل منها. يستخدم نص Python البرمجي التالي مكتبة برامج google-cloud-dataplex لأتمتة هذه العملية.
قبل تشغيل النص البرمجي، من أفضل الممارسات المهمة إنشاء بيئة Python معزولة داخل دليل مشروعك. يضمن ذلك إدارة تبعيات المشروع بشكل منفصل، ما يمنع حدوث تعارضات مع حِزم أخرى في بيئة Cloud Shell.
# Create the virtual environment
python3 -m venv dq_venv
# Activate the environment
source dq_venv/bin/activate
الآن، ثبِّت مكتبة برامج Knowledge Catalog داخل البيئة التي تم تفعيلها حديثًا.
# Install the Knowledge Catalog client library
pip install google-cloud-dataplex
بعد إعداد البيئة وتثبيت المكتبة، تكون مستعدًا لإنشاء نص برمجي للتنسيق.
في شريط أدوات Cloud Shell، انقر على "فتح المحرّر". أنشئ ملفًا جديدًا باسم 1_run_dataplex_scans.py والصِق رمز Python التالي فيه. إذا استنسخت مستودع GitHub، سيكون هذا الملف متوفّرًا في مجلدك.
سينشئ هذا النص البرمجي عملية فحص لكل "عرض مجسّم" (إذا لم يكن متوفّرًا من قبل)، ويُجري عملية الفحص، ثم يستقصي إلى أن تكتمل جميع مهام الفحص.
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
سيدير النص البرمجي الآن عملية إنشاء ملفات تعريف لـ Materialized Views الثلاثة، ما يتيح تقديم تحديثات الحالة في الوقت الفعلي. وبعد اكتمال العملية، سيتوفّر لديك ملف تعريف إحصائي غني وقابل للقراءة آليًا لكل طريقة عرض، ما يجعله جاهزًا للمرحلة التالية من سير العمل، وهي إنشاء قواعد جودة البيانات المستندة إلى الذكاء الاصطناعي.
يمكنك الاطّلاع على عمليات فحص الملفات الشخصية المكتملة في Google Cloud Console.
- في قائمة التنقّل، انتقِل إلى "الكتالوج الشامل" و"الملف الشخصي" في قسم "الإدارة" ضمن "كتالوج المعارف".

- من المفترض أن تظهر لك عمليات البحث الثلاث عن الملف الشخصي، بالإضافة إلى أحدث حالة وظيفية. يمكنك النقر على عملية فحص للاطّلاع على النتائج التفصيلية.

من ملف BigQuery إلى إدخال جاهز للذكاء الاصطناعي
تم تشغيل عمليات فحص ملفات Knowledge Catalog بنجاح. مع أنّ النتائج متاحة ضمن Knowledge Catalog API، لاستخدامها كمدخل لنموذج الذكاء الاصطناعي التوليدي، علينا استخراجها إلى ملف منظَّم ومحلي.
يعثر نص Python البرمجي التالي، 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 Knowledge Catalog 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، لتنفيذ المهام المعقّدة تلقائيًا. وهذا ما يجعلها مثالية لحالة الاستخدام لدينا.
المتطلّبات الأساسية
أولاً، تأكَّد من توفُّر المتطلبات الأساسية اللازمة: يجب تثبيت الإصدار 20 من Node.js أو إصدار أحدث في بيئة Cloud Shell. يمكنك التحقّق من الإصدار من خلال تنفيذ node -v.
التثبيت
هناك طريقتان لاستخدام Gemini CLI: التثبيت المؤقت أو التثبيت الدائم. سنتناول الطريقتَين هنا.
يمكنك تشغيل Gemini CLI مباشرةً لجلسة واحدة بدون أي تثبيت دائم. هذه هي الطريقة الأسهل والأسرع "لتجربة" الميزة، لأنّها تحافظ على بيئتك بدون أي تعديل.
في وحدة Cloud Shell الطرفية، شغِّل الأمر التالي:
npx https://github.com/google-gemini/gemini-cli
يؤدي هذا الأمر إلى تنزيل حزمة واجهة سطر الأوامر وتشغيلها مؤقتًا.
بالنسبة إلى أي مشروع حقيقي، فإنّ أفضل الممارسات المقترَحة هي تثبيت واجهة سطر الأوامر محليًا في دليل مشروعك، ولهذا النهج العديد من المزايا الرئيسية:
- عزل التبعيات: يضمن توفّر إصدار خاص بمشروعك من واجهة سطر الأوامر، ما يمنع حدوث تعارضات في الإصدارات مع المشاريع الأخرى.
- إمكانية إعادة الإنتاج: يمكن لأي مستخدم يستنسخ مشروعك تثبيت التبعيات نفسها بالضبط، ما يجعل عملية الإعداد موثوقة وقابلة للنقل.
- التوافق مع أفضل الممارسات: يتّبع هذا الخيار النموذج العادي لإدارة تبعيات مشاريع Node.js، ما يتيح تجنُّب المشاكل التي قد تنجم عن عمليات التثبيت العامة (-g).
لتثبيت واجهة سطر الأوامر محليًا، نفِّذ الأمر التالي من مجلد مشروعك (programmatic-dq):
npm install @google/gemini-cli
يؤدي ذلك إلى إنشاء مجلد node_modules داخل programmatic-dq. لتشغيل الإصدار الذي ثبَّته للتو، استخدِم الأمر npx.
npx gemini
الإعداد للمرة الأولى
أيًا كانت الطريقة التي تختارها، سيتم توجيهك خلال عملية إعداد لمرة واحدة عند تشغيل واجهة سطر الأوامر لأول مرة.

سيُطلب منك اختيار نسق الألوان ثم المصادقة. أبسط طريقة هي تسجيل الدخول باستخدام حسابك على Google عندما يُطلب منك ذلك. تكفي الطبقة المجانية المتوفّرة لهذا الدرس التطبيقي حول الترميز.
بعد تثبيت واجهة سطر الأوامر وإعدادها، يمكنك المتابعة لإنشاء القواعد. تدرك واجهة سطر الأوامر الملفات الموجودة في الدليل الحالي، وهو أمر بالغ الأهمية للخطوة التالية.
إنشاء قواعد جودة البيانات
مع أنّه من الممكن أن تطلب من نموذج لغوي كبير إنشاء ملف إعداد دفعة واحدة، إلا أنّ الطبيعة غير الحتمية للنماذج التوليدية تعني أنّ الناتج قد لا يتوافق دائمًا تمامًا مع المخطط الصارم الذي تتطلبه أدوات مثل gcloud. الطريقة الأكثر موثوقية هي عملية تفاعلية متعددة الخطوات، حيث يعمل الذكاء الاصطناعي أولاً كمحلّل لاقتراح خطة، ثم تراجع أنت (الخبير البشري) هذه الخطة وتوافق عليها، وبعد ذلك فقط ينشئ الذكاء الاصطناعي الرمز النهائي استنادًا إلى التعليمات التي وافقت عليها.
يحوّل هذا النهج العملية من أمر بسيط إلى جلسة تعاونية، ما يضمن أن يكون الناتج النهائي دقيقًا وتم التحقّق من صحته وجاهزًا للنشر.
أولاً، سنطلب من Gemini تحليل الملف الإحصائي والعمل كمهندس بيانات خبير، واقتراح خطة عمل، مع توجيهه بشكل صريح بعدم كتابة ملف YAML بعد، ما يركّز انتباهه على التحليل والتبرير.
في جلسة Gemini CLI التفاعلية، الصِق الطلب التالي:

You are an expert Google Cloud Knowledge Catalog 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 Knowledge Catalog 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 Knowledge Catalog 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.
هذه هي الخطوة الأكثر أهمية في سير العمل بأكمله: مراجعة "المشاركة البشرية" (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 من إنشاء الذكاء الاصطناعي وتمت مراجعته من قِبل فريقنا، يمكنك نشره بثقة.
اخرج من Gemini CLI عن طريق كتابة /quit أو الضغط على Ctrl+C مرتين.
ينشئ أمر gcloud التالي موردًا جديدًا لفحص بيانات Knowledge Catalog. لا يتم تنفيذ عملية المسح الضوئي بعد، بل يتم ببساطة تسجيل تعريف عملية المسح الضوئي وإعداداتها (ملف YAML) في "كتالوج المعرفة".
نفِّذ الأمر التالي في الوحدة الطرفية:
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"
بعد تحديد عملية البحث، يمكنك تشغيل مهمة لتنفيذها.
gcloud dataplex datascans run $DQ_SCAN --location=$LOCATION --project=$PROJECT_ID
سيؤدي هذا الأمر إلى عرض معرّف مهمة. يمكنك مراقبة حالة هذه المهمة في قسم "كتالوج المعرفة" في Google Cloud Console. بعد اكتمال العملية، ستتم كتابة النتائج في جدول BigQuery لتحليلها.
5- الدور المهم لنهج "المشاركة البشرية" (HITL)
على الرغم من أنّ استخدام Gemini لتسريع عملية إنشاء القواعد فعّال للغاية، من الضروري التعامل مع الذكاء الاصطناعي كمساعد ماهر للغاية، وليس كطيار مستقل تمامًا. إنّ عملية "المشاركة البشرية" ليست اقتراحًا اختياريًا، بل هي خطوة أساسية لا يمكن التغاضي عنها في أي سير عمل قوي وموثوق لإدارة البيانات. إنّ مجرد نشر نتائج من إنشاء الذكاء الاصطناعي بدون إشراف بشري دقيق هو وصفة للفشل.
يمكنك اعتبار dq_rules.yaml من إنشاء الذكاء الاصطناعي بمثابة طلب سحب أرسله مطوّر ذكاء اصطناعي سريع جدًا ولكنّه عديم الخبرة. ويتطلّب هذا الطلب مراجعة شاملة من خبير بشري رفيع المستوى، أي أنت، قبل دمجه في "الفرع الرئيسي" لسياسة الحوكمة ونشره. هذه المراجعة ضرورية للحدّ من نقاط الضعف المتأصلة في نماذج اللغات الكبيرة.
في ما يلي تفاصيل حول أهمية هذه المراجعة التي يجريها فريق وما يجب البحث عنه تحديدًا:
1. التحقّق من الصحة في السياق: يفتقر الذكاء الاصطناعي إلى الوعي بالنشاط التجاري
- نقطة ضعف النموذج اللغوي الكبير: النموذج اللغوي الكبير بارع في التعامل مع الأنماط والإحصاءات، ولكنّه لا يفهم سياق عملك التجاري. على سبيل المثال، إذا كان أحد الأعمدة،
new_campaign_id، يتضمّن نسبة فارغة تبلغ% 98، قد يتجاهل النموذج اللغوي الكبير هذا العمود لسبب إحصائي. - الدور المهم للموظف: بصفتك خبيرًا، أنت تعلم أنّه تمت إضافة الحقل
new_campaign_idأمس استعدادًا لإطلاق منتج رئيسي الأسبوع المقبل. أنت تعلم أنّ نسبة القيم الفارغة يجب أن تكون مرتفعة الآن، ولكن من المتوقّع أن تنخفض بشكل كبير. أنت تعلم أيضًا أنّه بعد ملء هذا الحقل، يجب أن يلتزم بتنسيق معيّن. لا يمكن للذكاء الاصطناعي استنتاج هذه المعلومات الخارجية عن المؤسسة. دورك هو تطبيق سياق النشاط التجاري هذا على الاقتراحات الإحصائية التي تقدّمها الذكاء الاصطناعي، وتعديلها أو تحسينها حسب الحاجة.
2. الصحة والدقة: الحماية من الهلوسة والأخطاء الطفيفة
- نقطة ضعف النماذج اللغوية الكبيرة: يمكن أن تكون النماذج اللغوية الكبيرة "واثقة من خطئها". يمكن أن "تتوهم" أو تنشئ رمزًا برمجيًا غير صحيح بشكل طفيف. على سبيل المثال، قد ينشئ ملف YAML يتضمّن قاعدة مسمّاة بشكل صحيح ولكن مع مَعلمة غير صالحة، أو قد يخطئ في كتابة نوع قاعدة (مثل
setExpectationsبدلاً منsetExpectationالصحيح). ستؤدي هذه الأخطاء الطفيفة إلى تعذُّر النشر، ولكن قد يكون من الصعب رصدها. - الدور المهم للمراجع البشري: وظيفتك هي العمل كأداة تدقيق نهائية وأداة للتحقّق من صحة المخطط. عليك التحقّق بدقة من ملف YAML الذي تم إنشاؤه مقارنةً بمواصفات
DataQualityRuleالرسمية في "كتالوج المعرفة". لا تتحقّق فقط مما إذا كان "يبدو صحيحًا"، بل تتحقّق من صحته النحوية والدلالية للتأكّد من أنّه متوافق بنسبة% 100 مع واجهة برمجة التطبيقات المستهدَفة. لهذا السبب، يطلب الدرس التطبيقي حول الترميز من Gemini الرجوع إلى ملفات المخطط للحدّ من احتمال حدوث خطأ، ولكن تقع مسؤولية التحقّق النهائي على عاتقك.
3. السلامة والحدّ من المخاطر: منع العواقب اللاحقة
- نقطة ضعف النموذج اللغوي الكبير: يمكن أن يكون لتطبيق قاعدة معيبة لجودة البيانات في مرحلة الإنتاج عواقب وخيمة. فإذا اقترح الذكاء الاصطناعي
rangeExpectationلمبلغ معاملة مالية واسع جدًا، قد يتعذّر عليه رصد النشاط الاحتيالي. في المقابل، إذا اقترح قاعدة صارمة جدًا استنادًا إلى عيّنة بيانات صغيرة، قد يؤدي ذلك إلى إغراق فريق الدعم الذي يعمل على مدار الساعة بآلاف التنبيهات الإيجابية الخاطئة، ما يؤدي إلى الإرهاق بسبب التنبيهات والتغاضي عن المشاكل الحقيقية. - الدور المهم الذي يلعبه الإنسان: أنت مهندس الأمان. عليك تقييم التأثير المحتمل لكل قاعدة يقترحها الذكاء الاصطناعي. اسألوا أنفسكم: "ماذا يحدث إذا لم تنجح هذه القاعدة؟ هل التنبيه قابل للتنفيذ؟ ما هو الخطر إذا تم اجتياز هذه القاعدة بشكل غير صحيح؟" إنّ تقييم المخاطر هو قدرة بشرية فريدة تقارن بين تكلفة الفشل وفوائد التحقّق.
4. الإدارة كعملية مستمرة: دمج المعرفة الاستشرافية
- نقطة ضعف النموذج اللغوي الكبير: تستند معلومات الذكاء الاصطناعي إلى لقطة ثابتة من البيانات، أي أنّ نتائج الملف الشخصي تعود إلى نقطة زمنية محدّدة. ليس لديه معلومات عن الأحداث المستقبلية.
- الدور المهم للموظفين: يجب أن تكون استراتيجية الحوكمة استشرافية. أنت تعلم أنّه من المقرّر نقل مصدر بيانات في الشهر المقبل، ما سيؤدي إلى تغيير stream_id. أنت تعلم أنّه سيتمّ إضافة بلد جديد إلى قائمة
geo_country. عملية HITL هي المكان الذي يتم فيه إدخال هذه المعرفة حول الحالة المستقبلية، وتعديل القواعد أو إيقافها مؤقتًا لمنع حدوث أعطال أثناء التطورات المخطط لها في الأنشطة التجارية أو التكنولوجية. جودة البيانات ليست عملية إعداد لمرة واحدة، بل هي عملية مستمرة يجب أن تتطوّر، ولا يمكن لأحد سوى الإنسان توجيه هذا التطوّر.
باختصار، يشكّل HITL آلية أساسية لضمان الجودة والأمان، وهي تحوّل إدارة الذكاء الاصطناعي من فكرة جديدة ولكنها محفوفة بالمخاطر إلى ممارسة مسؤولة وقابلة للتوسّع ومناسبة للمؤسسات. ويضمن ذلك ألا تكون السياسات النهائية التي يتم نشرها معزّزة بالذكاء الاصطناعي فحسب، بل أن يتم التحقّق منها أيضًا من قِبل خبراء، ما يجمع بين سرعة الآلات وحكمة الخبراء البشريين ومعرفتهم بالسياق.
ومع ذلك، لا يقلّل هذا التركيز على الإشراف البشري من قيمة الذكاء الاصطناعي، بل على العكس من ذلك، يؤدي الذكاء الاصطناعي التوليدي دورًا حاسمًا في تسريع عملية HITL نفسها.
بدون الذكاء الاصطناعي، على مهندس البيانات إجراء ما يلي:
- كتابة استعلامات SQL معقّدة يدويًا لإنشاء ملف تعريف للبيانات (مثل
COUNT DISTINCTوAVGوMINوMAXلكل عمود) - تحليل نتائج جداول البيانات بدقة
- كتابة كل سطر من ملف قاعدة YAML من البداية، وهي مهمة شاقة وعرضة للأخطاء
يؤدي الذكاء الاصطناعي هذه الخطوات الشاقة والمستهلكة للوقت تلقائيًا. تعمل هذه الميزة كمحلّل لا يكلّ يعالج الملف الإحصائي على الفور ويقدّم "مسودة أولى" للسياسة منظَّمة بشكل جيد ومكتملة بنسبة% 80.
يغيّر ذلك بشكل أساسي طبيعة عمل الإنسان، فبدلاً من قضاء ساعات في معالجة البيانات يدويًا وكتابة الرموز البرمجية الجاهزة، يمكن للخبير البشري التركيز فورًا على المهام الأكثر أهمية:
- تطبيق سياق الأعمال المهم.
- التحقّق من صحة منطق الذكاء الاصطناعي
- اتّخاذ قرارات استراتيجية بشأن القواعد المهمة حقًا
في هذه الشراكة، يتولّى الذكاء الاصطناعي مهمة تحديد "ماذا" (ما هي الأنماط الإحصائية؟)، ما يتيح للموظف التركيز على "لماذا" (لماذا هذا النمط مهم لنشاطنا التجاري؟) و "ماذا بعد" (ما هي السياسة التي يجب اتّباعها؟). لذلك، لا يحلّ الذكاء الاصطناعي محلّ هذه العملية، بل يجعل كل دورة فيها أسرع وأكثر ذكاءً وتأثيرًا.
6. تنظيف البيئة
لتجنُّب تحمّل رسوم مستقبلية على حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدرس التطبيقي حول الترميز، عليك حذف المشروع الذي يحتوي على الموارد. ومع ذلك، إذا أردت الاحتفاظ بالمشروع، يمكنك حذف المراجع الفردية التي أنشأتها.
حذف عمليات فحص "قائمة المعارف"
أولاً، احذف عمليات فحص الملف الشخصي والجودة التي أنشأتها. ولمنع الحذف غير المقصود للموارد المهمة، تستخدم هذه الأوامر الأسماء المحددة لعمليات الفحص التي تم إنشاؤها في هذا الدرس العملي.
# 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
حذف مجموعة بيانات BigQuery
بعد ذلك، احذف مجموعة بيانات BigQuery. لا يمكن التراجع عن هذا الأمر، ويستخدم العلامة -f (فرض) لإزالة مجموعة البيانات وجميع جداولها بدون تأكيد.
# Manually type this command to confirm you are deleting the correct dataset
bq rm -r -f --dataset $PROJECT_ID:dataplex_dq_codelab
7. تهانينا!
لقد أكملت الدرس التطبيقي حول الترميز بنجاح.
لقد أنشأت سير عمل متكاملاً آليًا لإدارة البيانات. بدأت باستخدام "طرق العرض المادية" لتسوية بيانات BigQuery المعقّدة، ما جعلها مناسبة للتحليل. بعد ذلك، أجريت عمليات فحص لملفات Knowledge Catalog الشخصية آليًا من أجل إنشاء بيانات وصفية إحصائية. والأهم من ذلك، أنّك استفدت من واجهة سطر الأوامر (CLI) في Gemini لتحليل ناتج الملف الشخصي وإنشاء عنصر dq_rules.yaml "السياسة كرمز" بذكاء. ثمّ استخدمت واجهة سطر الأوامر لنشر هذا الإعداد كعملية فحص تلقائية لجودة البيانات، ما يتيح لك إكمال عملية استراتيجية الحوكمة الحديثة والقابلة للتوسّع.
أصبحت الآن مجهّزًا بالنمط الأساسي لإنشاء أنظمة موثوقة وعالية الجودة للبيانات، ومُحسّنة باستخدام الذكاء الاصطناعي، وتم التحقّق منها من قِبل فريقنا على Google Cloud.
الخطوات التالية
- التكامل مع عملية التكامل المستمر/التسليم المستمر (CI/CD): خذ ملف dq_rules.yaml واحفظه في مستودع Git. أنشئ مسار CI/CD (على سبيل المثال، باستخدام Cloud Build أو GitHub Actions) ينشر عملية فحص "كتالوج المعرفة" تلقائيًا كلما تم تعديل ملف القواعد.
- استكشاف قواعد SQL المخصّصة: يمكنك تجاوز أنواع القواعد العادية. يتيح "كتالوج المعرفة" قواعد SQL مخصّصة لفرض منطق أكثر تعقيدًا خاصًا بالنشاط التجاري ولا يمكن التعبير عنه باستخدام عمليات التحقّق المحدّدة مسبقًا. هذه ميزة فعّالة لتخصيص عملية التحقّق حسب متطلباتك الفريدة.
- تحسين عمليات البحث من أجل الكفاءة والتكلفة: بالنسبة إلى الجداول الكبيرة جدًا، يمكنك تحسين الأداء وخفض التكاليف من خلال عدم البحث دائمًا في مجموعة البيانات بأكملها. استكشِف استخدام الفلاتر لتضييق نطاق البحث إلى أُطر زمنية أو شرائح بيانات معيّنة، أو إعداد عمليات بحث مستندة إلى عيّنات للتحقّق من نسبة تمثيلية من بياناتك.
- عرض النتائج بشكل مرئي: تتم كتابة نتائج كل عملية فحص لجودة البيانات في Knowledge Catalog في جدول BigQuery. اربط هذا الجدول بـ Data Studio لإنشاء لوحات بيانات تتتبّع نتائج جودة البيانات بمرور الوقت، ويتم تجميعها حسب السمات التي حدّدتها (مثل الاكتمال والصحة). يتيح ذلك مراقبة استباقية ومرئية لجميع الجهات المعنية.
- مشاركة أفضل الممارسات: شجِّع على مشاركة المعلومات داخل مؤسستك للاستفادة من الخبرة الجماعية وتحسين استراتيجية جودة البيانات. إنّ تعزيز ثقافة الثقة في البيانات هو المفتاح للاستفادة إلى أقصى حد من جهود الإدارة.
- قراءة المستندات: