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 zur Abfragezeit aufwendige Joins auszuführen, verwenden BigQuery und Open-Source-Engines (z. B. Apache Spark, Apache Flink und Trino) diese Vektoren, um gelöschte Zeilen schnell zu identifizieren und zu überspringen.
Die Verwendung binärer 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 Lesevorgänge:Verbessert die Abfragegeschwindigkeit, da BigQuery und Open-Source-Engines gelöschte Zeilen identifizieren und überspringen können.
Dies ist besonders nützlich für die Verarbeitung von Updates und Löschvorgängen mit hohem Volumen in Change Data Capture-Pipelines (CDC) oder für die Einhaltung gesetzlicher Anforderungen wie der DSGVO (Recht auf Vergessenwerden), indem bestimmte Zeilen gelöscht werden, ohne dass gesamte Datendateien neu geschrieben werden müssen.
Hinweis
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
-
Aktivieren Sie die BigLake API.
Rollen, die zum Aktivieren von APIs erforderlich sind
Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (
roles/serviceusage.serviceUsageAdmin), die die Berechtigungserviceusage.services.enableenthält. 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 you need to create and manage Iceberg V3 tables, Sie zum Erstellen und Verwalten von Iceberg V3-Tabellen benötigen:
-
Alle:
- 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 müssen Sie einen Namespace und einen Katalog erstellen.
Die Einrichtung des Iceberg-REST-Katalogs kann einige Zeit dauern. Achten Sie darauf, dass Sie sowohl den Namespace als auch den Katalog erfolgreich 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.
- Zeilenabstammungs-Tracking:Das Tracking der Zeilenabstammung 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 in V3-Tabellen müssen Sie Open-Source-Engines verwenden (z. B. Apache Spark, Apache Flink oder Trino).
Engine-Anforderungen
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 dieser Anleitung wird iceberg-spark-runtime-3.5_2.12:1.10.1 verwendet.
Achten Sie beim Konfigurieren der Tabelle und der Engine-Sitzung auf Folgendes:
- Tabellenformatversion: 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
Die folgende Konfiguration aktiviert die erforderlichen Iceberg-Erweiterungen und richtet die REST-Katalogverbindung ein:
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 des Apache Iceberg-REST-Katalogendpunkts.WAREHOUSE_PATH: der URI des Cloud Storage-Ordners, in dem sich Ihr Data Warehouse befindet, beginnend mitgs://.PROJECT_ID: Ihre Google Cloud Projekt-ID.
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 der Formatversion 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 Sie format-version='3' und die merge-on-read Lösch-,
Aktualisierungs- und Zusammenführungsmodi in den Tabelleneigenschaften angeben. 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 eine vorhandene Iceberg V2-Tabelle mit ALTER TABLE-Anweisungen auf V3 aktualisieren. Ein Downgrade einer Tabelle von V3 auf V2 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öschvorgänge generiert werden, darf die Engine nicht auf Copy-on-Write zurückgreifen. Dazu müssen in der Regel eine erhebliche Menge an Daten in der Tabelle vorhanden sein, 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 der 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 aus BigQuery den voll qualifizierten Tabellenbezeichner 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 binärer 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 Eigenschaften wie added-delete-files, added-dvs und operation. Dadurch wird bestätigt, dass Löschdateien hinzugefügt wurden.
"summary": {
"operation": "delete",
"added-delete-files": "1",
"added-dvs": "1",
"added-files-size": "42",
"added-position-deletes": "1",
...
}
Nächste Schritte
- Informationen zum Abfragen von Tabellen und zur Verwendung der Katalogföderation mit BigQuery
- Informationen zu Lakehouse for Apache Iceberg-REST-Katalogtabellen für Apache Iceberg.