Menggunakan Lakehouse lintas cloud

Lakehouse untuk Apache Iceberg mendukung pembuatan kueri data jarak jauh melalui konfigurasi Lakehouse lintas cloud. Setelah dikonfigurasi, sistem mendukung akses data menggunakan SQL standar di BigQuery atau Apache Spark di Managed Service untuk Apache Spark.

Halaman ini menunjukkan cara membuat kueri data jarak jauh setelah Anda menyiapkan Lakehouse lintas cloud.

Sebelum memulai

Sebelum dapat mengkueri data, Anda harus menyelesaikan langkah-langkah berikut:

  1. Siapkan Lakehouse lintas cloud untuk AWS Glue, Databricks Unity Catalog, atau Snowflake.
  2. Pastikan Anda memiliki data dalam katalog jarak jauh.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan guna membuat kueri data gabungan, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Data kueri

Setelah menyiapkan federasi, Anda dapat membuat kueri data jarak jauh menggunakan SQL standar di BigQuery atau Apache Spark di Managed Service untuk Apache Spark.

Lakehouse menangani terjemahan metadata dan akses data yang aman, yang memungkinkan Anda memperlakukan tabel Apache Iceberg jarak jauh seolah-olah tabel tersebut lokal ke lingkungan Anda Google Cloud .

Membuat kueri dari BigQuery

Untuk membuat kueri tabel Apache Iceberg gabungan, gunakan SQL BigQuery standar. Jalur tabel mengikuti struktur 4 bagian: project.federated_catalog.namespace.table. Penyimpanan ke cache, penyediaan kredensial, dan perutean transit CCI ditangani secara otomatis.

SELECT
  user_id,
  action,
  COUNT(*) as total_actions
FROM `PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME`
WHERE event_date >= '2026-04-01'
GROUP BY 1, 2;

Ganti kode berikut:

  • PROJECT_ID: Google Cloud Project ID Anda.
  • FEDERATED_CATALOG_NAME: nama katalog gabungan.
  • NAMESPACE_NAME: namespace dalam katalog.
  • TABLE_NAME: nama tabel.
  • REGION: Google Cloud region. Misalnya, us-east4.

Anda juga dapat menjalankan kueri menggunakan alat command line bq:

bq --location="REGION" --project_id="PROJECT_ID" query --use_legacy_sql=false \
  "SELECT * FROM \`PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME\` LIMIT 10"

Kueri dari Managed Service untuk Apache Spark

Kirim workload batch PySpark ke Managed Service untuk Apache Spark dengan mengaktifkan penyediaan kredensial menggunakan X-Iceberg-Access-Delegation=vended-credentials. Spark akan menggunakan kredensial yang dijual dengan cakupan jangka pendek untuk terhubung ke S3 secara aman, tanpa perlu mengelola kredensial AWS atau konektor S3 terpisah.

  1. Aktifkan konektivitas keluar untuk Managed Service untuk Apache Spark.

    Managed Service untuk Apache Spark tidak dapat terhubung ke AWS S3 dengan konfigurasi jaringan defaultnya. Anda harus menyediakan Cloud Router dan Cloud NAT.

    gcloud compute routers create lakehouse-router \
      --network=NETWORK_NAME \
      --region=REGION
    
    gcloud compute routers nats create lakehouse-nat \
      --router=lakehouse-router \
      --auto-allocate-nat-external-ips \
      --nat-all-subnet-ip-ranges \
      --region=REGION

    Ganti kode berikut:

    • NETWORK_NAME: jaringan untuk workload batch Managed Service untuk Apache Spark (misalnya, default).
    • REGION: region untuk workload batch Managed Service untuk Apache Spark.
  2. Buat file aplikasi PySpark dan jalankan tugas PySpark.

    from pyspark.sql import SparkSession
    spark = SparkSession.builder.appName("CATALOG_NAME").getOrCreate()
    
    df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME")
    df.show(10, truncate=False)

    Upload file ini ke Cloud Storage di PYSPARK_FILE.

    gcloud dataproc batches submit pyspark PYSPARK_FILE \
        --project=PROJECT_ID \
        --region=REGION \
        --version=RUNTIME_VERSION \
        --properties="\
        spark.sql.defaultCatalog=CATALOG_NAME,\
        spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\
        spark.sql.catalog.CATALOG_NAME.type=rest,\
        spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
        spark.sql.catalog.CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\
        spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\
        spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\
        spark.sql.catalog.CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\
        spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\
        spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,\
        spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"

    Ganti kode berikut:

    • NAMESPACE_NAME: namespace di katalog gabungan.
    • TABLE_NAME: nama tabel dalam katalog gabungan.
    • CATALOG_NAME: nama untuk katalog Spark lokal (misalnya, my_catalog).
    • PYSPARK_FILE: jalur Cloud Storage gs:// ke file aplikasi PySpark Anda.
    • REGION: region untuk workload batch Managed Service untuk Apache Spark.
    • RUNTIME_VERSION: versi runtime Managed Service untuk Apache Spark, misalnya 2.3.
    • PROJECT_ID: project yang ditagih untuk penggunaan endpoint katalog REST Apache Iceberg.
    • FEDERATED_CATALOG_NAME: nama katalog gabungan.

    Untuk Snowflake, tambahkan kode berikut:

    Di Snowflake, kolom STRING dioptimalkan secara otomatis untuk penyimpanan. Saat mengueri data Snowflake dari Managed Service untuk Apache Spark, Anda harus menonaktifkan vektorisasi secara eksplisit untuk mengueri kolom string dengan menambahkan properti konfigurasi Spark berikut ke tanda --properties:

    • spark.sql.iceberg.vectorization.enabled=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

Langkah berikutnya