Fitur metastore BigQuery tambahan

Untuk menyesuaikan konfigurasi metastore BigQuery, Anda dapat menggunakan fitur tambahan berikut:

  • Prosedur Apache Spark Iceberg
  • Opsi filter untuk tabel yang tidak didukung
  • Penggantian koneksi BigQuery

Menggunakan prosedur Spark Iceberg

Untuk menggunakan prosedur Spark Iceberg, Anda harus menyertakan ekstensi SQL Iceberg dalam konfigurasi Spark. Misalnya, Anda dapat membuat prosedur untuk melakukan rollback ke status sebelumnya.

Menggunakan Spark-SQL interaktif untuk melakukan rollback ke status sebelumnya

Anda dapat menggunakan prosedur Iceberg Spark untuk membuat, mengubah, dan melakukan rollback tabel ke status sebelumnya. Contoh:

  1. Buat tabel Spark:

    spark-sql \
       --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.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
       --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.warehouse=WAREHOUSE_DIRECTORY

    Ganti kode berikut:

    • CATALOG_NAME: nama katalog yang mereferensikan tabel Spark Anda.
    • PROJECT_ID: ID project Google Cloud .

    • WAREHOUSE_DIRECTORY: URI folder Cloud Storage tempat data warehouse Anda disimpan.

    USE `CATALOG_NAME`;
    CREATE NAMESPACE NAMESPACE_NAME;
    USE NAMESPACE NAMESPACE_NAME;
    CREATE TABLE NAMESPACE_NAME.TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY';
    INSERT INTO NAMESPACE_NAME.TABLE_NAME VALUES (1, "first row");
    DESCRIBE EXTENDED TABLE_NAME;

    Ganti kode berikut:

    • NAMESPACE_NAME: nama namespace yang mereferensikan tabel Spark Anda.
    • TABLE_NAME: nama tabel yang mereferensikan tabel Spark Anda.

    Output berisi detail tentang konfigurasi tabel:

    ...
    Table Properties [current-snapshot-id=1659239298328512231,format=iceberg/parquet,format-version=2,write.parquet.compression-codec=zstd]
    ...
  2. Ubah tabel lagi, lalu roll back ke 1659239298328512231 snapshot yang dibuat sebelumnya:

    ALTER TABLE TABLE_NAME ADD COLUMNS (newDoubleCol double);
    INSERT INTO TABLE_NAME VALUES (2, "second row", 2.5);
    SELECT * FROM TABLE_NAME;
    CALL CATALOG_NAME.system.set_current_snapshot(NAMESPACE_NAME.TABLE_NAME', SNAPSHOT_ID);
    SELECT * FROM TABLE_NAME;

    Ganti kode berikut:

    • SNAPSHOT_ID: ID snapshot yang akan Anda rollback.

    Outputnya mirip dengan hal berikut ini:

    1 first row
    Time taken: 0.997 seconds, Fetched 1 row(s)

Memfilter tabel yang tidak didukung dari fungsi listingan tabel

Saat Anda menggunakan Spark SQL dengan katalog metastore BigQuery, perintah SHOW TABLES akan menampilkan semua tabel dalam namespace yang ditentukan, bahkan yang tidak kompatibel dengan Spark.

Untuk hanya menampilkan tabel yang didukung, aktifkan opsi filter_unsupported_tables:

spark-sql
  --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=WAREHOUSE_DIRECTORY \
  --conf spark.sql.catalog.CATALOG_NAME.filter_unsupported_tables="true"

Ganti kode berikut:

  • CATALOG_NAME: nama katalog Spark yang akan digunakan.
  • PROJECT_ID: ID project Google Cloud yang akan digunakan.
  • LOCATION: lokasi resource BigQuery.
  • WAREHOUSE_DIRECTORY: folder Cloud Storage yang akan digunakan sebagai data warehouse.

Menetapkan penggantian koneksi BigQuery

Anda dapat menggunakan koneksi BigQuery untuk mengakses data yang disimpan di luar BigQuery, seperti di Cloud Storage.

Untuk menetapkan penggantian koneksi BigQuery yang memberikan akses ke bucket Cloud Storage, selesaikan langkah-langkah berikut:

  1. Di project BigQuery, buat koneksi baru ke resource Cloud Storage Anda. Koneksi ini menentukan cara BigQuery mengakses data Anda.

  2. Berikan peran roles/bigquery.connectionUser pada koneksi kepada pengguna atau akun layanan yang mengakses data.

    Pastikan resource koneksi memiliki lokasi yang sama dengan resource target di BigQuery. Untuk mengetahui informasi selengkapnya, lihat Mengelola koneksi.

  3. Tentukan koneksi di tabel Iceberg Anda dengan properti bq_connection:

    CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY' TBLPROPERTIES ('bq_connection'='projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID');

    Ganti kode berikut:

    • TABLE_NAME: nama tabel untuk tabel Spark Anda.
    • WAREHOUSE_DIRECTORY: URI bucket Cloud Storage yang menyimpan data Anda.
    • PROJECT_ID: ID project Google Cloud yang akan digunakan.
    • LOCATION: lokasi koneksi.
    • CONNECTION_ID: ID koneksi.

Langkah selanjutnya