Menjalankan kueri pada tabel Iceberg dengan katalog runtime Lakehouse, Spark, dan BigQuery
Pelajari cara menggunakan Lakehouse untuk Apache Iceberg dengan membuat katalog runtime Lakehouse dengan katalog multi-bucket. Konfigurasi ini membuat lapisan metadata terkelola yang menghubungkan mesin pemrosesan open source dengan Google Cloud.
Kemudian, Anda menjalankan tugas PySpark Managed Service untuk Apache Spark untuk membuat tabel Lakehouse Iceberg REST catalog menggunakan endpoint Apache Iceberg REST catalog.
Setelah itu, Anda dapat membuat kueri tabel yang dihasilkan langsung dari konsol Google Cloud
di BigQuery menggunakan sintaksis project.catalog.namespace.table.
Sebelum memulai
- 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. 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.-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. 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.
Memberikan peran IAM
Agar tugas PySpark Managed Service untuk Apache Spark dan katalog runtime Lakehouse dapat berfungsi dengan Cloud Storage dan BigQuery, berikan peran yang diperlukan kepada akun utama yang sesuai:
Di konsol Google Cloud , klik Activate Cloud Shell.
Klik Otorisasi.
Berikan peran Dataproc Worker ke akun layanan default Compute Engine project, yang digunakan Managed Service untuk Apache Spark secara default seperti yang dijelaskan dalam Akun layanan Managed Service untuk Apache Spark.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/dataproc.worker"Berikan peran Service Usage Consumer ke akun layanan default Compute Engine project.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageConsumer"Berikan peran BigLake Editor ke akun layanan default Compute Engine project.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/biglake.editor"Berikan peran BigQuery Data Editor ke akun layanan default Compute Engine project.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/bigquery.dataEditor"Ganti kode berikut:
PROJECT_ID: Project ID Google Cloud Anda
Membuat katalog runtime Lakehouse
Buat katalog runtime Lakehouse untuk mengelola metadata tabel Iceberg Anda.
Di Cloud Shell, jalankan perintah berikut untuk membuat multi-bucket (
bl://) dengan penyediaan kredensial:gcloud biglake iceberg catalogs create LAKEHOUSE_CATALOG_ID \ --project=PROJECT_ID \ --catalog-type=biglake \ --default-location=gs://BUCKET_NAME \ --credential-mode=vended-credentials
Ganti kode berikut:
LAKEHOUSE_CATALOG_ID: nama unik untuk katalog Anda.PROJECT_ID: Google Cloud Project ID Anda.BUCKET_NAME: nama bucket Cloud Storage yang berisi file aplikasi PySpark Anda.
Berikan izin pada bucket ke akun layanan katalog:
Di konsol Google Cloud , buka Lakehouse.
Klik nama katalog yang baru saja Anda buat (LAKEHOUSE_CATALOG_ID).
Di bagian Metode autentikasi, klik Setel izin bucket.
Pada dialog, klik Konfirmasi. Tindakan ini memverifikasi bahwa akun layanan katalog Anda memiliki peran Pengguna Objek Penyimpanan di bucket Anda.
Membuat dan menjalankan tugas PySpark
Untuk membuat dan membuat kueri tabel Iceberg, pertama-tama buat tugas PySpark dengan pernyataan Spark SQL yang diperlukan. Kemudian, jalankan tugas dengan Managed Service untuk Apache Spark.
Buat skrip PySpark dengan namespace dan tabel
Di editor teks, buat file bernama quickstart.py dengan konten
berikut.
Skrip PySpark ini menginisialisasi sesi Spark untuk melakukan beberapa operasi pada katalog Iceberg. Skrip pertama-tama membuat namespace, jika belum ada. Kemudian, perintah ini membuat tabel Iceberg bernama quickstart_table dengan skema dasar. Setelah tabel dibuat, skrip akan menyisipkan tiga baris data.
Terakhir, kueri tabel untuk mengambil semua data yang dimasukkan.
Nilai ini kemudian digunakan pada langkah berikutnya saat Anda menjalankan tugas gcloud dataproc
batches submit pyspark.
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("quickstart").getOrCreate()
# Create a namespace (dataset) if it doesn't exist
spark.sql("CREATE NAMESPACE IF NOT EXISTS `quickstart_catalog`.quickstart_namespace")
# Create the table
spark.sql("""
CREATE OR REPLACE TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table (
id INT,
name STRING
)
USING iceberg
""")
# Insert data into the table
spark.sql("""
INSERT INTO `quickstart_catalog`.quickstart_namespace.quickstart_table
VALUES (1, 'one'), (2, 'two'), (3, 'three')
""")
Upload skrip ke bucket Cloud Storage Anda
Setelah membuat skrip quickstart.py, upload skrip tersebut ke bucket Cloud Storage.
Di konsol Google Cloud , buka bucket Cloud Storage.
Klik nama bucket Anda.
Di tab Objects, klik Upload > Upload files.
Di file browser, pilih file
quickstart.py, lalu klik Open.
Jalankan tugas PySpark
Setelah mengupload skrip quickstart.py, eksekusi sebagai tugas batch Managed Service untuk Apache Spark.
Di Cloud Shell, jalankan tugas batch Managed Service untuk Apache Spark berikut menggunakan skrip
quickstart.py.gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \ --project=PROJECT_ID \ --region=REGION \ --version=2.2 \ --properties="\ spark.sql.defaultCatalog=quickstart_catalog,\ spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.quickstart_catalog.type=rest,\ spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\ spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"
Ganti kode berikut:
BUCKET_NAME: nama bucket Cloud Storage yang berisi file aplikasi PySpark Anda.LAKEHOUSE_CATALOG_ID: nama katalog BigLake. Nama ini akan digunakan nanti saat Anda membuat kueri katalog di BigQuery, menggunakan sintaksis P.C.N.T. Contoh,my-project.biglake-catalog.quickstart_namespace.quickstart_table.PROJECT_ID: Google Cloud Project ID Anda.REGION: region untuk menjalankan workload batch Managed Service untuk Apache Spark.
Setelah tugas selesai, output yang ditampilkan akan mirip dengan berikut ini:
Batch [cb9d84e9489d408baca4f9e7ab4c64ff] finished. metadata: '@type': type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata batch: projects/your-project/locations/us-central1/batches/cb9d84e9489d408baca4f9e7ab4c64ff batchUuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 createTime: '2026-01-24T00:10:50.224097Z' description: Batch labels: goog-dataproc-batch-id: cb9d84e9489d408baca4f9e7ab4c64ff goog-dataproc-batch-uuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 goog-dataproc-drz-resource-uuid: batch-54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 goog-dataproc-location: us-central1 operationType: BATCH name: projects/your-project/regions/us-central1/operations/32287926-5f61-3572-b54a-fbad8940d6ef
Menjalankan kueri pada tabel dari BigQuery
Di konsol Google Cloud , buka BigQuery.
Di editor kueri, masukkan pernyataan berikut. Kueri menggunakan sintaksis
project.catalog.namespace.table.SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.quickstart_namespace.quickstart_table`;Ganti:
PROJECT_ID: Google Cloud Project ID Anda.LAKEHOUSE_CATALOG_ID: ID katalog yang akan digunakan dalam kueri BigQuery.
Klik Run.
Hasil kueri menampilkan data yang Anda sisipkan dengan tugas PySpark.
Pembersihan
Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan pada halaman ini, ikuti langkah-langkah berikut.
Perbarui
quickstart.pyuntuk menghapus namespace (set data) dan tabel:from pyspark.sql import SparkSession spark = SparkSession.builder.appName("quickstart").getOrCreate() # Delete the table first, then the namespace (dataset) spark.sql("DROP TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table") spark.sql("DROP NAMESPACE `quickstart_catalog`.quickstart_namespace")Upload file tersebut ke bucket Cloud Storage:
Di konsol Google Cloud , buka bucket Cloud Storage.
Klik nama bucket Anda.
Di tab Objects, klik Upload > Upload files.
Di file browser, pilih file
quickstart.py, lalu klik Open.
Di Cloud Shell, jalankan tugas batch Managed Service untuk Apache Spark lain menggunakan skrip
quickstart.pyyang telah diupdate.gcloud dataproc batches submit pyspark gs://BUCKET_NAME/quickstart.py \ --project=PROJECT_ID \ --region=REGION \ --version=2.2 \ --properties="\ spark.sql.defaultCatalog=quickstart_catalog,\ spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.quickstart_catalog.type=rest,\ spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.quickstart_catalog.warehouse=bl://projects/PROJECT_ID/catalogs/LAKEHOUSE_CATALOG_ID,\ spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"
Ganti kode berikut:
BUCKET_NAME: nama bucket Cloud Storage yang berisi file aplikasi PySpark Anda.LAKEHOUSE_CATALOG_ID: nama katalog BigLake.PROJECT_ID: Google Cloud Project ID Anda.REGION: region untuk menjalankan workload batch Managed Service untuk Apache Spark.
Buka Lakehouse.
Pilih katalog
LAKEHOUSE_CATALOG_IDAnda, lalu klik Hapus.Buka Cloud Storage Buckets.
Pilih bucket Anda, lalu klik Hapus.
Langkah berikutnya
- Pelajari cara mengelola katalog Lakehouse.
- Pelajari tabel Apache Iceberg yang didukung oleh katalog runtime Lakehouse.