יצירת Lakehouse מאוחד ל-AI באמצעות Apache Iceberg ו-BigLake

1. מבוא

ב-Codelab הזה נסביר על היכולות של Unified Data Lakehouse ב-Google Cloud. תתבצע אינטראקציה עם מערכי נתונים ציבוריים שמוגשים דרך קטלוג ה-REST של Apache Iceberg ב-BigLake, ולאחר מכן תשתמשו ביכולות ה-AI של Google Cloud על נתונים מובְנים ולא מובְנים.

תשלחו שאילתות למערך הנתונים הקלאסי של מוניות בניו יורק באמצעות Apache Iceberg, תשתמשו ב-Time Travel כדי לבדוק שינויים בנתונים, ואז תשתמשו ב-BigQuery ML וב-Gemini כדי להריץ מודלים של AI על הנתונים.

הפעולות שתבצעו:

  • משתמשים ב-Google Cloud Serverless ל-Apache Spark כדי להריץ שאילתות על מערכי נתונים ציבוריים של Apache Iceberg שמתארחים ב-BigLake.
  • שליחת שאילתות לנתונים מובְנים בפורמט Apache Iceberg.
  • הדגמה של Time Travel ב-Apache Iceberg.
  • משתמשים ב-BigQuery ML כדי לאמן מודל חיזוי על נתונים מובנים.
  • יוצרים טבלת אובייקטים ב-BigLake (נתונים לא מובנים) ומשתמשים ב-Gemini כדי לנתח תמונות.

הדרישות

  • דפדפן אינטרנט כמו Chrome.
  • פרויקט ב-Google Cloud שהחיוב בו מופעל.

עלות ומשך זמן צפויים

  • זמן משוער לביצוע: כ-45 דקות.
  • עלות משוערת: פחות מ-2$. אנחנו משתמשים במערכי נתונים ציבוריים ובשאילתות ללא שרתים כדי לשמור על עלויות נמוכות.

2. הגדרה ודרישות

בשלב הזה, תכינו את הסביבה ותפעילו את ממשקי ה-API הנדרשים.

הפעלת Cloud Shell

רוב הפקודות יופעלו מ-Google Cloud Shell.

  1. לוחצים על Activate Cloud Shell בחלק העליון של מסוף Google Cloud.
  2. אימות האימות:
    gcloud auth list
    
  3. מאשרים את הפרויקט:
    gcloud config get project
    
  4. אם הפרויקט לא מוגדר, מגדירים אותו באמצעות מזהה הפרויקט:
    gcloud config set project <YOUR_PROJECT_ID>
    

הפעלת ממשקי ה-API

מריצים את הפקודה הבאה כדי להפעיל את ממשקי ה-API הנדרשים ל-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 CLI

נשתמש ב-Google Cloud Serverless ל-Apache Spark כדי להריץ משימות PySpark בלי לנהל תשתית. אנחנו נגדיר אותו כך שיצביע על קטלוג BigLake REST הציבורי.

  1. כדי להימנע מחזרה על הגדרות, מגדירים את המאפיינים של קטלוג BigLake REST.ההגדרה הזו אומרת ל-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

ושולחים אותו באמצעות Serverless for 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?

  • Partition Pruning: המסננים של השאילתה הם data_file_year = 2021. ‫Iceberg מאפשר למנוע דילוג על סריקת נתונים משנים אחרות לחלוטין.
  • גמישות המנוע: אפשר להריץ את הפעולה הזו ב-Spark, ב-Trino או ב-BigQuery בלי להעתיק נתונים.

5. Time Travel ב-Apache Iceberg

אחת מהתכונות הכי חזקות של Iceberg היא Time Travel. היא מאפשרת לכם לשלוח שאילתות לגבי נתונים כפי שהם הופיעו בגרסה או בתמונת מצב קודמת.

צפייה בהיסטוריה של הטבלה

יוצרים קובץ בשם 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. ‫AI מובנה באמצעות BigQuery ML

אחרי שבדקנו את נתוני Iceberg, נשתמש ביכולות ה-AI של BigQuery. מאחר שקטלוג Iceberg הציבורי הוא לקריאה בלבד, אנחנו יכולים להשתמש ב-BigQuery כדי לאמן מודל בסביבת העבודה שלנו על ידי קריאה מטבלאות ציבוריות.

יצירת מערך נתונים מקומי

קודם כל, יוצרים מערך נתונים בפרויקט כדי לאחסן את מודל ה-AI באמצעות bq CLI:

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

אימון מודל רגרסיה לינארית

עכשיו תאמנו מודל של רגרסיה לינארית באמצעות טבלת Iceberg ציבורית של BigLake.

יוצרים קובץ שאילתות ומאמנים את המודל באמצעות 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. ‫AI לא מובנה עם BigLake

הנתונים הם לא רק שורות ועמודות. אגמי נתונים מאוחדים מטפלים גם בנתונים לא מובְנים (תמונות, קובצי PDF). נשתמש בטבלאות אובייקטים ובהפניות לאובייקטים כדי לשלוח שאילתות לגבי נתונים לא מובנים.

טבלאות אובייקטים הן טבלאות חיצוניות לקריאה בלבד ב-BigQuery שמציגות רשימה של אובייקטים בנתיב Cloud Storage. כל שורה מייצגת קובץ, עם עמודות למטא-נתונים כמו uri, size ועמודה מיוחדת ref שמכילה את ObjectRef.

הפניות לאובייקטים (ObjectRef) מפנות לנתונים בפועל של קובץ יחיד. פונקציות מודרניות של BigQuery ML (כמו AI.GENERATE או AI.AGG) צורכות ObjectRef כדי לקרוא תוכן של קובץ (תמונות, אודיו או טקסט) לצורך ניתוח בלי לטעון את הבייטים לטבלה רגילה.

יצירה של קבוצת נתונים ל-AI לא מובנה

קודם צריך ליצור מערך נתונים שני בפרויקט כדי לאחסן את טבלאות האובייקטים באמצעות bq CLI באזור הגיאוגרפי הנרחב US:

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

יצירת חיבור חיצוני

כדי לשלוח שאילתות לנתונים שמאוחסנים ב-Cloud Storage (גם טבלאות אובייקטים וגם נתונים לא מובנים) מ-BigQuery, צריך ליצור חיבור חיצוני.

כדי ליצור קישור למשאבים ב-Cloud, מריצים את הפקודה הבאה ב-Cloud Shell:

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 User ו-Storage Object Viewer כדי שהוא יוכל להפעיל מודלים של 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, מוחקים את המשאבים שנוצרו במהלך ה-codelab הזה.

מחיקת מערך נתונים וחיבור

כדי למחוק את מערכי הנתונים והחיבור, מריצים את הפקודה הבאה ב-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. מזל טוב

מעולה! יצרתם בהצלחה Unified Data Lakehouse באמצעות Apache Iceberg,‏ BigLake ו-BigQuery AI.

מה למדתם

  • איך מתחברים לקטלוגים ציבוריים של Apache Iceberg ב-REST ומריצים בהם שאילתות.
  • שימוש ב-Time Travel ב-Iceberg כדי לבצע ביקורת על גרסאות של מערכי נתונים.
  • אימון מודלים של BigQuery ML על נתונים מובנים.
  • חיבור נתונים לא מובנים (תמונות) באמצעות טבלאות אובייקטים ו-ObjectRef.
  • שימוש ב-Gemini ישירות ב-BigQuery SQL כדי לנתח תמונות.

מסמכי עזר