Vektor penghapusan biner dalam tabel Apache Iceberg V3 memungkinkan Anda mencatat penghapusan tingkat baris dalam file .puffin tanpa menulis ulang seluruh file data. Alih-alih
melakukan penggabungan waktu kueri yang mahal, mesin seperti BigQuery,
Managed Service untuk Apache Spark, Apache Flink, dan Trino menggunakan vektor ini untuk
mengidentifikasi dan melewati baris yang dihapus selama pembacaan.
Didukung dalam katalog runtime Lakehouse, pengoptimalan ini dapat meningkatkan performa tulis dan baca untuk pipeline Change Data Capture (CDC) bervolume tinggi. Hal ini juga membantu Anda memenuhi persyaratan peraturan seperti GDPR (Hak untuk Dilupakan) dengan menghapus data individual tanpa overhead penulisan ulang file data.
Sebelum memulai
-
Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
-
Aktifkan BigLake API, jika belum diaktifkan.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk membuat dan mengelola tabel Iceberg V3, minta administrator untuk memberi Anda peran IAM berikut pada project dan bucket penyimpanan Anda:
-
Membuat dan mengelola tabel Iceberg V3:
- BigLake Admin (
roles/biglake.admin) - project Anda - Storage Admin (
roles/storage.admin) - bucket Cloud Storage target
- BigLake Admin (
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Menyiapkan katalog REST Iceberg
Sebelum membuat tabel Iceberg V3, Anda harus menyiapkan katalog REST Iceberg, yang mencakup pembuatan namespace dan katalog.
Penyiapan katalog REST Iceberg mungkin memerlukan waktu beberapa saat untuk diselesaikan. Pastikan Anda berhasil membuat namespace dan katalog sebelum melanjutkan.
Batasan
Tabel Iceberg V3 di katalog runtime Lakehouse memiliki batasan berikut:
- Jenis data V3 baru: Jenis data Iceberg V3 baru (seperti Variant, Geography, stempel waktu Nanodetik, nilai default, dan jenis data yang tidak diketahui) tidak didukung.
- Pelacakan silsilah baris: Pelacakan silsilah baris tidak didukung.
- Penulisan BigQuery: Penulisan BigQuery tidak didukung dengan tabel V3. Anda hanya dapat membaca tabel V3 dari BigQuery. Untuk membuat dan menulis ke tabel V3, Anda harus menggunakan mesin open source (seperti Apache Spark, Apache Flink, atau Trino).
Persyaratan mesin
Pastikan Anda menggunakan versi mesin yang mendukung Iceberg V3 dan vektor penghapusan biner. Sebaiknya gunakan Apache Spark 3.5 atau yang lebih tinggi. Contoh dalam panduan ini menggunakan iceberg-spark-runtime-3.5_2.12:1.10.1.
Saat mengonfigurasi sesi tabel dan mesin, pastikan hal berikut:
- Versi format tabel: Harus ditetapkan ke
format-version='3'. - Delete mode: Harus ditetapkan ke
merge-on-read. Mode ini memastikan bahwa penghapusan ditulis ke file terpisah (vektor penghapusan), bukan menulis ulang file data asli (copy-on-write).
Contoh konfigurasi sesi Spark
Konfigurasi berikut mengaktifkan ekstensi Iceberg yang diperlukan dan menyiapkan koneksi katalog REST:
spark-sql \ --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.10.1,org.apache.iceberg:iceberg-gcp:1.10.1 \ --jars https://storage-download.googleapis.com/maven-central/maven2/org/apache/iceberg/iceberg-gcp-bundle/1.10.1/iceberg-gcp-bundle-1.10.1.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.type=rest \ --conf spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog \ --conf spark.sql.catalog.CATALOG_NAME.warehouse=WAREHOUSE_PATH \ --conf spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID \ --conf spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager \ --conf spark.sql.catalog.CATALOG_NAME.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO \ --conf spark.sql.defaultCatalog=CATALOG_NAME
Ganti kode berikut:
CATALOG_NAME: nama endpoint katalog REST Apache Iceberg Anda.WAREHOUSE_PATH: URI folder Cloud Storage tempat data warehouse Anda disimpan, dimulai dengangs://.PROJECT_ID: Project ID Google Cloud Anda.
Menggunakan vektor penghapusan biner
Untuk menggunakan vektor penghapusan biner di tabel Apache Iceberg V3, Anda harus membuat tabel dengan versi pemformatan 3, mengisi tabel dengan data, melakukan modifikasi database standar, dan membuat kueri tabel. Anda dapat menjalankan semua pernyataan create, insert, delete, dan update menggunakan Spark SQL.
Membuat tabel Iceberg dengan vektor penghapusan biner
Buat tabel yang menentukan format-version='3' dan mode penghapusan, pembaruan, dan penggabungan merge-on-read di properti tabel. Jalankan pernyataan berikut di Spark SQL:
Spark
CREATE NAMESPACE IF NOT EXISTS my_namespace;
USE my_namespace;
CREATE TABLE my_namespace.mytable_v3 (
id BIGINT,
city STRING,
state STRING
) TBLPROPERTIES (
'format-version'='3',
'write.delete.mode'='merge-on-read',
'write.update.mode'='merge-on-read',
'write.merge.mode'='merge-on-read'
);
Mengupgrade tabel Iceberg V2 ke V3
Anda dapat mengupgrade tabel Iceberg V2 yang ada ke V3 menggunakan pernyataan ALTER TABLE. Menurunkan versi tabel dari V3 ke V2 tidak didukung. Jalankan pernyataan berikut di Spark SQL:
Spark
ALTER TABLE my_namespace.mytable_v2 SET TBLPROPERTIES ('format-version' = '3');
Menyisipkan data ke dalam tabel
Untuk memastikan file vektor penghapusan biner dibuat untuk penghapusan, mesin tidak boleh kembali ke copy-on-write. Hal ini biasanya memerlukan sejumlah besar data yang ada dalam tabel sebelum operasi penghapusan. Misalnya, Apache Spark mungkin mengoptimalkan penghapusan kecil dengan beralih ke copy-on-write. Isi tabel dengan menjalankan pernyataan berikut di Spark SQL:
Spark
-- Create a temporary view with a large number of rows (100,000 rows)
CREATE OR REPLACE TEMPORARY VIEW large_source AS
SELECT
id,
CAST(id AS STRING) as city,
'WA' as state
FROM (
SELECT row_number() OVER (ORDER BY (SELECT NULL)) as id
FROM (SELECT 0 FROM range(1000)) a
CROSS JOIN (SELECT 0 FROM range(100)) b
);
-- Overwrite the existing table with the generated data
INSERT OVERWRITE my_namespace.mytable_v3 SELECT * FROM large_source;
Menghapus data
Menjalankan pernyataan DELETE di Spark SQL. Karena tabel dikonfigurasi untuk merge-on-read dan memiliki data yang memadai, Spark akan membuat file penghapusan menggunakan vektor penghapusan biner.
Spark
DELETE FROM my_namespace.mytable_v3 WHERE id = 5000;
Memperbarui data
Menjalankan pernyataan UPDATE di Spark SQL. Karena tabel dikonfigurasi untuk
merge-on-read dan memiliki data yang memadai, Spark menghasilkan file penghapusan menggunakan
vektor penghapusan biner.
Spark
UPDATE my_namespace.mytable_v3 SET state = 'NY' WHERE id = 1;
Membuat kueri tabel
Kueri pada tabel secara otomatis menggunakan file vektor penghapusan biner untuk mengecualikan baris yang dihapus. Anda dapat membuat kueri tabel menggunakan Apache Spark atau BigQuery.
Spark
-- Should be less than the initial 100,000 rows
SELECT count(*) FROM my_namespace.mytable_v3;
-- Should return no results
SELECT * FROM my_namespace.mytable_v3 WHERE id = 5000;
-- Should return 'NY'
SELECT * FROM my_namespace.mytable_v3 WHERE id = 1;
BigQuery
Saat membuat kueri dari BigQuery, gunakan ID tabel yang sepenuhnya memenuhi syarat, PROJECT_ID.CATALOG_NAME.my_namespace.mytable_v3.
bq query --nouse_legacy_sql \ 'SELECT * FROM `PROJECT_ID.CATALOG_NAME.my_namespace.mytable_v3` LIMIT 10'
Memverifikasi pembuatan vektor penghapusan biner
Anda dapat memverifikasi bahwa vektor penghapusan biner berhasil dibuat dengan memeriksa direktori penyimpanan dan metadata snapshot.
Memeriksa file .puffin
Buka direktori data tabel di warehouse Cloud Storage Anda
(misalnya, gs://WAREHOUSE_BUCKET/my_namespace/mytable_v3/data).
Anda akan menemukan file .puffin, yang menyimpan vektor penghapusan biner.
Memeriksa metadata snapshot
Metadata snapshot dalam file JSON tabel Iceberg berisi informasi tentang operasi penghapusan. Cari properti seperti added-delete-files,
added-dvs, dan operation dalam ringkasan snapshot. Hal ini mengonfirmasi bahwa
file penghapusan telah ditambahkan.
"summary": {
"operation": "delete",
"added-delete-files": "1",
"added-dvs": "1",
"added-files-size": "42",
"added-position-deletes": "1",
...
}
Langkah berikutnya
- Pelajari cara Mengelola tabel Apache Iceberg di katalog runtime Lakehouse.