Membangun Lakehouse Data Terpadu untuk AI dengan Apache Iceberg dan BigLake

1. Pengantar

Dalam codelab ini, Anda akan mempelajari kemampuan Unified Data Lakehouse di Google Cloud. Anda akan berinteraksi dengan set data publik yang ditayangkan melalui Katalog REST Apache Iceberg di BigLake, lalu menerapkan kemampuan AI Google Cloud ke data terstruktur dan tidak terstruktur.

Anda akan membuat kueri set data NYC Taxi klasik menggunakan Apache Iceberg, mempelajari Perjalanan Waktu untuk mengaudit perubahan data, lalu menggunakan BigQuery ML dan Gemini untuk menjalankan model AI pada data Anda.

Yang akan Anda lakukan

  • Menggunakan Google Cloud Serverless untuk Apache Spark guna membuat kueri set data publik Apache Iceberg yang dihosting di BigLake.
  • Membuat kueri data terstruktur dalam format Apache Iceberg.
  • Mendemonstrasikan Perjalanan Waktu di Apache Iceberg.
  • Menggunakan BigQuery ML untuk melatih model prediktif pada data terstruktur.
  • Membuat Tabel Objek BigLake (Data tidak terstruktur) dan menggunakan Gemini untuk menganalisis gambar.

Yang akan Anda butuhkan

  • Browser web seperti Chrome.
  • Project Google Cloud yang mengaktifkan penagihan.

Perkiraan Biaya dan Durasi

  • Waktu penyelesaian: ~45 menit.
  • Perkiraan Biaya: < $2,00. Kami menggunakan set data publik dan kueri tanpa server untuk menekan biaya.

2. Penyiapan dan Persyaratan

Pada langkah ini, Anda akan menyiapkan lingkungan dan mengaktifkan API yang diperlukan.

Mulai Cloud Shell

Anda akan menjalankan sebagian besar perintah dari Google Cloud Shell.

  1. Klik Activate Cloud Shell di bagian atas konsol Google Cloud.
  2. Verifikasi autentikasi:
    gcloud auth list
    
  3. Konfirmasi project Anda:
    gcloud config get project
    
  4. Jika project tidak ditetapkan, tetapkan menggunakan ID project Anda:
    gcloud config set project <YOUR_PROJECT_ID>
    

Mengaktifkan API

Jalankan perintah berikut untuk mengaktifkan API yang diperlukan untuk BigQuery, Cloud Resource Manager, dan Vertex AI:

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

Mengonfigurasi Lingkungan dan Membuat Bucket Dependensi

  1. Tetapkan variabel lingkungan di terminal Anda:
    export PROJECT_ID=$(gcloud config get project)
    export REGION=us-central1
    export DEPS_BUCKET=$PROJECT_ID-deps-bucket
    
  2. Buat bucket Cloud Storage dependensi. Skrip PySpark diupload di sini pada waktu pengiriman tugas:
    gcloud storage buckets create gs://$DEPS_BUCKET --location=$REGION
    

3. Menghubungkan ke Katalog Publik Apache Iceberg

Pada langkah ini, Anda akan terhubung ke Katalog Apache Iceberg live dan tingkat produksi yang dihosting di BigLake Google Cloud.

Menjalankan Spark SQL dengan CLI Batch Serverless untuk Apache Spark

Kita akan menggunakan Google Cloud Serverless untuk Apache Spark guna menjalankan tugas PySpark tanpa perlu mengelola infrastruktur. Kita akan mengonfigurasinya agar mengarah ke Katalog REST BigLake publik.

  1. Tentukan properti Katalog REST BigLake agar tidak perlu mengulanginya.Konfigurasi ini memberi tahu Spark:
    • Untuk menggunakan library iceberg-spark-runtime dan iceberg-gcp-bundle.
    • Untuk mengonfigurasi katalog bernama my_catalog menggunakan endpoint Katalog REST BigLake.
    • Untuk menggunakan Google Cloud Storage (GCS) guna membaca file data, bukan sistem file lokal default.
    • Untuk menetapkan katalog my_catalog ini sebagai default untuk sesi kita.
    • Untuk menggunakan kredensial yang dijual untuk meningkatkan keamanan dan menyederhanakan akses data.
    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. Buat file kueri pengujian sederhana:
    cat <<EOF > test.py
    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder.getOrCreate()
    
    spark.sql("SHOW TABLES IN public_data").show()
    EOF
    
  3. Kirim tugas batch:
    gcloud dataproc batches submit pyspark \
      --project=$PROJECT_ID \
      --region=$REGION \
      --version=2.3 \
      --properties="$METASTORE_PROPERTIES" \
      --deps-bucket=gs://$DEPS_BUCKET \
      test.py
    
    Tunggu beberapa menit hingga tugas batch selesai berjalan.Setelah tugas selesai, Anda akan melihat output yang mirip dengan berikut ini:
    +-----------+----------------+-----------+
    |  namespace|       tableName|isTemporary|
    +-----------+----------------+-----------+
    |public_data|     nyc_taxicab|      false|
    |public_data|nyc_taxicab_2021|      false|
    +-----------+----------------+-----------+
    

4. Membuat Kueri Data Iceberg Terstruktur

Setelah terhubung, Anda memiliki akses SQL penuh ke set data. Kita akan membuat kueri set data NYC Taxi yang dimodelkan sebagai tabel Iceberg.

Menjalankan kueri agregasi standar

Buat file bernama 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

Lalu kirim menggunakan Serverless untuk 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

Tunggu beberapa menit hingga tugas batch selesai berjalan.

Setelah tugas selesai, Anda akan melihat output yang mirip dengan berikut ini:

+---------------+---------+--------+------------+
|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|
+---------------+---------+--------+------------+

Mengapa menggunakan Apache Iceberg di sini?

  • Pemangkasan Partisi: Kueri memfilter data_file_year = 2021. Iceberg memungkinkan mesin untuk sepenuhnya melewati pemindaian data dari tahun lain.
  • Agilitas Mesin: Anda dapat menjalankan ini di Spark, Trino, atau BigQuery tanpa menyalin data.

5. Perjalanan Waktu di Apache Iceberg

Salah satu fitur Iceberg yang paling canggih adalah Perjalanan Waktu. Fitur ini memungkinkan Anda membuat kueri data seperti yang ada pada versi atau snapshot sebelumnya.

Melihat Histori Tabel

Buat file bernama 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

Lalu kirim:

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

Anda akan melihat output yang mirip dengan berikut ini di konsol:

+--------------------+-------------------+-------------------+-------------------+
|     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|
+--------------------+-------------------+-------------------+-------------------+

Anda akan melihat baris yang mewakili ID snapshot yang berbeda dan kapan snapshot tersebut diterapkan.

Membandingkan jumlah baris saat ini dengan jumlah baris sebelumnya

Buat file bernama 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

Lalu kirim:

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

Anda akan melihat output yang mirip dengan berikut ini di konsol:

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

Hal ini memastikan Anda dapat mengaudit perubahan data dari waktu ke waktu.

6. AI Terstruktur dengan BigQuery ML

Setelah mempelajari data Iceberg, mari gunakan kemampuan AI BigQuery. Karena katalog Iceberg publik bersifat hanya baca, kita dapat menggunakan BigQuery untuk melatih model di ruang kerja dengan membaca dari tabel publik.

Membuat set data lokal

Pertama, buat set data di project Anda untuk menyimpan model AI menggunakan CLI bq:

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

Melatih Model Regresi Linear

Sekarang Anda akan melatih model Regresi Linear menggunakan tabel Iceberg BigLake publik.

Buat file kueri dan latih model menggunakan 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

Memprediksi menggunakan Model

Setelah model dilatih, Anda dapat menggunakannya untuk memprediksi jumlah tarif untuk perjalanan baru menggunakan ML.PREDICT.

Buat file kueri dan jalankan prediksi menggunakan 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

Anda akan melihat output yang mirip dengan berikut ini:

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

7. AI Tidak Terstruktur dengan BigLake

Data bukan hanya baris dan kolom. Unified Data Lakehouse juga menangani data tidak terstruktur (gambar, PDF). Mari gunakan Tabel Objek dan Referensi Objek untuk membuat kueri data tidak terstruktur.

Tabel objek adalah tabel eksternal hanya baca di BigQuery yang mencantumkan objek dalam jalur Cloud Storage. Setiap baris mewakili file, dengan kolom untuk metadata seperti uri, size, dan kolom ref khusus yang berisi ObjectRef.

Referensi objek (ObjectRef) mengarah ke data sebenarnya dari satu file. Fungsi BigQuery ML modern (seperti AI.GENERATE atau AI.AGG) menggunakan ObjectRef untuk membaca konten file (gambar, audio, atau teks) untuk analisis tanpa memuat byte ke dalam tabel standar.

Membuat Set Data untuk AI Tidak Terstruktur

Pertama, buat set data kedua di project Anda untuk menyimpan Tabel Objek menggunakan CLI bq di multi-region US:

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

Membuat Koneksi Eksternal

Untuk membuat kueri data yang disimpan di Cloud Storage (baik Tabel Objek maupun data tidak terstruktur) dari BigQuery, Anda harus membuat Koneksi eksternal.

Jalankan perintah berikut di Cloud Shell untuk membuat koneksi Cloud Resource:

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

Temukan ID akun layanan yang dibuat untuk koneksi Anda:

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

Berikan peran Vertex AI User dan Storage Object Viewer ke Akun Layanan agar dapat memanggil model Gemini dan membaca data 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"

Membuat Tabel Objek

Kita akan menggunakan koneksi eksternal my-conn yang dibuat di bagian sebelumnya untuk mengakses data tidak terstruktur. Buat file kueri dan buat Tabel Objek menggunakan 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

Menggunakan Gemini pada Data Objek

Sekarang jalankan kueri menggunakan Gemini untuk mengevaluasi gambar tanpa mendownloadnya.

Buat kueri gambar menggunakan SQL standar melalui 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

Contoh output:

+----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                           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. |
+----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Mempelajari ObjectRef Secara Langsung: Analisis Sentimen

Meskipun Tabel Objek mengelola referensi file secara otomatis, Anda dapat berinteraksi dengan objek ini secara langsung menggunakan Referensi Objek BigQuery untuk menjalankan analisis langsung pada satu file.

Misalnya, Anda dapat menggunakan file teks kecil yang disimpan di bucket GCS Anda sendiri (menggunakan variabel $DEPS_BUCKET yang dibuat sebelumnya) dan menganalisisnya menggunakan OBJ.MAKE_REF dengan bq query.

Pertama, buat file teks kecil dan upload ke bucket Anda:

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

Sekarang buat kueri file menggunakan OBJ.MAKE_REF di dalam SQL standar:

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

Contoh output:

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                 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. Pembersihan

Untuk menghindari biaya berkelanjutan ke akun Google Cloud Anda, hapus resource yang dibuat selama codelab ini.

Menghapus Set Data dan Koneksi

Jalankan perintah berikut di Cloud Shell untuk menghapus set data dan koneksi Anda:

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

Menghapus bucket GCS dan file lokal

Bersihkan bucket GCS dan file lokal:

# 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

Anda juga dapat menghapus seluruh project jika membuatnya hanya untuk lab ini.

9. Selamat

Selamat! Anda telah berhasil membangun Unified Data Lakehouse menggunakan Apache Iceberg, BigLake, dan BigQuery AI.

Yang telah Anda pelajari

  • Cara menghubungkan dan membuat kueri Katalog REST Apache Iceberg Publik.
  • Menggunakan Perjalanan Waktu di Iceberg untuk mengaudit versi set data.
  • Melatih model BigQuery ML pada data terstruktur.
  • Menghubungkan data tidak terstruktur (gambar) menggunakan Tabel Objek &ObjectRef.
  • Menggunakan Gemini langsung di BigQuery SQL untuk menganalisis gambar.

Dokumen referensi