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

1- مقدمة

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

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

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

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

المتطلبات

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

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

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

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

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

بدء Cloud Shell

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

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

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

نفِّذ الأمر التالي لتفعيل واجهات برمجة التطبيقات المطلوبة لـ BigQuery وCloud Resource Manager وGemini Enterprise Agent Engine:

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 مباشر وجاهز للاستخدام في بيئة الإنتاج ومستضاف على مستودع بيانات Google Cloud.

تشغيل Spark SQL باستخدام واجهة سطر الأوامر المجمّعة لـ Managed Apache Spark

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

  1. حدِّد خصائص كتالوج Lakehouse REST لتجنُّب تكرارها.يوضّح هذا الإعداد لـ Spark ما يلي:
    • استخدام مكتبتَي iceberg-spark-runtime وiceberg-gcp-bundle
    • إعداد كتالوج باسم my_catalog باستخدام نقطة نهاية كتالوج Lakehouse REST
    • استخدام 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. سنستعلم عن مجموعة بيانات NYC Taxi التي تم تصميمها كجدول 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

وأرسِله باستخدام Managed 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. السفر عبر الوقت في 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

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

الآن، ستدرّب نموذج انحدار خطي باستخدام جدول Lakehouse 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. الذكاء الاصطناعي غير المنظَّم باستخدام مستودع البيانات

البيانات ليست مجرّد صفوف وأعمدة. تتعامل مستودعات البيانات الموحّدة أيضًا مع البيانات غير المنظَّمة (الصور وملفات 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')

امنح حساب الخدمة الدورَين مستخدِم Gemini Enterprise Agent Engine وعارِض كائنات التخزين ليتمكّن من استدعاء نماذج 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. |
+----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

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

بينما تدير جداول الكائنات مراجع الملفات تلقائيًا، يمكنك التفاعل مع هذه الكائنات مباشرةً باستخدام مراجع الكائنات في 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 وLakehouse وBigQuery AI.

ما تعلّمته

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

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