Mengelola resource Iceberg di metastore BigLake

Metastore BigLake adalah metastore tunggal bersama yang memungkinkan berbagi data di seluruh mesin pemrosesan data, sehingga tidak perlu lagi memelihara metastore terpisah untuk beban kerja open source Anda.

Dokumen ini menjelaskan cara membuat, melihat, mengubah, dan menghapus resource Iceberg di metastore BigLake.

Sebelum memulai

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

    Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
  2. Enable the BigQuery, BigQuery Storage, and Dataproc APIs.

    Enable the APIs

  3. Opsional: Pahami cara kerja metastore BigLake dan alasan Anda harus menggunakannya.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengelola resource Iceberg di metastore BigLake, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Membuat resource metastore

Bagian berikut menjelaskan cara membuat resource di metastore BigLake.

Membuat namespace

Pilih salah satu opsi berikut:

API

Gunakan metode datasets.insert, dan tentukan kolom ExternalCatalogDatasetOptions di resource set data yang Anda terus kirimkan.

{
  "datasetReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID"
  },
  "externalCatalogDatasetOptions": {
    "defaultStorageLocationUri": "URI",
    "parameters": {
      ...
    }
  },
  "location": "LOCATION"
}

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi set data target
  • DATASET_ID: ID set data target Anda
  • URI: Cloud Storage URI untuk semua tabel dalam set data
  • LOCATION: lokasi BigQuery tempat Anda ingin membuat set data

Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

Ganti kode berikut:

  • SPARK_CATALOG: nama katalog Spark Anda
  • NAMESPACE: nama namespace baru Anda

Terraform

provider "google" {
  project = "PROJECT_ID"
}

resource "google_bigquery_dataset" "default" {
  dataset_id = "DATASET_ID"
  location   = "LOCATION"

  external_catalog_dataset_options {
    default_storage_location_uri = "URI"
    parameters = {
      ...
    }
  }
}

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi set data target
  • DATASET_ID: ID set data target Anda
  • LOCATION: lokasi BigQuery tempat Anda ingin membuat set data
  • URI: Cloud Storage URI untuk semua tabel dalam set data

Membuat tabel Iceberg

Pilih salah satu opsi berikut:

API

Gunakan metode tables.insert, dan tentukan kolom ExternalCatalogTableOptions di resource tabel yang Anda teruskan.

{
  "tableReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID",
    "tableId": "TABLE_ID"
  },
  "externalCatalogTableOptions": {
    "parameters": {
      "table_type": "iceberg",
      "metadata_location": "METADATA_URI"
    },
    "connection_id": "CONNECTION_ID"
  }
}

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi tabel target Anda.
  • DATASET_ID: ID set data yang berisi tabel target Anda.
  • TABLE_ID: ID tabel target Anda.
  • METADATA_URI: Cloud Storage URI untuk file metadata Iceberg terbaru. Contohnya, gs://mybucket/mytable/metadata/1234.metadata.json.
  • CONNECTION_ID: ID koneksi Anda ke Cloud Storage.

Spark SQL

CREATE TABLE SPARK_CATALOG.NAMESPACE.TABLE
  (id bigint, data string) USING iceberg;

Ganti kode berikut:

  • SPARK_CATALOG: nama katalog Spark Anda
  • NAMESPACE: nama namespace Anda
  • TABLE: nama tabel baru Anda

Terraform

resource "google_bigquery_table" "default" {
  deletion_protection = false
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "TABLE"

  external_catalog_table_options {
    storage_descriptor {
      location_uri  = "STORAGE_URI"
      input_format  = "org.apache.hadoop.mapred.FileInputFormat"
      output_format = "org.apache.hadoop.mapred.FileOutputFormat"
    }
    parameters = {
      "table_type"        = "iceberg"
      "metadata_location" = "METADATA_URI"
      "write.parquet.compression-codec" : "zstd"
      "EXTERNAL" : "TRUE"
    }
  }
}

Ganti kode berikut:

  • TABLE: nama tabel target.
  • STORAGE_URI: Cloud Storage URI tempat data tabel disimpan, dimulai dengan gs://.
  • METADATA_URI: Cloud Storage URI untuk file metadata Iceberg terbaru. Contohnya, gs://mybucket/mytable/metadata/1234.metadata.json.

Melihat resource metastore

Bagian berikut menjelaskan cara melihat resource di metastore BigLake.

Melihat namespace

Pilih salah satu opsi berikut:

API

Gunakan metode datasets.list untuk melihat semua namespace, atau gunakan metode datasets.get untuk melihat informasi tentang namespace yang ditentukan.

Spark SQL

Untuk melihat semua namespace dalam katalog, gunakan pernyataan berikut:

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

Ganti SPARK_CATALOG dengan nama katalog Spark Anda.

Untuk melihat informasi tentang namespace yang ditentukan, gunakan pernyataan berikut:

DESCRIBE { DATABASE | NAMESPACE } [EXTENDED]
SPARK_CATALOG.NAMESPACE;

Ganti kode berikut:

  • SPARK_CATALOG: nama katalog Spark Anda
  • NAMESPACE: nama namespace Anda

Melihat tabel

Pilih salah satu opsi berikut:

API

Gunakan tables.list method untuk melihat semua tabel dalam namespace, atau gunakan tables.get method untuk melihat informasi tentang tabel yang ditentukan.

Spark SQL

Untuk melihat semua tabel dalam namespace, gunakan pernyataan berikut:

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

Ganti kode berikut:

  • SPARK_CATALOG: nama katalog Spark Anda
  • NAMESPACE: nama namespace Anda

Untuk melihat informasi tentang tabel yang ditentukan, gunakan pernyataan berikut:

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

Ganti kode berikut:

  • SPARK_CATALOG: nama katalog Spark Anda
  • NAMESPACE: nama namespace Anda
  • TABLE: nama tabel Anda

Mengubah resource metastore

Bagian berikut menjelaskan cara memodifikasi resource di metastore BigLake.

Memperbarui namespace

Pilih salah satu opsi berikut:

API

Gunakan metode datasets.patch, dan perbarui kolom ExternalCatalogDatasetOptions di resource set data. Metode datasets.update tidak direkomendasikan karena menggantikan seluruh resource set data.

Spark SQL

Gunakan pernyataan ALTER DATABASE.

Memperbarui tabel Iceberg

Pilih salah satu opsi berikut:

API

Gunakan metode tables.patch, dan perbarui kolom ExternalCatalogTableOptions di resource tabel. Metode tables.update tidak direkomendasikan karena menggantikan seluruh resource tabel.

Untuk mengupdate skema atau file metadata, gunakan metode tables.patch dan setel properti autodetect_schema ke benar (true):

PATCH https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID?autodetect_schema=true

Ganti kode berikut:

  • PROJECT_ID: ID project yang berisi tabel yang ingin Anda perbarui
  • DATASET_ID: ID set data yang berisi tabel yang ingin Anda perbarui
  • TABLE_ID: ID tabel yang ingin Anda perbarui

Dalam isi permintaan, tentukan nilai yang diperbarui untuk setiap kolom. Misalnya, untuk memperbarui lokasi metadata tabel Iceberg, tentukan nilai yang diperbarui untuk kolom metadata_location:

{
  "externalCatalogTableOptions": {
    "parameters": {"metadata_location": "METADATA_URI"}
  },
  "schema": null
}'

Ganti METADATA_URI dengan Cloud Storage URI untuk file metadata Iceberg terbaru. Contohnya, gs://mybucket/mytable/metadata/1234.metadata.json.

Spark SQL

Gunakan pernyataan ALTER TABLE.

Menghapus resource metastore

Bagian berikut menjelaskan cara menghapus resource di metastore BigLake.

Menghapus namespace

Pilih salah satu opsi berikut:

API

Gunakan metode datasets.delete. Tetapkan parameter deleteContents ke benar (true) untuk menghapus tabel di namespace Anda.

Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

Ganti kode berikut:

  • SPARK_CATALOG: nama katalog Spark Anda
  • NAMESPACE: nama namespace Anda

Menghapus tabel

Pilih salah satu opsi berikut:

API

Gunakan metode tables.delete dan tentukan nama tabel. Metode ini tidak menghapus file terkait di Cloud Storage.

Spark SQL

Untuk hanya membuang tabel, gunakan pernyataan berikut:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

Ganti kode berikut:

  • SPARK_CATALOG: nama katalog Spark Anda
  • NAMESPACE: nama namespace Anda
  • TABLE: nama tabel yang akan dihapus

Untuk membuang tabel dan menghapus file terkait di Cloud Storage, gunakan pernyataan berikut:

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

Ganti kode berikut:

  • SPARK_CATALOG: nama katalog Spark Anda
  • NAMESPACE: nama namespace Anda
  • TABLE: nama tabel yang akan dihapus

Langkah berikutnya