การสร้าง Data Lakehouse แบบรวมสำหรับ AI ด้วย Apache Iceberg และ BigLake

1. บทนำ

ใน Codelab นี้ คุณจะได้สำรวจความสามารถของ Unified Data Lakehouse ใน Google Cloud คุณจะโต้ตอบกับชุดข้อมูลสาธารณะที่ให้บริการผ่าน Apache Iceberg REST Catalog ใน BigLake จากนั้นใช้ความสามารถด้าน AI ของ Google Cloud กับทั้งข้อมูลที่มีโครงสร้างและไม่มีโครงสร้าง

คุณจะค้นหาชุดข้อมูลแท็กซี่ NYC แบบคลาสสิกโดยใช้ Apache Iceberg เจาะลึกการย้อนเวลาเพื่อตรวจสอบการเปลี่ยนแปลงข้อมูล จากนั้นใช้ BigQuery ML และ Gemini เพื่อเรียกใช้โมเดล AI กับข้อมูล

สิ่งที่คุณต้องดำเนินการ

  • ใช้ Google Cloud Serverless สำหรับ Apache Spark เพื่อค้นหาชุดข้อมูลสาธารณะ Apache Iceberg ที่โฮสต์ใน BigLake
  • ค้นหา Structured Data ในรูปแบบ Apache Iceberg
  • สาธิตการย้อนเวลาใน Apache Iceberg
  • ใช้ BigQuery ML เพื่อฝึกโมเดลการคาดการณ์ในข้อมูลที่มีโครงสร้าง
  • สร้างตารางออบเจ็กต์ BigLake (ข้อมูลที่ไม่มีโครงสร้าง) และใช้ Gemini เพื่อวิเคราะห์รูปภาพ

สิ่งที่คุณต้องมี

  • เว็บเบราว์เซอร์ เช่น Chrome
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน

ค่าใช้จ่ายและระยะเวลาที่คาดไว้

  • เวลาที่ใช้โดยประมาณ: 45 นาที
  • ค่าใช้จ่ายโดยประมาณ: น้อยกว่า $2.00 เราใช้ชุดข้อมูลสาธารณะและการค้นหาแบบไร้เซิร์ฟเวอร์เพื่อควบคุมต้นทุนให้ต่ำ

2. การตั้งค่าและข้อกำหนด

ในขั้นตอนนี้ คุณจะเตรียมสภาพแวดล้อมและเปิดใช้ API ที่จำเป็น

เริ่มต้น 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>
    

เปิดใช้ 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. สร้าง Bucket ของ Cloud Storage สำหรับทรัพยากร Dependency ระบบจะอัปโหลดสคริปต์ PySpark ที่นี่เมื่อส่งงาน
    gcloud storage buckets create gs://$DEPS_BUCKET --location=$REGION
    

3. เชื่อมต่อกับแคตตาล็อกสาธารณะของ Apache Iceberg

ในขั้นตอนนี้ คุณจะเชื่อมต่อกับแคตตาล็อก Apache Iceberg ที่ใช้งานจริงและโฮสต์ใน BigLake ของ Google Cloud

เรียกใช้ Spark SQL ด้วย CLI ของการประมวลผลแบบกลุ่ม Serverless สำหรับ Apache Spark

เราจะใช้ Google Cloud Serverless สำหรับ Apache Spark เพื่อเรียกใช้งาน PySpark โดยไม่ต้องจัดการโครงสร้างพื้นฐาน เราจะกำหนดค่าให้ชี้ไปยังแคตตาล็อก REST ของ BigLake สาธารณะ

  1. กำหนดพร็อพเพอร์ตี้แคตตาล็อก REST ของ BigLake เพื่อหลีกเลี่ยงการทำซ้ำ การกำหนดค่านี้จะบอก Spark ว่า
    • หากต้องการใช้ไลบรารี iceberg-spark-runttime และ iceberg-gcp-bundle
    • วิธีกำหนดค่าแคตตาล็อกชื่อ my_catalog โดยใช้ปลายทางแคตตาล็อก REST ของ BigLake
    • ใช้ 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 สำหรับ 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. AI ที่มีโครงสร้างด้วย BigQuery ML

ตอนนี้คุณได้สำรวจข้อมูล Iceberg แล้ว มาใช้ความสามารถของ AI ใน BigQuery กันเลย เนื่องจากแคตตาล็อก Iceberg สาธารณะเป็นแบบอ่านอย่างเดียว เราจึงใช้ BigQuery เพื่อฝึกโมเดลในพื้นที่ทำงานได้โดยการอ่านจากตารางสาธารณะ

สร้างชุดข้อมูลในพื้นที่

ก่อนอื่น ให้สร้างชุดข้อมูลในโปรเจ็กต์เพื่อจัดเก็บโมเดล AI โดยใช้ bqCLI ดังนี้

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

ข้อมูลไม่ได้มีแค่แถวและคอลัมน์ Data Lakehouse แบบรวมจะจัดการข้อมูลที่ไม่มีโครงสร้าง (รูปภาพ, PDF) ด้วย มาใช้ตารางออบเจ็กต์และการอ้างอิงออบเจ็กต์เพื่อค้นหาข้อมูลที่ไม่มีโครงสร้างกัน

ตารางออบเจ็กต์คือตารางภายนอกแบบอ่านอย่างเดียวใน BigQuery ซึ่งแสดงออบเจ็กต์ในเส้นทาง Cloud Storage แต่ละแถวแสดงถึงไฟล์ โดยมีคอลัมน์สำหรับข้อมูลเมตา เช่น uri, size และคอลัมน์ ref พิเศษที่มี ObjectRef

การอ้างอิงออบเจ็กต์ (ObjectRef) ชี้ไปยังข้อมูลจริงของไฟล์เดียว ฟังก์ชัน BigQuery ML ที่ทันสมัย (เช่น AI.GENERATE หรือ AI.AGG) ใช้ ObjectRef เพื่ออ่านเนื้อหาไฟล์ (รูปภาพ เสียง หรือข้อความ) สำหรับการวิเคราะห์โดยไม่ต้องโหลดไบต์ลงในตารางมาตรฐาน

สร้างชุดข้อมูลสำหรับ AI ที่ไม่มีโครงสร้าง

ก่อนอื่น ให้สร้างชุดข้อมูลที่ 2 ในโปรเจ็กต์เพื่อจัดเก็บตารางออบเจ็กต์โดยใช้ bq CLI ในUSหลายภูมิภาค

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

สร้างการเชื่อมต่อภายนอก

หากต้องการค้นหาข้อมูลที่จัดเก็บไว้ใน Cloud Storage (ทั้งตารางออบเจ็กต์และข้อมูลที่ไม่มีโครงสร้าง) จาก BigQuery คุณต้องสร้างการเชื่อมต่อภายนอก

เรียกใช้คำสั่งต่อไปนี้ใน 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 และผู้ดูออบเจ็กต์ Storage ให้กับบัญชีบริการเพื่อให้เรียกใช้โมเดล 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. |
+----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

การสำรวจ ObjectRef โดยตรง: การวิเคราะห์ความรู้สึก

แม้ว่าตารางออบเจ็กต์จะจัดการการอ้างอิงไฟล์โดยอัตโนมัติ แต่คุณก็สามารถโต้ตอบกับออบเจ็กต์เหล่านี้ได้โดยตรงโดยใช้การอ้างอิงออบเจ็กต์ของ BigQuery เพื่อเรียกใช้การวิเคราะห์แบบเรียลไทม์ในไฟล์เดียว

เช่น คุณสามารถใช้ไฟล์ข้อความขนาดเล็กที่จัดเก็บไว้ใน Bucket ของ GCS (โดยใช้ตัวแปร $DEPS_BUCKET ที่สร้างไว้ก่อนหน้านี้) และวิเคราะห์โดยใช้ OBJ.MAKE_REF กับ bq query

ก่อนอื่น ให้สร้างไฟล์ข้อความขนาดเล็กแล้วอัปโหลดไปยัง Bucket ดังนี้

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. ล้างข้อมูล

โปรดลบทรัพยากรที่สร้างขึ้นระหว่างการทำ Codelab นี้เพื่อหลีกเลี่ยงการเรียกเก็บเงินอย่างต่อเนื่องในบัญชี 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 และไฟล์ในเครื่อง

ล้างข้อมูลใน Bucket ของ 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 ได้สำเร็จแล้ว

สิ่งที่คุณได้เรียนรู้

  • วิธีเชื่อมต่อและค้นหาแคตตาล็อก REST ของ Public Apache Iceberg
  • การใช้การย้อนเวลาใน Iceberg เพื่อตรวจสอบเวอร์ชันชุดข้อมูล
  • การฝึกโมเดล BigQuery ML ในข้อมูลที่มีโครงสร้าง
  • การเชื่อมต่อข้อมูลที่ไม่มีโครงสร้าง (รูปภาพ) โดยใช้ตารางออบเจ็กต์และ ObjectRef
  • การใช้ Gemini ใน BigQuery SQL โดยตรงเพื่อวิเคราะห์รูปภาพ

เอกสารอ้างอิง