Mengkueri katalog gabungan dengan Spark dan katalog runtime Lakehouse

Setelah menyiapkan akses data lintas cloud di katalog runtime Lakehouse, Anda dapat mengkueri tabel Iceberg jarak jauh dari Managed Service untuk Apache Spark tanpa memigrasikan file atau mengelola kredensial penyimpanan cloud terpisah.

Katalog runtime Lakehouse menangani sinkronisasi metadata dan akses data yang aman melalui pemberian kredensial sementara. Saat Spark mengkueri tabel gabungan, katalog runtime Lakehouse menerjemahkan metadata katalog dan mengeluarkan kredensial sementara yang tercakup untuk Spark agar dapat membaca data dari Amazon S3 atau Cloud Storage, sehingga memperlakukan tabel seolah-olah tabel tersebut bersifat lokal untuk lingkunganGoogle Cloud Anda.

Jenis katalog gabungan yang didukung

Managed Service untuk Apache Spark mendukung kueri jenis katalog gabungan berikut melalui endpoint Katalog REST Iceberg katalog runtime Lakehouse:

Jenis katalog gabungan Backend penyimpanan yang didukung Panduan penyiapan di katalog runtime Lakehouse
AWS Glue Data Catalog Amazon S3 (s3://—katalog akun AWS default atau bucket tabel Amazon S3) Menghubungkan ke AWS Glue
Databricks Unity Catalog Lokasi eksternal Amazon S3 (s3://) atau Cloud Storage (gs://) Menghubungkan ke Databricks Unity Catalog
Snowflake Horizon Catalog Amazon S3 (s3://) atau Cloud Storage (gs://) Terhubung ke Snowflake Horizon Catalog

Untuk mempelajari persyaratan kesiapan katalog dan definisi parameter Spark yang mendasarinya untuk setiap penyedia penyimpanan, lihat Membuat kueri data jarak jauh di katalog runtime Lakehouse dan Parameter Konfigurasi Spark.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that you have the permissions required to complete this guide.

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the Dataproc, BigLake, and BigQuery APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  7. Verify that you have the permissions required to complete this guide.

  8. Verify that billing is enabled for your Google Cloud project.

  9. Enable the Dataproc, BigLake, and BigQuery APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  10. Pastikan Anda memiliki tabel Iceberg di katalog jarak jauh.
  11. Siapkan koneksi lintas cloud dan katalog gabungan di katalog runtime Lakehouse untuk penyedia katalog jarak jauh Anda:

Peran Identity and Access Management (IAM) yang diperlukan

Peran IAM tertentu diperlukan untuk menjalankan contoh di halaman ini. Bergantung pada kebijakan organisasi, peran ini mungkin sudah diberikan. Untuk memeriksa pemberian peran, lihat Apakah Anda perlu memberikan peran?. Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran yang Anda butuhkan bergantung pada cara workload Anda berjalan. Cluster Managed Service untuk Apache Spark dan runtime serverless Managed Service untuk Apache Spark 2.3 dan yang lebih lama menjalankan workload sebagai akun layanan. Managed Service untuk Apache Spark runtime serverless versi 3.0 dan yang lebih baru menjalankan workload dengan kredensial pengguna akhir (EUC) secara default, sehingga Anda memberikan peran akses data ke akun pengguna, bukan akun layanan. Jika Anda menentukan akun layanan kustom untuk runtime 3.0 atau yang lebih baru, workload akan berjalan dengan kredensial akun layanan. Untuk mengetahui informasi selengkapnya, lihat Peran deployment serverless.

Peran pengguna

Untuk mendapatkan izin yang Anda perlukan untuk membuat cluster Managed Service untuk Apache Spark, mengirimkan workload batch, atau membuat sesi interaktif, minta administrator untuk memberi Anda peran IAM berikut:

  • Gunakan cluster atau runtime serverless 2.3 atau yang lebih lama:
  • Menggunakan runtime serverless 3.0 atau yang lebih baru: Dataproc Serverless Editor (roles/dataproc.serverlessEditor) pada project
  • Membaca tabel gabungan dengan kredensial pengguna akhir di runtime serverless 3.0 atau yang lebih baru: BigLake Viewer (roles/biglake.viewer) pada project yang berisi katalog gabungan
  • Menggunakan kredensial akun layanan di runtime tanpa server 3.0 atau yang lebih baru: Pengguna Akun Layanan (roles/iam.serviceAccountUser) di akun layanan kustom

Peran akun layanan

Berikan peran berikut ke akun layanan yang menjalankan workload Anda. Runtime serverless Managed Service untuk Apache Spark 3.0 dan yang lebih baru memerlukan peran ini hanya jika workload dijalankan dengan kredensial akun layanan.

Untuk memastikan bahwa akun layanan default Compute Engine atau akun layanan kustom memiliki izin yang diperlukan untuk menjalankan tugas Managed Service untuk Apache Spark dan membaca tabel gabungan, minta administrator untuk memberikan peran IAM berikut kepada akun layanan default Compute Engine atau akun layanan kustom:

  • Menjalankan tugas Managed Service untuk Apache Spark di cluster atau runtime serverless 2.3 atau yang lebih lama: Dataproc Worker (roles/dataproc.worker) di project
  • Menjalankan tugas Managed Service untuk Apache Spark di runtime serverless 3.0 atau yang lebih baru:
  • Menemukan dan membaca metadata tabel gabungan saat runtime: BigLake Viewer (roles/biglake.viewer) di project yang berisi katalog gabungan

Untuk memastikan bahwa Agen Layanan Managed Service untuk Apache Spark (service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com) memiliki izin yang diperlukan untuk menyelesaikan properti konfigurasi yang disederhanakan dataproc.lakehouse.catalog. saat Anda membuat cluster, mengirimkan workload batch, atau membuat sesi interaktif, minta administrator Anda untuk memberikan peran IAM BigLake Viewer (roles/biglake.viewer) kepada Agen Layanan Managed Service untuk Apache Spark (service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com) di project yang berisi katalog gabungan.

Mengonfigurasi konektivitas jaringan keluar untuk Amazon S3

Saat Anda mengkueri katalog gabungan yang didukung oleh Amazon S3, workload batch serverless dan sesi interaktif Managed Service untuk Apache Spark, serta cluster Managed Service untuk Apache Spark IP internal tidak dapat terhubung ke endpoint Amazon S3 dengan konfigurasi jaringan default-nya. Sediakan Cloud Router dan Cloud NAT di jaringan VPC workload Anda untuk mengizinkan traffic keluar ke Amazon S3:

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 VPC untuk Managed Service untuk cluster Apache Spark, beban kerja batch, atau sesi interaktif, misalnya, default.
  • REGION: region Google Cloud untuk cluster, workload batch, atau sesi interaktif Managed Service untuk Apache Spark Anda.

Mengonfigurasi Managed Service untuk Apache Spark dan membuat kueri tabel gabungan

Anda dapat mengonfigurasi cluster Managed Service untuk Apache Spark, workload batch serverless, atau sesi interaktif untuk terhubung ke katalog gabungan di katalog runtime Lakehouse. Resource Managed Service untuk Apache Spark ini mendukung properti konfigurasi dataproc.lakehouse.catalog.CATALOG_NAME yang disederhanakan (direkomendasikan), yang membaca definisi katalog gabungan dari katalog runtime Lakehouse dan menghasilkan properti Spark Katalog REST Iceberg yang diperlukan, termasuk header io-impl penyimpanan dan pengambilan kredensial (bentuk properti cluster menambahkan awalan dataproc:).

Konfigurasi yang disederhanakan dan konfigurasi manual menggunakan otorisasi Google untuk Iceberg (GoogleAuthManager), yang memerlukan salah satu versi image cluster atau runtime serverless berikut:

  • Cluster Managed Service untuk Apache Spark: image 2.2 versi 2.2.65 dan yang lebih baru, atau image 2.3 versi 2.3.11 dan yang lebih baru.
  • Workload batch serverless dan sesi interaktif Managed Service untuk Apache Spark: runtime 2.2 versi 2.2.60 dan yang lebih baru, runtime 2.3 versi 2.3.10 dan yang lebih baru, atau runtime 3.0.

Untuk workload batch serverless dan sesi interaktif, peran yang diperlukan bergantung pada versi runtime. Runtime 3.0 dan yang lebih baru menggunakan kredensial pengguna akhir secara default. Untuk mengetahui detailnya, lihat Peran IAM yang diperlukan dan Peran deployment serverless.

Cluster

Buat cluster Managed Service untuk Apache Spark dengan komponen opsional Iceberg menggunakan properti konfigurasi yang disederhanakan (direkomendasikan), atau dengan menentukan properti katalog secara manual.

Konfigurasi yang disederhanakan menggunakan properti (direkomendasikan)

Buat cluster dengan properti katalog gabungan:

gcloud dataproc clusters create CLUSTER_NAME \
  --project=PROJECT_ID \
  --region=REGION \
  --image-version=IMAGE_VERSION \
  --optional-components=ICEBERG,JUPYTER \
  --enable-component-gateway \
  --properties="dataproc:dataproc.lakehouse.catalog.CATALOG_NAME=projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,spark:spark.sql.defaultCatalog=CATALOG_NAME"

Ganti kode berikut:

  • CLUSTER_NAME: nama untuk cluster Anda.
  • PROJECT_ID: Project ID Google Cloud Anda.
  • REGION: region Google Cloud untuk cluster, misalnya, us-central1.
  • IMAGE_VERSION: versi image Managed Service untuk Apache Spark—misalnya, 2.3-debian12. Untuk versi yang didukung, lihat persyaratan di bagian ini sebelumnya.
  • CATALOG_NAME: nama untuk katalog Spark lokal, misalnya, federated_catalog. Nilainya dapat sama dengan FEDERATED_CATALOG_NAME.
  • FEDERATED_CATALOG_NAME: ID katalog gabungan yang Anda buat di Sebelum memulai.

Membuat kueri Snowflake Horizon Catalog

Jika Anda mengkueri Snowflake Horizon Catalog, perhatikan hal-hal berikut:

  • Penyimpanan Snowflake: Konfigurasi yang disederhanakan mendukung tabel Snowflake yang disimpan di Amazon S3. Untuk tabel Snowflake yang disimpan di Cloud Storage, gunakan konfigurasi manual dengan io-impl ditetapkan ke org.apache.iceberg.gcp.gcs.GCSFileIO.

  • Kolom STRING Snowflake: Jika Anda mengalami error saat mengkueri kolom STRING Snowflake yang kebijakan serialisasi penyimpanan tabelnya di Snowflake bukan COMPATIBLE, Anda dapat mengubah kebijakan serialisasi penyimpanan menjadi COMPATIBLE di Snowflake atau menonaktifkan vektorisasi Parquet di Spark dengan menambahkan properti berikut ke flag --properties:

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

Di notebook Jupyter atau aplikasi PySpark, buat SparkSession tanpa menentukan konfigurasi katalog:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("APP_NAME").getOrCreate()

Ganti APP_NAME dengan nama aplikasi Spark Anda.

Konfigurasi manual

Jika Anda tidak menggunakan properti konfigurasi yang disederhanakan, buat cluster seperti yang dijelaskan sebelumnya di bagian ini, tanpa meneruskan properti dataproc:dataproc.lakehouse.catalog. ke flag --properties, lalu konfigurasi SparkSession secara manual. Untuk mengetahui daftar nilai parameter penyedia penyimpanan, lihat Parameter Konfigurasi Spark.

from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"

spark = SparkSession.builder.appName("APP_NAME") \
.config('spark.sql.defaultCatalog', catalog_name) \
.config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
.config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
.config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \
.config(f'spark.sql.catalog.{catalog_name}.warehouse', 'bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME') \
.config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
.config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \
.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation', 'vended-credentials') \
.config(f'spark.sql.catalog.{catalog_name}.io-impl', 'IO_IMPL') \
.config(f'spark.sql.catalog.{catalog_name}.s3.client-factory-impl', 'org.apache.iceberg.aws.s3.DefaultS3FileIOAwsClientFactory') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.getOrCreate()

Ganti IO_IMPL dengan implementasi FileIO untuk penyimpanan yang berisi tabel Anda:

  • Tabel di Amazon S3: org.apache.iceberg.aws.s3.S3FileIO
  • Tabel di Cloud Storage: org.apache.iceberg.gcp.gcs.GCSFileIO

Properti s3.client-factory-impl hanya berlaku untuk tabel di Amazon S3. Hapus baris ini untuk tabel Cloud Storage.

Serverless

Kirim workload batch PySpark ke Managed Service untuk Apache Spark serverless menggunakan properti konfigurasi yang disederhanakan (direkomendasikan), atau dengan menentukan properti katalog secara manual.

Konfigurasi yang disederhanakan menggunakan properti (direkomendasikan)

Teruskan properti katalog gabungan tanpa awalan dataproc: saat Anda mengirimkan workload batch:

gcloud dataproc batches submit pyspark PYSPARK_FILE \
  --project=PROJECT_ID \
  --region=REGION \
  --version=RUNTIME_VERSION \
  --properties="dataproc.lakehouse.catalog.CATALOG_NAME=projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,spark.sql.defaultCatalog=CATALOG_NAME"

Ganti kode berikut:

  • PYSPARK_FILE: jalur Cloud Storage gs:// ke file aplikasi PySpark Anda.
  • PROJECT_ID: Project ID Google Cloud Anda.
  • REGION: region untuk workload batch.
  • RUNTIME_VERSION: versi runtime serverless Managed Service untuk Apache Spark, misalnya, 3.0. Untuk versi yang didukung, lihat persyaratan di bagian ini sebelumnya. Peran IAM yang diperlukan bergantung pada versi runtime.
  • CATALOG_NAME: nama untuk katalog Spark lokal, misalnya, federated_catalog. Nilainya bisa sama dengan FEDERATED_CATALOG_NAME.
  • FEDERATED_CATALOG_NAME: ID katalog gabungan yang Anda buat di Sebelum memulai.

Membuat kueri Snowflake Horizon Catalog

Jika Anda mengkueri Snowflake Horizon Catalog, perhatikan hal-hal berikut:

  • Penyimpanan Snowflake: Konfigurasi yang disederhanakan mendukung tabel Snowflake yang disimpan di Amazon S3. Untuk tabel Snowflake yang disimpan di Cloud Storage, gunakan konfigurasi manual dengan io-impl ditetapkan ke org.apache.iceberg.gcp.gcs.GCSFileIO.

  • Kolom STRING Snowflake: Jika Anda mengalami error saat mengkueri kolom STRING Snowflake yang kebijakan serialisasi penyimpanan tabelnya di Snowflake bukan COMPATIBLE, Anda dapat mengubah kebijakan serialisasi penyimpanan menjadi COMPATIBLE di Snowflake atau menonaktifkan vektorisasi Parquet di Spark dengan menambahkan properti berikut ke flag --properties:

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

Dalam file aplikasi PySpark, buat SparkSession tanpa menentukan konfigurasi katalog:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("APP_NAME").getOrCreate()

Konfigurasi manual

Jika Anda tidak menggunakan properti konfigurasi yang disederhanakan, tentukan properti katalog dengan tanda --properties dari perintah gcloud dataproc batches submit. Untuk mengetahui daftar parameter value penyedia penyimpanan, lihat Parameter Konfigurasi Spark.

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.header.X-Iceberg-Access-Delegation=vended-credentials,\
spark.sql.catalog.CATALOG_NAME.io-impl=IO_IMPL,\
spark.sql.catalog.CATALOG_NAME.s3.client-factory-impl=org.apache.iceberg.aws.s3.DefaultS3FileIOAwsClientFactory,\
spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"

Ganti IO_IMPL dengan implementasi FileIO untuk penyimpanan yang berisi tabel Anda:

  • Tabel di Amazon S3: org.apache.iceberg.aws.s3.S3FileIO
  • Tabel di Cloud Storage: org.apache.iceberg.gcp.gcs.GCSFileIO

Properti s3.client-factory-impl hanya berlaku untuk tabel di Amazon S3. Abaikan properti ini untuk tabel Cloud Storage.

Serverless

Buat sesi interaktif serverless Managed Service untuk Apache Spark di notebook melalui API DataprocSparkSession menggunakan properti konfigurasi yang disederhanakan (direkomendasikan) atau dengan menentukan properti katalog secara manual.

Konfigurasi yang disederhanakan menggunakan properti (direkomendasikan)

Di notebook yang telah menginstal paket dataproc-spark-connect, seperti notebook BigQuery Studio atau notebook Vertex AI Workbench, teruskan properti katalog gabungan tanpa awalan dataproc: saat Anda membuat sesi:

from google.cloud.dataproc_spark_connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session

catalog_name = "CATALOG_NAME"

session_config = Session()
session_config.runtime_config.version = 'RUNTIME_VERSION'

spark = DataprocSparkSession.builder.appName("APP_NAME") \
.dataprocSessionConfig(session_config) \
.config(f'dataproc.lakehouse.catalog.{catalog_name}', 'projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME') \
.config('spark.sql.defaultCatalog', catalog_name) \
.getOrCreate()

Ganti kode berikut:

  • CATALOG_NAME: nama untuk katalog Spark lokal, misalnya, federated_catalog. Nilainya bisa sama dengan FEDERATED_CATALOG_NAME.
  • RUNTIME_VERSION: versi runtime serverless Managed Service untuk Apache Spark, misalnya, 3.0. Untuk versi yang didukung, lihat persyaratan sebelumnya di bagian ini. Peran IAM yang diperlukan bergantung pada versi runtime.
  • APP_NAME: nama aplikasi Spark Anda.
  • PROJECT_ID:Google Cloud Project ID Anda.
  • FEDERATED_CATALOG_NAME: ID katalog gabungan yang Anda buat di Sebelum memulai.

Anda juga dapat menyetel properti ini dalam template sesi.

Mengkueri Snowflake Horizon Catalog

Jika Anda mengkueri Snowflake Horizon Catalog, perhatikan hal-hal berikut:

  • Penyimpanan Snowflake: Konfigurasi yang disederhanakan mendukung tabel Snowflake yang disimpan di Amazon S3. Untuk tabel Snowflake yang disimpan di Cloud Storage, gunakan konfigurasi manual dengan io-impl ditetapkan ke org.apache.iceberg.gcp.gcs.GCSFileIO.

  • Kolom STRING Snowflake: Jika Anda mengalami error saat mengkueri kolom STRING Snowflake yang kebijakan serialisasi penyimpanan tabelnya di Snowflake bukan COMPATIBLE, Anda dapat mengubah kebijakan serialisasi penyimpanan menjadi COMPATIBLE di Snowflake atau menonaktifkan vektorisasi Parquet di Spark dengan menambahkan panggilan .config() berikut ke builder sesi:

    .config('spark.sql.iceberg.vectorization.enabled', 'false') \
    .config(f'spark.sql.catalog.{catalog_name}.table-override.read.parquet.vectorization.enabled', 'false')
        

Konfigurasi manual

Jika Anda tidak menggunakan properti konfigurasi yang disederhanakan, tentukan properti katalog saat membuat sesi. Untuk mengetahui daftar nilai parameter penyedia penyimpanan, lihat Parameter Konfigurasi Spark.

from google.cloud.dataproc_spark_connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session

catalog_name = "CATALOG_NAME"

session_config = Session()
session_config.runtime_config.version = 'RUNTIME_VERSION'

spark = DataprocSparkSession.builder.appName("APP_NAME") \
.dataprocSessionConfig(session_config) \
.config('spark.sql.defaultCatalog', catalog_name) \
.config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
.config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
.config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1/restcatalog') \
.config(f'spark.sql.catalog.{catalog_name}.warehouse', 'bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME') \
.config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
.config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \
.config(f'spark.sql.catalog.{catalog_name}.header.X-Iceberg-Access-Delegation', 'vended-credentials') \
.config(f'spark.sql.catalog.{catalog_name}.io-impl', 'IO_IMPL') \
.config(f'spark.sql.catalog.{catalog_name}.s3.client-factory-impl', 'org.apache.iceberg.aws.s3.DefaultS3FileIOAwsClientFactory') \
.config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
.getOrCreate()

Ganti RUNTIME_VERSION seperti yang dijelaskan dalam contoh konfigurasi yang disederhanakan sebelumnya di tab ini.

Ganti IO_IMPL dengan implementasi FileIO untuk penyimpanan yang berisi tabel Anda:

  • Tabel di Amazon S3: org.apache.iceberg.aws.s3.S3FileIO
  • Tabel di Cloud Storage: org.apache.iceberg.gcp.gcs.GCSFileIO

Properti s3.client-factory-impl hanya berlaku untuk tabel di Amazon S3. Hapus baris ini untuk tabel Cloud Storage.

Membuat kueri tabel gabungan

Setelah mengonfigurasi sesi Spark, Anda dapat membuat kueri tabel di katalog gabungan menggunakan PySpark atau Spark SQL.

  1. Baca tabel gabungan menggunakan PySpark DataFrame API:

    df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME")
    df.show(10, truncate=False)

    Ganti kode berikut:

    • CATALOG_NAME: nama katalog Spark lokal. Jika Anda menyetel spark.sql.defaultCatalog ke CATALOG_NAME, Anda dapat menghilangkan awalan ini.
    • NAMESPACE_NAME: namespace (database atau skema) dalam katalog gabungan.
    • TABLE_NAME: nama tabel dalam katalog gabungan.
  2. Buat kueri tabel gabungan menggunakan Spark SQL:

    spark.sql("""
        SELECT *
        FROM CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME
        LIMIT 10
    """).show()

Menggabungkan atau mewujudkan data di seluruh katalog gabungan dan lokal

Katalog gabungan bersifat hanya baca. Untuk menggabungkan data lintas cloud jarak jauh dengan tabel lokal atau mewujudkan hasil kueri gabungan ke dalam Cloud Storage, lampirkan katalog gabungan dan katalog baca-tulis di katalog runtime Lakehouse menggunakan properti dataproc.lakehouse.catalog. yang dipisahkan koma:

Cluster

Contoh cluster Managed Service untuk Apache Spark:

--properties="dataproc:dataproc.lakehouse.catalog.FEDERATED_SPARK_CATALOG=projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,dataproc:dataproc.lakehouse.catalog.LOCAL_SPARK_CATALOG=projects/PROJECT_ID/catalogs/LOCAL_CATALOG_ID,spark:spark.sql.defaultCatalog=LOCAL_SPARK_CATALOG"

Serverless

Contoh workload batch serverless Managed Service untuk Apache Spark:

--properties="dataproc.lakehouse.catalog.FEDERATED_SPARK_CATALOG=projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,dataproc.lakehouse.catalog.LOCAL_SPARK_CATALOG=projects/PROJECT_ID/catalogs/LOCAL_CATALOG_ID,spark.sql.defaultCatalog=LOCAL_SPARK_CATALOG"

Serverless

Contoh sesi interaktif serverless Managed Service untuk Apache Spark:

from google.cloud.dataproc_spark_connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session

session_config = Session()
session_config.runtime_config.version = 'RUNTIME_VERSION'

spark = DataprocSparkSession.builder.appName("APP_NAME") \
  .dataprocSessionConfig(session_config) \
  .config('dataproc.lakehouse.catalog.FEDERATED_SPARK_CATALOG', 'projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME') \
  .config('dataproc.lakehouse.catalog.LOCAL_SPARK_CATALOG', 'projects/PROJECT_ID/catalogs/LOCAL_CATALOG_ID') \
  .config('spark.sql.defaultCatalog', 'LOCAL_SPARK_CATALOG') \
  .getOrCreate()

Ganti RUNTIME_VERSION seperti yang dijelaskan dalam contoh sesi interaktif sebelumnya di halaman ini.

Setelah menetapkan properti ini, Anda dapat mengkueri katalog gabungan dan menulis hasilnya ke dalam tabel di katalog runtime Lakehouse lokal Anda.

Akun utama yang menjalankan workload Anda adalah akun layanan untuk cluster, runtime serverless 2.3 dan yang lebih lama, serta runtime serverless 3.0 dan yang lebih baru dengan kredensial akun layanan. Untuk runtime serverless 3.0 dan yang lebih baru dengan kredensial pengguna akhir (default), akun utama adalah akun pengguna Anda.

Untuk memastikan bahwa akun utama yang menjalankan workload Anda memiliki izin yang diperlukan untuk menulis data tabel ke katalog lokal, minta administrator Anda untuk memberikan peran IAM berikut kepada akun utama yang menjalankan workload Anda:

  • Menulis data tabel dalam mode penyediaan kredensial: BigLake Editor (roles/biglake.editor) pada project yang berisi katalog lokal
  • Menulis data tabel dalam mode non-credential vending:
    • BigLake Editor (roles/biglake.editor) pada project yang berisi katalog lokal
    • Storage Object User (roles/storage.objectUser) di semua bucket Cloud Storage yang terkait dengan katalog lokal

Contoh berikut membuat tabel di katalog lokal Anda dari tabel gabungan:

spark.sql("""
    CREATE TABLE IF NOT EXISTS LOCAL_SPARK_CATALOG.LOCAL_NAMESPACE.materialized_table
    USING iceberg
    AS SELECT *
    FROM FEDERATED_SPARK_CATALOG.REMOTE_NAMESPACE.REMOTE_TABLE
""")

Langkah berikutnya