Der Lakehouse-Laufzeitkatalog unterstützt Apache Iceberg V3-Tabellen. Eine Hauptfunktion der Apache Iceberg V3-Spezifikation sind binäre Löschvektoren. Bei dieser Optimierung werden Löschvorgänge auf Zeilenebene in .puffin-Dateien gespeichert.
Anstatt kostspielige Joins zur Abfragezeit auszuführen, verwenden BigQuery und Open-Source-Engines wie Apache Spark, Apache Flink und Trino diese Vektoren, um gelöschte Zeilen schnell zu identifizieren und zu überspringen.
Die Verwendung von binären Löschvektoren kann die Leistung auf folgende Weise verbessern:
- Schreibvorgänge mit hohem Volumen:Verbessert die Schreibleistung für Tabellen mit Schreibvorgängen mit hohem Volumen.
- Effiziente Lesezugriffe:Die Abfragegeschwindigkeit wird verbessert, da BigQuery und Open-Source-Engines gelöschte Zeilen erkennen und überspringen können.
Das ist besonders nützlich für die Verarbeitung von Updates und Löschvorgängen mit hohem Volumen in CDC-Pipelines (Change Data Capture) oder zur Einhaltung von behördlichen Anforderungen wie der DSGVO (Recht auf Vergessenwerden), indem bestimmte Zeilen gelöscht werden, ohne dass ganze Datendateien neu geschrieben werden müssen.
Hinweis
-
Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projekt aktiviert ist.
-
Aktivieren Sie die BigLake API, falls sie noch nicht aktiviert ist.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die Berechtigung
serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt und Ihren Speicher-Bucket zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen und Verwalten von Iceberg V3-Tabellen benötigen:
-
Iceberg V3-Tabellen erstellen und verwalten:
- BigLake-Administrator (
roles/biglake.admin) – Ihr Projekt - Storage-Administrator (
roles/storage.admin): Der Ziel-Cloud Storage-Bucket
- BigLake-Administrator (
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Iceberg-REST-Katalog einrichten
Bevor Sie eine Iceberg V3-Tabelle erstellen, müssen Sie den Iceberg-REST-Katalog einrichten. Dazu gehört das Erstellen eines Namespace und eines Katalogs.
Die Einrichtung des Iceberg-REST-Katalogs kann einige Zeit in Anspruch nehmen. Achten Sie darauf, dass Sie sowohl den Namespace als auch den Katalog erstellt haben, bevor Sie fortfahren.
Beschränkungen
Für Iceberg V3-Tabellen im Lakehouse-Laufzeitkatalog gelten die folgenden Einschränkungen:
- Neue V3-Datentypen:Neue Iceberg V3-Datentypen (z. B. „Variant“, „Geography“, „Nanosecond timestamp“, Standardwerte und unbekannte Datentypen) werden nicht unterstützt.
- Tracking des Zeilenursprungs:Das Tracking des Zeilenursprungs wird nicht unterstützt.
- BigQuery-Schreibvorgänge:BigQuery-Schreibvorgänge werden für V3-Tabellen nicht unterstützt. Sie können V3-Tabellen nur aus BigQuery lesen. Zum Erstellen und Schreiben von V3-Tabellen müssen Sie Open-Source-Engines wie Apache Spark, Apache Flink oder Trino verwenden.
Anforderungen an die Suchmaschine
Verwenden Sie eine Engine-Version, die Iceberg V3 und binäre Löschvektoren unterstützt. Apache Spark 3.5 oder höher wird empfohlen. In den Beispielen in diesem Leitfaden wird iceberg-spark-runtime-3.5_2.12:1.10.1 verwendet.
Achten Sie beim Konfigurieren der Tabelle und der Engine-Sitzung auf Folgendes:
- Version des Tabellenformats:Muss auf
format-version='3'festgelegt sein. - Löschmodus:Muss auf
merge-on-readfestgelegt sein. In diesem Modus werden Löschvorgänge in separate Dateien (die Löschvektoren) geschrieben, anstatt die ursprünglichen Datendateien neu zu schreiben (Copy-on-Write).
Beispiel für die Konfiguration einer Spark-Sitzung
Mit der folgenden Konfiguration werden die erforderlichen Iceberg-Erweiterungen aktiviert und die REST-Katalogverbindung eingerichtet:
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
Ersetzen Sie Folgendes:
CATALOG_NAME: Der Name Ihres Apache Iceberg-REST-Katalogendpunkts.WAREHOUSE_PATH: Der URI des Cloud Storage-Ordners, in dem Ihr Data Warehouse gespeichert ist, beginnend mitgs://.PROJECT_ID: Projekt-ID in Google Cloud .
Binäre Löschvektoren verwenden
Wenn Sie binäre Löschvektoren in Apache Iceberg V3-Tabellen verwenden möchten, müssen Sie eine Tabelle mit Formatierungsversion 3 erstellen, die Tabelle mit Daten füllen, Standarddatenbankänderungen vornehmen und die Tabelle abfragen. Sie können alle Anweisungen zum Erstellen, Einfügen, Löschen und Aktualisieren mit Spark SQL ausführen.
Iceberg-Tabelle mit binären Löschvektoren erstellen
Erstellen Sie eine Tabelle, in der format-version='3' und die Modi zum Löschen, Aktualisieren und Zusammenführen von merge-on-read in den Tabelleneigenschaften angegeben werden. Führen Sie die folgende Anweisung in Spark SQL aus:
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'
);
Iceberg V2-Tabelle auf V3 aktualisieren
Sie können ein Upgrade einer vorhandenen Iceberg V2-Tabelle auf V3 mit ALTER TABLE-Anweisungen durchführen. Das Downgrade einer Tabelle von Version 3 auf Version 2 wird nicht unterstützt. Führen Sie die folgende Anweisung in Spark SQL aus:
Spark
ALTER TABLE my_namespace.mytable_v2 SET TBLPROPERTIES ('format-version' = '3');
Daten in die Tabelle einfügen
Damit binäre Löschvektordateien für Löschungen generiert werden, darf die Engine nicht auf Copy-on-Write zurückgreifen. Dazu sind in der Regel erhebliche Datenmengen in der Tabelle erforderlich, bevor der Löschvorgang ausgeführt wird. Apache Spark kann beispielsweise kleine Löschvorgänge optimieren, indem es auf „Copy-on-Write“ zurückgreift. Füllen Sie die Tabelle, indem Sie die folgenden Anweisungen in Spark SQL ausführen:
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;
Daten löschen
Führen Sie eine DELETE-Anweisung in Spark SQL aus. Da die Tabelle für merge-on-read konfiguriert ist und genügend Daten enthält, generiert Spark Löschdateien mit binären Löschvektoren.
Spark
DELETE FROM my_namespace.mytable_v3 WHERE id = 5000;
Daten aktualisieren
Führen Sie eine UPDATE-Anweisung in Spark SQL aus. Da die Tabelle für merge-on-read konfiguriert ist und genügend Daten enthält, generiert Spark Löschdateien mit binären Löschvektoren.
Spark
UPDATE my_namespace.mytable_v3 SET state = 'NY' WHERE id = 1;
Tabelle abfragen
Bei Abfragen für die Tabelle werden die binären Löschvektordateien automatisch verwendet, um gelöschte Zeilen auszuschließen. Sie können die Tabelle mit Apache Spark oder BigQuery abfragen.
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
Verwenden Sie beim Abfragen von BigQuery die voll qualifizierte Tabellen-ID 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'
Erstellung von binären Löschvektoren prüfen
Sie können prüfen, ob binäre Löschvektoren erfolgreich erstellt wurden, indem Sie das Speicherverzeichnis und die Snapshot-Metadaten untersuchen.
Nach .puffin-Dateien suchen
Rufen Sie das Datenverzeichnis der Tabelle in Ihrem Cloud Storage-Warehouse auf (z. B. gs://WAREHOUSE_BUCKET/my_namespace/mytable_v3/data). Dort sollten Sie .puffin-Dateien finden, in denen die binären Löschvektoren gespeichert sind.
Snapshot-Metadaten untersuchen
Die Snapshot-Metadaten in den JSON-Dateien der Iceberg-Tabelle enthalten Informationen zum Löschvorgang. Suchen Sie in der Snapshot-Zusammenfassung nach Properties wie added-delete-files, added-dvs und operation. So können Sie bestätigen, dass Löschdateien hinzugefügt wurden.
"summary": {
"operation": "delete",
"added-delete-files": "1",
"added-dvs": "1",
"added-files-size": "42",
"added-position-deletes": "1",
...
}