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:
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 NAMESPACENAMESPACE_NAME ; USE NAMESPACENAMESPACE_NAME ; CREATE TABLENAMESPACE_NAME .TABLE_NAME (id int, data string) USING ICEBERG LOCATION 'WAREHOUSE_DIRECTORY '; INSERT INTONAMESPACE_NAME .TABLE_NAME VALUES (1, "first row"); DESCRIBE EXTENDEDTABLE_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] ...
Ubah tabel lagi, lalu roll back ke snapshot
1659239298328512231
yang dibuat sebelumnya:ALTER TABLE
TABLE_NAME ADD COLUMNS (newDoubleCol double); INSERT INTOTABLE_NAME VALUES (2, "second row", 2.5); SELECT * FROMTABLE_NAME ; CALLCATALOG_NAME .system.set_current_snapshot(NAMESPACE_NAME .TABLE_NAME ',SNAPSHOT_ID ); SELECT * FROMTABLE_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 di namespace yang ditentukan, bahkan tabel 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:
Di project BigQuery, buat koneksi baru ke resource Cloud Storage Anda. Koneksi ini menentukan cara BigQuery mengakses data Anda.
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.
Tentukan koneksi di tabel Iceberg 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 berikutnya
- Memigrasikan data Metastore Dataproc ke metastore BigQuery
- Menggunakan metastore BigQuery dengan Dataproc
- Menggunakan metastore BigQuery dengan Dataproc Serverless