Membuat tabel Apache Iceberg dengan metadata di BigQuery Metastore

Dokumen ini menunjukkan cara membuat tabel Apache Iceberg dengan metadata di BigQuery Metastore menggunakan layanan Tugas Dataproc, Spark SQL CLI, atau antarmuka web Zeppelin yang berjalan di cluster Dataproc.

Sebelum memulai

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

  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. Make sure that billing is enabled for your Google Cloud project.

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

      Enable the APIs

    5. Install the Google Cloud CLI.
    6. To initialize the gcloud CLI, run the following command:

      gcloud init
    7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

      Go to project selector

    8. Make sure that billing is enabled for your Google Cloud project.

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

      Enable the APIs

    10. Install the Google Cloud CLI.
    11. To initialize the gcloud CLI, run the following command:

      gcloud init

  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. Buat cluster Dataproc Untuk menghemat resource dan biaya, Anda dapat membuat cluster Dataproc satu node untuk menjalankan contoh yang disajikan dalam dokumen ini.

    • Subnet di region tempat cluster dibuat harus mengaktifkan Akses Google Pribadi (PGA).

      .

    • Jika ingin menjalankan contoh antarmuka web Zeppelin dalam panduan ini, Anda harus menggunakan atau membuat cluster Dataproc dengan komponen opsional Zeppelin diaktifkan.

  4. Berikan peran ke akun layanan kustom (jika diperlukan): Secara default, VM cluster Dataproc menggunakan akun layanan default Compute Engine untuk berinteraksi dengan Dataproc. Jika Anda ingin menentukan akun layanan kustom saat membuat cluster, akun tersebut harus memiliki peran Dataproc Worker (roles/dataproc.worker) atau peran kustom dengan izin peran Pekerja yang diperlukan.

Pemetaan database OSS ke set data BigQuery

Perhatikan pemetaan berikut antara database open source dan istilah set data BigQuery:

Database OSS BigQuery dataset
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 dengan mengirimkan kode Spark SQL ke layanan Dataproc, Spark SQL CLI, dan antarmuka web komponen Zeppelin, yang berjalan di cluster Dataproc.

Tugas Dataproc

Anda dapat mengirimkan tugas ke layanan Dataproc dengan mengirimkan tugas ke cluster Dataproc menggunakan konsol Google Cloud atau Google Cloud CLI, atau melalui permintaan REST HTTP atau panggilan gRPC terprogram Library Klien Cloud Dataproc ke Dataproc Jobs API.

Contoh di bagian ini menunjukkan cara mengirimkan tugas Dataproc Spark SQL ke layanan Dataproc untuk membuat tabel Iceberg dengan metadata di BigQuery menggunakan gcloud CLI, konsol Google Cloud, atau Dataproc REST API.

Menyiapkan file tugas

Lakukan langkah-langkah berikut untuk membuat file tugas Spark SQL. File ini berisi perintah Spark SQL untuk membuat dan memperbarui tabel Iceberg.

  1. Di jendela terminal lokal atau di Cloud Shell, gunakan editor teks, seperti vi atau nano, untuk menyalin perintah berikut ke dalam file iceberg-table.sql, lalu simpan file di direktori saat ini.

    USE CATALOG_NAME;
    CREATE NAMESPACE IF NOT EXISTS example_namespace;
    USE 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 untuk warehouse Iceberg.
  2. Gunakan alat gsutil untuk menyalin iceberg-table.sql lokal ke bucket Anda di Cloud Storage.

    gsutil cp iceberg-table.sql gs://BUCKET/
    

Selanjutnya, download dan salin file JAR iceberg-spark-runtime-3.5_2.12-1.5.2 ke Cloud Storage.

  1. Di jendela terminal lokal atau di Cloud Shell, jalankan perintah curl berikut untuk mendownload file JAR iceberg-spark-runtime-3.5_2.12-1.5.2 ke direktori saat ini.

    curl -o iceberg-spark-runtime-3.5_2.12-1.5.2.jar https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar
    
  2. Gunakan alat gsutil untuk menyalin file JAR iceberg-spark-runtime-3.5_2.12-1.5.2 lokal dari direktori saat ini ke bucket Anda di Cloud Storage.

    gsutil cp iceberg-spark-runtime-3.5_2.12-1.5.2.jar gs://BUCKET/
    

Mengirimkan tugas Spark SQL

Pilih tab untuk mengikuti petunjuk guna mengirimkan tugas Spark SQL ke layanan Dataproc menggunakan gcloud CLI, Konsol Google Cloud, atau Dataproc REST API.

gcloud

  1. Jalankan perintah gcloud dataproc jobs submit spark-sql berikut secara lokal di jendela terminal lokal atau di Cloud Shell untuk mengirimkan tugas Spark SQL guna membuat tabel Iceberg.

    gcloud dataproc jobs submit spark-sql \
        --project=PROJECT_ID \
        --cluster=CLUSTER_NAME \
        --region=REGION \
        --jars="gs://BUCKET/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar" \
        --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" \
        -f="gs://BUCKETiceberg-table.sql"
    

    Catatan:

    • PROJECT_ID: project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud.
    • CLUSTER_NAME: Nama cluster Dataproc Anda.
    • REGION: Region Compute Engine tempat cluster Anda berada.
    • CATALOG_NAME: Nama katalog Iceberg.
    • BUCKET dan WAREHOUSE_FOLDER: Bucket dan folder Cloud Storage yang digunakan untuk warehouse Iceberg.
    • LOCATION: Lokasi BigQuery yang didukung. Lokasi defaultnya adalah "US".
    • --jars: Jar yang tercantum diperlukan untuk membuat metadata tabel di BigQuery Metastore.
    • --properties: Properti katalog.
    • -f: File tugas iceberg-table.sql yang Anda salin ke bucket di Cloud Storage.
  2. Lihat deskripsi tabel di output terminal saat tugas selesai.

    Time taken: 2.194 seconds
    id                      int
    data                    string
    newDoubleCol            double
    Time taken: 1.479 seconds, Fetched 3 row(s)
    Job JOB_ID finished successfully.
    
  3. Untuk melihat metadata tabel di BigQuery

    1. Di Konsol Google Cloud, buka halaman BigQuery.

      Buka BigQuery Studio

    2. Melihat metadata tabel Iceberg.

Konsol

Lakukan langkah-langkah berikut untuk menggunakan konsol Google Cloud guna mengirimkan tugas Spark SQL ke layanan Dataproc untuk membuat tabel Iceberg dengan metadata di BigQuery Metastore.

  1. Di konsol Google Cloud, buka Kirim tugas Dataproc.

    Buka halaman Kirim tugas, lalu lengkapi kolom berikut:

    • ID Tugas: Terima ID yang disarankan atau masukkan ID Anda sendiri.
    • Region: Pilih region tempat cluster Anda berada.
    • Cluster: Pilih cluster Anda.
    • Jenis tugas: Pilih SparkSql.
    • Query source type: Pilih Query file.
    • File kueri: Sisipkan gs://BUCKET/iceberg-table.sql
    • File jar: Masukkan kode berikut:
      gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar
      
    • Properties: Klik Add Property lima kali untuk membuat daftar lima kolom input key value, lalu salin pasangan Key dan Value berikut untuk menentukan lima properti.
      # Kunci Nilai
      1.
      spark.sql.catalog.CATALOG_NAME
      
      org.apache.iceberg.spark.SparkCatalog
      
      2.
      spark.sql.catalog.CATALOG_NAME.catalog-impl
      
      org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog
      
      3.
      spark.sql.catalog.CATALOG_NAME.gcp_project
      
      PROJECT_ID
      
      4.
      spark.sql.catalog.CATALOG_NAME.gcp_location
      
      LOCATION
      
      5.
      spark.sql.catalog.CATALOG_NAME.warehouse
      
      gs://BUCKET/WAREHOUSE_FOLDER
      

    Catatan:

    • CATALOG_NAME: Nama katalog Iceberg.
    • PROJECT_ID: project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud. region tempat cluster Anda berada.
    • LOCATION: Lokasi BigQuery yang didukung. Lokasi defaultnya adalah "US".
    • BUCKET dan WAREHOUSE_FOLDER: Bucket dan folder Cloud Storage yang digunakan untuk warehouse Iceberg.
  2. Klik Kirim.

  3. Untuk memantau progres tugas dan melihat output tugas, buka halaman Jobs Dataproc di konsol Google Cloud, lalu klik Job ID untuk membuka halaman Job details.

  4. Untuk melihat metadata tabel di BigQuery

    1. Di Konsol Google Cloud, buka halaman BigQuery.

      Buka BigQuery Studio

    2. Melihat metadata tabel Iceberg.

REST

Anda dapat menggunakan API jobs.submit Dataproc untuk mengirimkan tugas Spark SQL ke layanan Dataproc guna membuat tabel Iceberg dengan metadata di BigQuery Metastore.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud.
  • CLUSTER_NAME: Nama cluster Dataproc Anda.
  • REGION: Region Compute Engine tempat cluster Anda berada.
  • CATALOG_NAME: Nama katalog Iceberg.
  • BUCKET dan WAREHOUSE_FOLDER: Bucket dan folder Cloud Storage yang digunakan untuk warehouse Iceberg.
  • LOCATION: Lokasi BigQuery yang didukung. Lokasi defaultnya adalah "US".
  • jarFileUris: Jar yang tercantum diperlukan untuk membuat metadata tabel di BigQuery Metastore.
  • properties: Properti katalog.
  • queryFileUri: File tugas iceberg-table.sql yang Anda salin ke bucket di Cloud Storage.

Metode HTTP dan URL:

POST https://dataproc.googleapis.com/v1/projects/PROJECT_ID/regions/REGION/jobs:submit

Meminta isi JSON:

{
  "projectId": "PROJECT_ID",
  "job": {
    "placement": {
      "clusterName": "CLUSTER_NAME"
    },
    "statusHistory": [],
    "reference": {
      "jobId": "",
      "projectId": "PROJECT_ID"
    },
    "sparkSqlJob": {
      "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"
      },
      "jarFileUris": [
        "gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar"
      ],
      "scriptVariables": {},
      "queryFileUri": "gs://BUCKET/iceberg-table.sql"
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "reference": {
    "projectId": "PROJECT_ID",
    "jobId": "..."
  },
  "placement": {
    "clusterName": "CLUSTER_NAME",
    "clusterUuid": "..."
  },
  "status": {
    "state": "PENDING",
    "stateStartTime": "..."
  },
  "submittedBy": "USER",
  "sparkSqlJob": {
    "queryFileUri": "gs://BUCKET/iceberg-table.sql",
    "properties": {
      "spark.sql.catalog.USER_catalog": "org.apache.iceberg.spark.SparkCatalog",
      "spark.sql.catalog.USER_catalog.catalog-impl": "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog",
      "spark.sql.catalog.USER_catalog.gcp_project": "PROJECT_ID",
      "spark.sql.catalog.USER_catalog.gcp_location": "LOCATION",
      "spark.sql.catalog.USER_catalog.warehouse": "gs://BUCKET/WAREHOUSE_FOLDER"
    },
    "jarFileUris": [
      "gs://BUCKET/iceberg-spark-runtime-3.5_2.12-1.5.2.jar",
      "gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar"
    ]
  },
  "driverControlFilesUri": "gs://dataproc-...",
  "driverOutputResourceUri": "gs://dataproc-.../driveroutput",
  "jobUuid": "...",
  "region": "REGION"
}

Untuk memantau progres tugas dan melihat output tugas, buka halaman Jobs Dataproc di konsol Google Cloud, lalu klik Job ID untuk membuka halaman Job details.

Untuk melihat metadata tabel di BigQuery

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery Studio

  2. Melihat metadata tabel Iceberg.

Spark SQL CLI

Langkah-langkah berikut menunjukkan cara membuat tabel Iceberg dengan metadata tabel yang disimpan di BigQuery Metastore menggunakan Spark SQL CLI yang berjalan di node master cluster Dataproc.

  1. Gunakan SSH untuk terhubung ke node master cluster Dataproc Anda.

  2. Di terminal sesi SSH, gunakan editor teks vi atau nano untuk menyalin perintah berikut ke dalam file iceberg-table.sql.

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

    Ganti kode berikut:

    • CATALOG_NAME: Nama katalog Iceberg.
    • BUCKET dan WAREHOUSE_FOLDER: Bucket dan folder Cloud Storage yang digunakan untuk warehouse Iceberg.
  3. Di terminal sesi SSH, jalankan perintah spark-sql berikut untuk membuat tabel gunung es.

    spark-sql \
    --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.5.2 \
    --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar \
    --conf spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog \
    --conf spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog \
    --conf spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID \
    --conf spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION \
    --conf spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER \
    -f iceberg-table.sql 
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud.
    • LOCATION: Lokasi BigQuery yang didukung. Lokasi defaultnya adalah "US".
  4. Melihat metadata tabel di BigQuery

    1. Di Konsol Google Cloud, buka halaman BigQuery.

      Buka BigQuery Studio

    2. Melihat metadata tabel Iceberg.

Antarmuka web Zeppelin

Langkah-langkah berikut menunjukkan cara membuat tabel Iceberg dengan metadata tabel yang disimpan di BigQuery Metastore menggunakan antarmuka web Zeppelin yang berjalan di node master cluster Dataproc .

  1. Di konsol Google Cloud, buka halaman Clusters Dataproc.

    Buka halaman Cluster Dataproc

  2. Pilih nama cluster untuk membuka halaman Cluster details.

  3. Klik tab Web Interfaces untuk menampilkan daftar link Component Gateway ke antarmuka web komponen default dan opsional yang diinstal di cluster.

  4. Klik link Zeppelin untuk membuka antarmuka web Zeppelin.

  5. Di antarmuka web Zeppelin, klik menu anonymous, lalu klik Interpreter untuk membuka halaman Interpreters.

  6. Tambahkan dua jar ke penafsir Zeppelin Spark, sebagai berikut:

    1. Ketik "Spark" di kotak Search interpreters untuk men-scroll ke bagian interpretor Spark.
    2. Klik edit.
    3. Tempelkan kode berikut di kolom spark.jars:

      https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-spark-runtime-3.5_2.12/1.5.2/iceberg-spark-runtime-3.5_2.12-1.5.2.jar,gs://spark-lib/bigquery/iceberg-bigquery-catalog-1.5.2-1.0.0-beta.jar

    4. Klik Simpan di bagian bawah penafsir Spark, lalu klik Oke untuk mengupdate penafsir dan memulai ulang penafsir Spark dengan setelan baru.

  7. Dari menu notebook Zeppelin, klik Buat catatan baru.

  8. Pada dialog Create new note, masukkan nama untuk notebook, dan terima penafsir spark default. Klik Create untuk membuka Notebook.

  9. Salin kode PySpark berikut ke dalam notebook Zeppelin Anda setelah mengisi variabel.

    %pyspark
    from pyspark.sql import SparkSession
    project_id = "PROJECT_ID" catalog = "CATALOG_NAME" namespace = "NAMESPACE" location = "LOCATION" warehouse_dir = "gs://BUCKET/WAREHOUSE_DIRECTORY"
    spark = SparkSession.builder \ .appName("BigQuery Metastore Iceberg") \ .config(f"spark.sql.catalog.{catalog}", "org.apache.iceberg.spark.SparkCatalog") \ .config(f"spark.sql.catalog.{catalog}.catalog-impl", "org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog") \ .config(f"spark.sql.catalog.{catalog}.gcp_project", f"{project_id}") \ .config(f"spark.sql.catalog.{catalog}.gcp_location", f"{location}") \ .config(f"spark.sql.catalog.{catalog}.warehouse", f"{warehouse_dir}") \ .getOrCreate()
    spark.sql(f"USE `{catalog}`;") spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;") spark.sql(f"USE `{namespace}`;")
    \# Create table and display schema (without LOCATION) 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);")
    \# Select and display the contents of the table. spark.sql("SELECT * FROM example_iceberg_table").show()

    Ganti kode berikut:

    • PROJECT_ID: project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud.
    • CATALOG_NAME dan NAMESPACE: Nama katalog dan namespace Iceberg digabungkan untuk mengidentifikasi tabel Iceberg (catalog.namespace.table_name).
    • LOCATION: Lokasi BigQuery yang didukung. Lokasi defaultnya adalah "US".
    • BUCKET dan WAREHOUSE_DIRECTORY: Bucket dan folder Cloud Storage yang digunakan sebagai direktori penyimpanan Iceberg.
  10. Klik ikon jalankan atau tekan Shift-Enter untuk menjalankan kode. Setelah tugas selesai, pesan status akan menampilkan "Spark Job Finished", dan output akan menampilkan konten tabel:

  11. Melihat metadata tabel di BigQuery

    1. Di Konsol Google Cloud, buka halaman BigQuery.

      Buka BigQuery Studio

    2. Melihat metadata tabel Iceberg.