Membuat kueri data jarak jauh

Di Lakehouse tanpa batas, koneksi lintas cloud memungkinkan Anda mengakses data jarak jauh dari platform eksternal tanpa memindahkan file antar-lingkungan cloud. Kemudian, Anda dapat mengkueri tabel gabungan dari BigQuery, Managed Service untuk Apache Spark, atau Apache Spark open source.

Selain kueri analisis, Anda dapat menggunakan data gabungan untuk insight dan tata kelola berbasis AI:

  • Analisis percakapan: bangun agen khusus yang didasarkan pada sumber data Anda, termasuk tabel gabungan, untuk menganalisis data di seluruh cloud dari satu percakapan.
  • Knowledge Catalog: membuat profil data dan menghasilkan insight di seluruh sumber data gabungan Anda.

Untuk analisis yang lebih mendalam, Anda dapat membuat agen analisis percakapan yang menggunakan project, set data, tabel, tampilan, grafik, dan fungsi yang ditentukan pengguna (UDF). Agen ini bekerja di seluruh tabel standar BigQuery, tabel Apache Iceberg yang dikelola oleh Lakehouse, dan sumber Lakehouse seperti Databricks Unity Catalog, AWS Glue, SAP BDC, dan Salesforce.

Sebelum memulai

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

  1. Pastikan Anda memiliki data dalam katalog jarak jauh.
  2. Siapkan koneksi lintas cloud untuk AWS Glue, Databricks Unity Catalog, Snowflake Horizon Catalog, Workday Data Lake, atau SAP Business Data Cloud.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengkueri data gabungan, minta administrator untuk memberi Anda peran IAM berikut pada 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 penggabungan, Anda dapat mengkueri 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, sehingga Anda dapat memperlakukan tabel Apache Iceberg jarak jauh seolah-olah tabel tersebut bersifat lokal di lingkungan Google Cloud Anda.

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. Caching, 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: Project ID Google Cloud Anda.
  • FEDERATED_CATALOG_NAME: nama katalog gabungan.
  • NAMESPACE_NAME: namespace dalam katalog.
  • TABLE_NAME: nama tabel.
  • REGION: region Google Cloud . 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 penyediaan kredensial yang diaktifkan menggunakan X-Iceberg-Access-Delegation=vended-credentials. Spark akan menggunakan kredensial yang diberikan dengan cakupan berumur pendek untuk terhubung ke S3 dengan aman, semuanya tanpa perlu mengelola kredensial AWS atau konektor S3 terpisah.

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

    Managed Service untuk Apache Spark tidak dapat terhubung ke AWS S3 dengan konfigurasi jaringan default-nya. 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=IO_IMPL,\
        spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\
        spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"

    Ganti kode berikut:

    • NAMESPACE_NAME: namespace dalam 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 karena menggunakan endpoint katalog REST Apache Iceberg.
    • FEDERATED_CATALOG_NAME: nama katalog gabungan.
    • IO_IMPL: implementasi FileIO yang cocok dengan penyimpanan pokok Anda.

    Parameter Konfigurasi Spark

    Tabel berikut mencantumkan parameter umum yang diperlukan untuk semua koneksi:

    Parameter Deskripsi
    spark.sql.defaultCatalog Nama katalog default (misalnya, CATALOG_NAME).
    spark.sql.catalog.CATALOG_NAME Class implementasi katalog. Tetapkan ke org.apache.iceberg.spark.SparkCatalog.
    spark.sql.catalog.CATALOG_NAME.type Jenis backend katalog. Tetapkan ke rest untuk katalog REST Iceberg.
    spark.sql.catalog.CATALOG_NAME.uri URI endpoint katalog REST. Tetapkan ke https://biglake.googleapis.com/iceberg/v1/restcatalog.
    spark.sql.catalog.CATALOG_NAME.warehouse Jalur lokasi warehouse untuk katalog gabungan. Tetapkan ke bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME.
    spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project Project ID Google Cloud yang digunakan untuk atribusi penagihan dan kuota. Tetapkan ke PROJECT_ID.
    spark.sql.extensions Ekstensi sesi Spark untuk sintaksis dan fitur Iceberg SQL. Tetapkan ke org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions.

    Tabel berikut mencantumkan parameter autentikasi:

    Parameter Deskripsi
    spark.sql.catalog.CATALOG_NAME.rest.auth.type Class pengelola autentikasi kustom. Tetapkan ke org.apache.iceberg.gcp.auth.GoogleAuthManager untuk autentikasi alur OAuth.
    spark.sql.catalog.CATALOG_NAME.oauth2-server-uri URI endpoint server token OAuth2. Tetapkan ke https://oauth2.googleapis.com/token untuk autentikasi Personal Access Token (PAT).
    spark.sql.catalog.CATALOG_NAME.token Token pemilik atau Token Akses Pribadi (PAT). Biasanya ditetapkan ke $(gcloud auth application-default print-access-token) untuk autentikasi PAT.

    Tabel berikut mencantumkan parameter unik berdasarkan penyedia penyimpanan Anda (IO_IMPL):

    Penyimpanan spark.sql.catalog.CATALOG_NAME.io-impl Catatan
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO Memerlukan penyediaan kredensial (X-Iceberg-Access-Delegation=vended-credentials) jika diaktifkan.
    Parameter tambahan: spark.sql.catalog.CATALOG_NAME.s3.region (untuk daftar region, lihat Endpoint dan kuota Amazon S3).
    Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO Parameter tambahan: spark.sql.catalog.CATALOG_NAME.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token.
    Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIO Tidak diperlukan parameter penyimpanan tambahan.

    Untuk Snowflake, Anda mungkin mengalami masalah saat mengkueri kolom STRING karena kolom tersebut dioptimalkan secara otomatis untuk penyimpanan. Anda dapat mengatasi masalah ini dengan salah satu dari dua cara berikut:

    • Opsi 1: Nonaktifkan vektorisasi di Spark: Tambahkan properti konfigurasi Spark berikut ke flag --properties:
    • spark.sql.iceberg.vectorization.enabled=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

    • Opsi 2: Mengubah kebijakan serialisasi di Snowflake: Ubah kebijakan serialisasi penyimpanan menjadi COMPATIBLE untuk tabel di Snowflake.

Memantau penggunaan cache dan penghematan biaya egress

Caching lakehouse diaktifkan secara otomatis untuk semua kueri lintas cloud. Saat kueri berjalan, Lakehouse otomatis meng-cache blok data secara lokal dalam penyimpanan Google Cloud . Kueri berikutnya yang menargetkan blok data yang sama akan dibaca langsung dari cache lokal, bukan mengambil ulang data dari cloud jarak jauh.

Untuk memverifikasi rasio cache ditemukan dan mengukur penghematan biaya egress, periksa detail tugas di konsol BigQuery atau ambil statistik tugas kueri (JobStatistics2) menggunakan BigQuery API atau bq CLI:

bq show --format=prettyjson --j JOB_ID

Dalam output JSON di bagian statistics.query.objectStorageStats (atau object_storage_stats di proto API), statistik tugas menampilkan daftar dengan entri untuk setiap penyedia cloud yang diakses selama eksekusi. Setiap entri berisi kolom berikut:

  • cloudProvider (cloud_provider): Penyedia cloud jarak jauh yang menghosting penyimpanan objek (misalnya, AWS atau AZURE).
  • cacheBytesRead (cache_bytes_read): Total byte yang dibaca dari cache Google Cloud lokal, sehingga menghindari pembacaan penyimpanan objek jarak jauh.
  • objectStorageBytesRead (object_storage_bytes_read): Total byte yang dibaca langsung dari penyimpanan objek penyedia cloud jarak jauh.

Untuk mengetahui informasi selengkapnya tentang konsep caching dan pertimbangan residensi data, lihat Caching cerdas.

Langkah berikutnya