إنشاء بحيرة بيانات موحَّدة للذكاء الاصطناعي باستخدام Apache Iceberg وBigLake

1. مقدمة

في هذا الدرس التطبيقي حول الترميز، ستستكشف إمكانات Unified Data Lakehouse على Google Cloud. ستتفاعل مع مجموعات البيانات العامة التي يتم عرضها من خلال كتالوج Apache Iceberg REST على BigLake، ثم ستطبّق إمكانات الذكاء الاصطناعي من Google Cloud على البيانات المنظَّمة وغير المنظَّمة.

ستبحث في مجموعة بيانات سيارات الأجرة الكلاسيكية في مدينة نيويورك باستخدام Apache Iceberg، وستتعمّق في ميزة السفر عبر الزمن لتدقيق تغييرات البيانات، ثم ستستخدم BigQuery ML وGemini لتشغيل نماذج الذكاء الاصطناعي على بياناتك.

الإجراءات التي ستنفذّها

  • استخدِم الحوسبة بدون خادم من Google Cloud لـ Apache Spark لطلب البحث عن مجموعات بيانات Apache Iceberg العامة المستضافة على BigLake.
  • يمكنك طلب البيانات المنظَّمة بتنسيق Apache Iceberg.
  • توضيح كيفية استخدام ميزة السفر عبر الزمن في Apache Iceberg
  • استخدِم BigQuery ML لتدريب نموذج تنبؤي على البيانات المنظَّمة.
  • أنشئ جدول كائنات BigLake (بيانات غير منظَّمة) واستخدِم Gemini لتحليل الصور.

المتطلبات

  • متصفّح ويب، مثل Chrome
  • مشروع Google Cloud تم تفعيل الفوترة فيه

التكلفة والمدة المتوقّعتان

  • الوقت المقدّر لإنهاء الدرس: حوالي 45 دقيقة
  • التكلفة المقدّرة: أقل من 2.00 دولار أمريكي نستخدم مجموعات البيانات المتاحة للجميع وطلبات البحث بلا خادم للحفاظ على انخفاض التكاليف.

2. الإعداد والمتطلبات

في هذه الخطوة، عليك إعداد بيئتك وتفعيل واجهات برمجة التطبيقات اللازمة.

بدء Cloud Shell

سيتم تنفيذ معظم الأوامر من Google Cloud Shell.

  1. انقر على تفعيل Cloud Shell في أعلى "وحدة تحكّم Google Cloud".
  2. إثبات صحة المصادقة:
    gcloud auth list
    
  3. أكِّد مشروعك:
    gcloud config get project
    
  4. إذا لم يتم ضبط المشروع، اضبطه باستخدام رقم تعريف مشروعك:
    gcloud config set project <YOUR_PROJECT_ID>
    

تفعيل واجهات برمجة التطبيقات

نفِّذ الأمر التالي لتفعيل واجهات برمجة التطبيقات المطلوبة لكلّ من BigQuery وCloud Resource Manager وVertex AI:

gcloud services enable \
  bigquery.googleapis.com \
  aiplatform.googleapis.com \
  cloudresourcemanager.googleapis.com

ضبط البيئة وإنشاء حزمة التبعيات

  1. اضبط متغيّرات البيئة في نافذة الأوامر:
    export PROJECT_ID=$(gcloud config get project)
    export REGION=us-central1
    export DEPS_BUCKET=$PROJECT_ID-deps-bucket
    
  2. أنشئ حزمة Cloud Storage الخاصة بالتبعيات. يتم تحميل نصوص PySpark البرمجية هنا عند إرسال المهمة:
    gcloud storage buckets create gs://$DEPS_BUCKET --location=$REGION
    

3- الربط بـ "الفهرس العام" في Apache Iceberg

في هذه الخطوة، ستربط كتالوج Apache Iceberg مباشرًا بجودة الإنتاج ومستضافًا على BigLake من Google Cloud.

تشغيل Spark SQL باستخدام واجهة سطر الأوامر Serverless for Apache Spark Batch

سنستخدم الحوسبة بدون خادم من Google Cloud لـ Apache Spark لتشغيل مهام PySpark بدون الحاجة إلى إدارة البنية الأساسية. سنضبطه للإشارة إلى كتالوج BigLake REST العلني.

  1. حدِّد خصائص BigLake REST Catalog لتجنُّب تكرارها.يوضّح هذا الإعداد لـ Spark ما يلي:
    • لاستخدام المكتبتَين iceberg-spark-runttime وiceberg-gcp-bundle
    • لضبط كتالوج باسم my_catalog باستخدام نقطة نهاية BigLake REST Catalog
    • لاستخدام Google Cloud Storage (GCS) لقراءة ملفات البيانات بدلاً من نظام الملفات المحلّي التلقائي
    • لضبط كتالوج my_catalog هذا على أنّه تلقائي لجلسة التصفّح.
    • لاستخدام بيانات الاعتماد المقدَّمة من جهة خارجية من أجل تحسين مستوى الأمان وتسهيل الوصول إلى البيانات
    export METASTORE_PROPERTIES="^|^spark.jars.packages=org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.0,org.apache.iceberg:iceberg-gcp-bundle:1.10.0|\
    spark.sql.catalog.my_catalog=org.apache.iceberg.spark.SparkCatalog|\
    spark.sql.catalog.my_catalog.type=rest|\
    spark.sql.catalog.my_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog|\
    spark.sql.catalog.my_catalog.warehouse=gs://biglake-public-nyc-taxi-iceberg|\
    spark.sql.catalog.my_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO|\
    spark.sql.catalog.my_catalog.header.x-goog-user-project=$PROJECT_ID|\
    spark.sql.catalog.my_catalog.header.X-Iceberg-Access-Delegation=vended-credentials|\
    spark.sql.catalog.my_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager|\
    spark.sql.defaultCatalog=my_catalog|\
    spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions|\
    spark.log.level=ERROR"
    
  2. أنشئ ملف طلب بحث اختبار بسيطًا:
    cat <<EOF > test.py
    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder.getOrCreate()
    
    spark.sql("SHOW TABLES IN public_data").show()
    EOF
    
  3. أرسِل الوظيفة المجمّعة باتّباع الخطوات التالية:
    gcloud dataproc batches submit pyspark \
      --project=$PROJECT_ID \
      --region=$REGION \
      --version=2.3 \
      --properties="$METASTORE_PROPERTIES" \
      --deps-bucket=gs://$DEPS_BUCKET \
      test.py
    
    من المفترَض أن تظهر لك نتيجة مثل ما يلي:
    +-----------+----------------+-----------+
    |  namespace|       tableName|isTemporary|
    +-----------+----------------+-----------+
    |public_data|     nyc_taxicab|      false|
    |public_data|nyc_taxicab_2021|      false|
    +-----------+----------------+-----------+
    

4. الاستعلام عن بيانات Iceberg المنظَّمة

بعد الربط، يمكنك الوصول الكامل إلى مجموعات البيانات باستخدام SQL. سنطلب بيانات من مجموعة بيانات سيارات الأجرة في نيويورك التي تم تصميمها كجدول Iceberg.

تنفيذ طلب بحث التجميع العادي

أنشئ ملفًا باسم query.py:

cat <<EOF > query.py
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

query = """
SELECT
  passenger_count,
  COUNT(1) AS num_trips,
  ROUND(AVG(total_amount), 2) AS avg_fare,
  ROUND(AVG(trip_distance), 2) AS avg_distance
FROM public_data.nyc_taxicab
WHERE data_file_year = 2021 AND passenger_count > 0
GROUP BY passenger_count
ORDER BY num_trips DESC
"""

spark.sql(query).show()
EOF

وأرسِلها باستخدام "الحوسبة بدون خادم من Google Cloud لـ Apache Spark":

gcloud dataproc batches submit pyspark \
  --project=$PROJECT_ID \
  --region=$REGION \
  --version=2.3 \
  --properties="$METASTORE_PROPERTIES" \
  --deps-bucket=gs://$DEPS_BUCKET \
  query.py

من المفترَض أن تظهر لك نتيجة مشابهة لما يلي في وحدة التحكّم:

+---------------+---------+--------+------------+
|passenger_count|num_trips|avg_fare|avg_distance|
+---------------+---------+--------+------------+
|              1| 21508009|   18.82|        3.03|
|              2|  4424746|   20.22|        3.40|
|              3|  1164846|   19.84|        3.27|
|              5|   718282|   18.88|        3.07|
|              4|   466485|   20.61|        3.44|
|              6|   452467|   18.97|        3.11|
|              7|       78|   65.24|        3.71|
|              8|       49|   57.39|        5.88|
|              9|       35|   73.26|        6.20|
|             96|        1|   17.00|        2.00|
|            112|        1|   15.00|        2.00|
+---------------+---------+--------+------------+

لماذا يجب استخدام Apache Iceberg هنا؟

  • إزالة الأقسام غير الضرورية: يتم فلترة طلب البحث على data_file_year = 2021. تتيح Iceberg للمحرك تخطّي فحص البيانات من سنوات أخرى بالكامل.
  • مرونة المحرّك: يمكنك تشغيل هذا الإجراء في Spark أو Trino أو BigQuery بدون نسخ البيانات.

5- Time Travel in Apache Iceberg

من أقوى ميزات Iceberg ميزة السفر عبر الزمن. يسمح لك هذا الخيار بطلب البحث عن البيانات كما كانت في إصدار أو لقطة سابقة.

عرض سجلّ الجدول

أنشئ ملفًا باسم history.py:

cat <<EOF > history.py
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

spark.sql("SELECT * FROM public_data.nyc_taxicab.history").show()
EOF

وأرسِلها:

gcloud dataproc batches submit pyspark \
  --project=$PROJECT_ID \
  --region=$REGION \
  --version=2.3 \
  --properties="$METASTORE_PROPERTIES" \
  --deps-bucket=gs://$DEPS_BUCKET \
  history.py

من المفترض أن تظهر لك نتيجة مشابهة لما يلي في وحدة التحكّم:

+--------------------+-------------------+-------------------+-------------------+
|     made_current_at|        snapshot_id|          parent_id|is_current_ancestor|
+--------------------+-------------------+-------------------+-------------------+
|2026-01-07 21:32:...|6333415779680505547|               NULL|               true|
|2026-01-07 21:34:...|1840345522877675925|6333415779680505547|               true|
|2026-01-07 21:36:...|7203554539964460256|1840345522877675925|               true|
|2026-01-07 21:38:...|4573466015237516024|7203554539964460256|               true|
|2026-01-07 21:40:...|3353190952148867790|4573466015237516024|               true|
|2026-01-07 21:42:...|1335547378580631681|3353190952148867790|               true|
|2026-01-07 21:44:...|8203141258229894239|1335547378580631681|               true|
|2026-01-07 21:46:...|1597048231706307813|8203141258229894239|               true|
|2026-01-07 21:48:...|6247811509231462655|1597048231706307813|               true|
|2026-01-07 21:50:...|2527184310045633322|6247811509231462655|               true|
|2026-01-07 21:52:...|2512764101237223642|2527184310045633322|               true|
|2026-01-07 21:52:...|7045957533358062548|2512764101237223642|               true|
|2026-01-07 21:53:...| 531753237516076726|7045957533358062548|               true|
|2026-01-07 21:53:...|4184653573199718274| 531753237516076726|               true|
|2026-01-07 21:54:...|5125223829492177301|4184653573199718274|               true|
|2026-01-07 21:54:...|6844673237417600305|5125223829492177301|               true|
|2026-01-07 21:54:...|6634828203344518093|6844673237417600305|               true|
|2026-01-07 21:55:...|7637728273407236194|6634828203344518093|               true|
|2026-01-07 21:55:...|3424071684958740192|7637728273407236194|               true|
|2026-01-07 21:55:...|1743746294196424254|3424071684958740192|               true|
+--------------------+-------------------+-------------------+-------------------+

ستظهر لك صفوف تمثّل أرقام تعريف مختلفة للّقطات وتواريخ إضافتها.

مقارنة عدد الصفوف الحالي بالعدد السابق

أنشئ ملفًا باسم timetravel.py:

cat <<EOF > timetravel.py
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

query = """
SELECT 'Current State' AS version, COUNT(*) AS count FROM public_data.nyc_taxicab
UNION ALL
SELECT 'Past State' AS version, COUNT(*) AS count FROM public_data.nyc_taxicab VERSION AS OF 4573466015237516024
"""

spark.sql(query).show()
EOF

وأرسِلها:

gcloud dataproc batches submit pyspark \
  --project=$PROJECT_ID \
  --region=$REGION \
  --version=2.3 \
  --properties="$METASTORE_PROPERTIES" \
  --deps-bucket=gs://$DEPS_BUCKET \
  timetravel.py

من المفترض أن تظهر لك نتيجة مشابهة لما يلي في وحدة التحكّم:

+-------------+----------+
|      version|     count|
+-------------+----------+
|Current State|1293069366|
|   Past State|  72878594|
+-------------+----------+

يضمن ذلك إمكانية تدقيق التغييرات في البيانات بمرور الوقت.

6. الذكاء الاصطناعي المنظَّم باستخدام BigQuery ML

بعد استكشاف بيانات Iceberg، لنستخدِم إمكانات الذكاء الاصطناعي في BigQuery. بما أنّ فهرس Iceberg العام للقراءة فقط، يمكننا استخدام BigQuery لتدريب نموذج في مساحة العمل من خلال القراءة من الجداول العامة.

إنشاء مجموعة بيانات محلّية

أولاً، أنشئ مجموعة بيانات في مشروعك لتخزين نموذج الذكاء الاصطناعي باستخدام واجهة سطر الأوامر bq:

bq mk --location=$REGION --project_id=$PROJECT_ID iceberg_ai

تدريب نموذج الانحدار الخطي

الآن، ستدرّب نموذج الانحدار الخطي باستخدام جدول BigLake Iceberg العلني.

أنشئ ملف طلب بحث ودَرِّب النموذج باستخدام bq query:

cat <<'EOF' > train_model.sql
CREATE OR REPLACE MODEL `iceberg_ai.predict_fare`
OPTIONS(model_type='LINEAR_REG', input_label_cols=['fare_amount']) AS
SELECT fare_amount, passenger_count, CAST(trip_distance AS FLOAT64) AS trip_distance
FROM `bigquery-public-data`.`biglake-public-nyc-taxi-iceberg`.public_data.nyc_taxicab
WHERE fare_amount > 0 AND trip_distance > 0 AND RAND() < 0.01; -- Using 1% of data to downsample
EOF

bq query --location=$REGION --use_legacy_sql=false < train_model.sql

التوقّع باستخدام النموذج

بعد تدريب النموذج، يمكنك استخدامه للتنبؤ بمبالغ الأجرة للرحلات الجديدة باستخدام ML.PREDICT.

أنشئ ملف طلب بحث ونفِّذ التوقّع باستخدام bq query:

cat <<'EOF' > predict_fare.sql
SELECT
  predicted_fare_amount, passenger_count, trip_distance
FROM
  ML.PREDICT(MODEL `iceberg_ai.predict_fare`,
    (
    SELECT 2 AS passenger_count, 5.0 AS trip_distance
    )
  );
EOF

bq query --location=$REGION --use_legacy_sql=false < predict_fare.sql

ينبغي أن تظهر مُخرجات مشابهة لما يلي:

+-----------------------+-----------------+---------------+
| predicted_fare_amount | passenger_count | trip_distance |
+-----------------------+-----------------+---------------+
|     14.12252095150709 |               2 |           5.0 |
+-----------------------+-----------------+---------------+

7. الذكاء الاصطناعي غير المنظَّم مع BigLake

البيانات ليست مجرد صفوف وأعمدة. تتعامل مستودعات البيانات الموحّدة أيضًا مع البيانات غير المنظَّمة (الصور وملفات PDF). لنستخدِم جداول الكائنات ومراجع الكائنات للاستعلام عن البيانات غير المنظَّمة.

جداول العناصر هي جداول خارجية للقراءة فقط في BigQuery تسرد العناصر في مسار Cloud Storage. يمثّل كل صف ملفًا، مع أعمدة للبيانات الوصفية مثل uri وsize وعمود ref خاص يحتوي على ObjectRef.

تشير مراجع العناصر (ObjectRef) إلى البيانات الفعلية لملف واحد. تستهلك دوال BigQuery ML الحديثة (مثل AI.GENERATE أو AI.AGG) ObjectRef لقراءة محتوى الملف (الصور أو الصوت أو النص) بغرض التحليل بدون تحميل وحدات البايت إلى جدول عادي.

إنشاء مجموعة بيانات للذكاء الاصطناعي غير المنظَّم

أولاً، أنشئ مجموعة بيانات ثانية في مشروعك لتخزين "جداول العناصر" باستخدام واجهة سطر الأوامر bq في المنطقة المتعددة US:

bq mk --location=US --project_id=$PROJECT_ID iceberg_object_ai

إنشاء اتصال خارجي

للاستعلام عن البيانات المخزّنة في Cloud Storage (سواء جداول الكائنات أو البيانات غير المنظَّمة) من BigQuery، عليك إنشاء عملية ربط خارجية.

نفِّذ ما يلي في Cloud Shell لإنشاء اتصال Cloud Resource:

bq mk --connection --project_id=$PROJECT_ID --location=US --connection_type=CLOUD_RESOURCE my-conn

ابحث عن رقم تعريف حساب الخدمة الذي تم إنشاؤه للربط:

CONNECTION_SA=$(bq show --format=json --project_id=$PROJECT_ID --connection $PROJECT_ID.us.my-conn | jq -r '.serviceAccountId // .cloudResource.serviceAccountId')

امنح حساب الخدمة الدورَين مستخدم Vertex AI وعارض عناصر التخزين ليتمكّن من استدعاء نماذج Gemini وقراءة بيانات GCS:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$CONNECTION_SA" \
  --role="roles/aiplatform.user"

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:$CONNECTION_SA" \
  --role="roles/storage.objectViewer"

إنشاء جدول عناصر

سنستخدم عملية الربط الخارجية my-conn التي تم إنشاؤها في القسم السابق للوصول إلى البيانات غير المنظَّمة. أنشئ ملف طلب بحث وأنشئ "جدول الكائنات" باستخدام bq query:

cat <<'EOF' > create_object_table.sql
CREATE EXTERNAL TABLE `iceberg_object_ai.sample_images`
WITH CONNECTION `us.my-conn`
OPTIONS (
  object_metadata = 'SIMPLE',
  uris = ['gs://cloud-samples-data/vision/landmark/*']
);
EOF

bq query --use_legacy_sql=false < create_object_table.sql

استخدام Gemini على "بيانات الكائنات"

يمكنك الآن تنفيذ طلب بحث باستخدام Gemini لتقييم الصور بدون تنزيلها.

يمكنك طلب البحث عن الصور باستخدام لغة SQL العادية من خلال bq query:

cat <<EOF > query_images.sql
SELECT
  uri,
  image_analysis.description
FROM (
  SELECT
    uri,
    AI.GENERATE(
      (
        'Identify what is happening in the image.',
        ref
      ),
      connection_id => 'us.my-conn',
      endpoint => 'gemini-2.5-flash-lite',
      output_schema => 'event STRING, severity STRING, description STRING'
    ) AS image_analysis
  FROM
    iceberg_object_ai.sample_images
);
EOF

bq query --use_legacy_sql=false < query_images.sql

مثال على الناتج:

+----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                           uri                            |                                                                                                                                                                                                                             description                                                                                                                                                                                                                             |
+----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| gs://cloud-samples-data/vision/landmark/eiffel_tower.jpg | The Eiffel Tower stands tall against a cloudy sky, overlooking the Seine River in Paris. Boats are docked along the riverbank, and trees line the opposite shore, with bridges and buildings visible in the distance.                                                                                                                                                                                                                                               |
| gs://cloud-samples-data/vision/landmark/pofa.jpg         | A wide shot shows the Palace of Fine Arts, a monumental structure in San Francisco, California. The building features a large rotunda with a dome, surrounded by colonnades. In front of the rotunda is a lagoon. Several people are walking around the grounds. The sky is blue with a few scattered clouds.                                                                                                                                                       |
| gs://cloud-samples-data/vision/landmark/st_basils.jpeg   | A monument stands in front of Saint Basil's Cathedral in Moscow under a bright blue sky with scattered white clouds. The cathedral features distinctive onion domes in various colors and patterns, including red, blue and white stripes, green and beige stripes, and red and blue diamonds. A large green tree partially obscures the left side of the cathedral. People are visible in the foreground near the base of the monument and the cathedral entrance. |
+----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

استكشاف ObjectRefs مباشرةً: تحليل المشاعر

في حين أنّ "جداول العناصر" تدير مراجع الملفات تلقائيًا، يمكنك التفاعل مع هذه العناصر مباشرةً باستخدام مراجع العناصر في BigQuery لإجراء تحليل فوري على ملفات فردية.

على سبيل المثال، يمكنك استخدام ملف نصي صغير مخزّن في حزمة GCS الخاصة بك (باستخدام المتغيّر $DEPS_BUCKET الذي تم إنشاؤه سابقًا) وتحليله باستخدام OBJ.MAKE_REF مع bq query.

أولاً، أنشئ ملفًا نصيًا صغيرًا وحمِّله إلى الحزمة:

cat <<'EOF' > review.txt
This product is fantastic! It exceeded my expectations. The quality is top-notch. I highly recommend it to everyone!
EOF

gcloud storage cp review.txt gs://${DEPS_BUCKET}/review.txt

الآن، استعلم عن الملف باستخدام OBJ.MAKE_REF داخل لغة SQL القياسية:

cat <<EOF > sentiment_analysis.sql
SELECT
  AI.GENERATE(
    (
      'Analyze the sentiment of this text file. Is it positive, negative, or neutral? Explain why.',
      OBJ.MAKE_REF('gs://${DEPS_BUCKET}/review.txt', 'us.my-conn')
    ),
    connection_id => 'us.my-conn',
    endpoint => 'gemini-2.5-flash-lite'
  ).result AS ml_generate_text_result;
EOF

bq query --use_legacy_sql=false < sentiment_analysis.sql

مثال على الناتج:

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                 ml_generate_text_result                                                                                  |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| This text file has a **strongly positive** sentiment.                                                                                                                                    |
|                                                                                                                                                                                          |
| Here's why:                                                                                                                                                                              |
|                                                                                                                                                                                          |
| *   **Positive Keywords:** The text is filled with unequivocally positive words and phrases:                                                                                             |
|     *   "fantastic"                                                                                                                                                                      |
|     *   "exceeded my expectations"                                                                                                                                                       |
|     *   "top-notch"                                                                                                                                                                      |
|     *   "highly recommend"                                                                                                                                                               |
|                                                                                                                                                                                          |
| *   **Enthusiastic Language:** The use of exclamation marks ("!") further amplifies the positive tone, indicating excitement and strong approval.                                        |
|                                                                                                                                                                                          |
| *   **Lack of Negative or Neutral Elements:** There are no words, phrases, or implications that suggest any dissatisfaction, criticism, or even indifference.                            |
|                                                                                                                                                                                          |
| In summary, the author's language is enthusiastic and uses multiple strong positive descriptors, leaving no room for doubt that their opinion of the product is overwhelmingly positive. |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

8. تَنظيم

لتجنُّب الرسوم المستمرة على حسابك على Google Cloud، احذف الموارد التي تم إنشاؤها أثناء هذا الدرس التطبيقي حول الترميز.

حذف مجموعة البيانات والاتصال

نفِّذ ما يلي في Cloud Shell لحذف مجموعات البيانات والاتصال:

bq rm -r -f --location=$REGION iceberg_ai
bq rm -r -f --location=US iceberg_object_ai
bq rm --connection $PROJECT_ID.US.my-conn

حذف حِزم GCS والملفات المحلية

تنظيف حِزم GCS والملفات المحلية:

# Delete GCS buckets
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")
gcloud storage rm -r gs://dataproc-temp-${REGION}-${PROJECT_NUMBER}-*
gcloud storage rm -r gs://dataproc-staging-${REGION}-${PROJECT_NUMBER}-*
gcloud storage rm -r gs://${DEPS_BUCKET}

# Delete local files
rm -f train_model.sql predict_fare.sql create_object_table.sql query_images.sql sentiment_analysis.sql test.py query.py history.py timetravel.py review.txt

يمكنك أيضًا حذف المشروع بأكمله إذا أنشأته لهذا التمرين المعملي فقط.

9- تهانينا

تهانينا! لقد أنشأت بنجاح بحيرة بيانات موحّدة باستخدام Apache Iceberg وBigLake وBigQuery AI.

ما تعلّمته

  • كيفية ربط فهارس Public Apache Iceberg REST وتنفيذ طلبات بحث فيها
  • استخدام Time Travel في Iceberg لتدقيق إصدارات مجموعة البيانات
  • تدريب نماذج BigQuery ML على البيانات المنظَّمة
  • ربط البيانات غير المنظَّمة (الصور) باستخدام &quotجداول الكائنات&quot و&quotObjectRef&quot
  • استخدام Gemini مباشرةً في BigQuery SQL لتحليل الصور

المستندات المرجعية