Membuat tabel Apache Iceberg dengan metadata di BigQuery Metastore

Dokumen ini menunjukkan cara menjalankan workload batch Dataproc Serverless untuk Spark SQL dan PySpark untuk membuat tabel Apache Iceberg dengan metadata yang disimpan di BigQuery Metastore. Untuk informasi tentang cara lain menjalankan kode Spark, lihat Menjalankan kode PySpark di notebook BigQuery dan Menjalankan beban kerja Apache Spark

Sebelum memulai

Jika Anda belum melakukannya, buat project Google Cloud dan bucket Cloud Storage.

  1. Menyiapkan project

    1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
    2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    3. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

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

      Go to project selector

    5. Enable the Dataproc, BigQuery, and Cloud Storage APIs.

      Enable the APIs

  2. Buat bucket Cloud Storage di project Anda.

    1. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets page

    2. Click Create bucket.
    3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
      • For Name your bucket, enter a name that meets the bucket naming requirements.
      • For Choose where to store your data, do the following:
        • Select a Location type option.
        • Select a Location option.
      • For Choose a default storage class for your data, select a storage class.
      • For Choose how to control access to objects, select an Access control option.
      • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
    4. Click Create.

  3. Berikan peran BigQuery Data Editor (roles/bigquery.dataEditor) ke akun layanan default Compute Engine, PROJECT_NUMBER-compute@developer.gserviceaccount.com. Untuk mengetahui petunjuknya, lihat Memberikan satu peran.

    Contoh Google Cloud CLI:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member PROJECT_NUMBER-compute@developer.gserviceaccount.com \
    --role roles/bigquery.dataEditor
    

    Catatan:

    • PROJECT_ID dan PROJECT_NUMBER tercantum di bagian Project info di Dasbor konsol Google Cloud.
  4. Pastikan subnet VPC regional tempat Anda akan menjalankan workload batch Dataproc Serverless telah mengaktifkan Akses Google Pribadi. Untuk mengetahui informasi selengkapnya, lihat Membuat tabel Iceberg.

Pemetaan resource OSS ke resource BigQuery

Perhatikan pemetaan berikut antara istilah resource open source dan resource BigQuery:

Referensi OSS Resource BigQuery
Namespace, Database Set data
Tabel yang Dipartisi atau Tidak Dipartisi Tabel
Lihat Lihat

Membuat tabel Iceberg

Bagian ini menunjukkan cara membuat tabel Iceberg dengan metadata di BigQuery Metastore menggunakan workload batch Spark SQL dan PySpark Dataproc Serverless.

Spark SQL

Menjalankan beban kerja Spark SQL untuk membuat tabel Iceberg

Langkah-langkah berikut menunjukkan cara menjalankan beban kerja batch SQL Spark Serverless Dataproc untuk membuat tabel Iceberg dengan metadata tabel yang disimpan di BigQuery Metastore.

  1. Salin perintah Spark SQL berikut secara lokal atau di Cloud Shell ke dalam file iceberg-table.sql.

    USE CATALOG_NAME;
    CREATE NAMESPACE IF NOT EXISTS example_namespace;
    DROP TABLE IF EXISTS example_table;
    CREATE TABLE example_table (id int, data string) USING ICEBERG LOCATION 'gs://BUCKET/WAREHOUSE_FOLDER';
    INSERT INTO example_table VALUES (1, 'first row');
    ALTER TABLE example_table ADD COLUMNS (newDoubleCol double);
    DESCRIBE TABLE example_table;
    

    Ganti kode berikut:

    • CATALOG_NAME: Nama katalog Iceberg.
    • BUCKET dan WAREHOUSE_FOLDER: Bucket dan folder Cloud Storage yang digunakan sebagai direktori penyimpanan Iceberg.
  2. Jalankan perintah berikut secara lokal atau di Cloud Shell dari direktori yang berisi iceberg-table.sql untuk mengirimkan beban kerja Spark SQL.

    gcloud dataproc batches submit spark-sql iceberg-table.sql \
        --project=PROJECT_ID \
        --region=REGION \
        --deps-bucket=BUCKET_NAME \
        --version=2.2 \
        --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
        --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER"
      

    Catatan:

    • PROJECT_ID: project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud.
    • REGION: Region Compute Engine yang tersedia untuk menjalankan beban kerja.
    • BUCKET_NAME: Nama bucket Cloud Storage Anda. Spark mengupload dependensi workload ke folder /dependencies di bucket ini sebelum menjalankan workload batch. WAREHOUSE_FOLDER terletak di bucket ini.
    • SUBNET_NAME: Nama subnet VPC di REGION yang telah mengaktifkan Akses Google Pribadi dan memenuhi persyaratan subnet sesi lainnya.
    • LOCATION: Lokasi BigQuery yang didukung. Lokasi defaultnya adalah "US".
    • --version: Runtime Dataproc Serverless versi 2.2 atau yang lebih baru.
    • --properties Properti katalog.
  3. Melihat metadata tabel di BigQuery

    1. Di Konsol Google Cloud, buka halaman BigQuery.

      Buka BigQuery Studio

    2. Melihat metadata tabel Iceberg.

PySpark

Langkah-langkah berikut menunjukkan cara menjalankan workload batch PySpark Dataproc Serverless untuk membuat tabel Iceberg dengan metadata tabel yang disimpan di BigQuery Metastore.

  1. Salin kode PySpark berikut secara lokal atau di Cloud Shell ke dalam file iceberg-table.py.
    catalog = "CATALOG_NAME"
    namespace = "NAMESPACE"
    
    spark.sql(f"USE `{catalog}`;")
    spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;")
    spark.sql(f"USE `{namespace}`;")
    
    # Create table and display schema
    spark.sql("DROP TABLE IF EXISTS example_iceberg_table")
    spark.sql("CREATE TABLE example_iceberg_table (id int, data string) USING ICEBERG") 
    spark.sql("DESCRIBE example_iceberg_table;")
    
    # Insert table data.
    spark.sql("INSERT INTO example_iceberg_table VALUES (1, 'first row');")
    
    # Alter table, then display schema. 
    spark.sql("ALTER TABLE example_iceberg_table ADD COLUMNS (newDoubleCol double);")
    spark.sql("DESCRIBE example_iceberg_table;")

    Ganti kode berikut:

    • CATALOG_NAME dan NAMESPACE: Nama katalog dan namespace Iceberg digabungkan untuk mengidentifikasi tabel Iceberg (catalog.namespace.table_name).
  2. Jalankan perintah berikut secara lokal atau di Cloud Shell dari direktori yang berisi iceberg-table.py untuk mengirimkan beban kerja PySpark.
    gcloud dataproc batches submit pyspark iceberg-table.py \
        --project=PROJECT_ID \
        --region=REGION \
        --deps-bucket=BUCKET_NAME \
        --version=2.2 \
        --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
        --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER"
        

    Catatan:

    • PROJECT_ID: project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud.
    • REGION: Region Compute Engine yang tersedia untuk menjalankan beban kerja.
    • BUCKET_NAME: Nama bucket Cloud Storage Anda. Spark mengupload dependensi workload ke folder /dependencies di bucket ini sebelum menjalankan workload batch.
    • SUBNET_NAME: Nama subnet VPC di REGION yang telah mengaktifkan Akses Google Pribadi dan memenuhi persyaratan subnet sesi lainnya.
    • --version: Runtime Dataproc Serverless versi 2.2 atau yang lebih baru.
    • LOCATION: Lokasi BigQuery yang didukung. Lokasi defaultnya adalah "US".
    • BUCKET dan WAREHOUSE_FOLDER: Bucket dan folder Cloud Storage yang digunakan sebagai direktori warehouse Iceberg.
    • --properties: Properti katalog.
  3. Lihat skema tabel di BigQuery.
    1. Di Konsol Google Cloud, buka halaman BigQuery. Buka BigQuery Studio
    2. Melihat metadata tabel Iceberg.