Apache Iceberg™-Tabellen automatisch aktualisieren¶
Konfigurieren Sie die automatische Aktualisierung von Metadaten für neue oder bestehende, extern verwaltete Apache Iceberg™-Tabellen. Mit automatischen Aktualisierungen fragt Snowflake Ihren externen Iceberg-Katalog kontinuierlich und serverlos ab, um die Metadaten mit den neuesten Remote-Änderungen zu synchronisieren.
Die automatische Aktualisierung für Iceberg-Tabellen funktioniert anders als die automatische Aktualisierung für Verzeichnistabellen oder externe Tabellen, da sie nicht auf Benachrichtigungen des Cloudanbieters angewiesen ist. Stattdessen konfigurieren Sie das Feature wie folgt:
Legen Sie ein Aktualisierungsintervall für eine Katalogintegration fest. Snowflake unterstützt die automatische Aktualisierung für die folgenden externen Iceberg-Katalogoptionen:
REST-Katalog, der mit der Apache Iceberg REST OpenAPI-Spezifikation konform ist
Snowflake Open Catalog
Objektspeicher (nur Delta Lake)
AWS Glue
Erstellen Sie eine oder mehrere Iceberg-Tabellen, die die Katalogintegration verwenden.
Steuern Sie die automatische Aktualisierung für jede Tabelle mit dem AUTO_REFRESH-Parameter.
Mit dieser Herangehensweise können Sie die Aktualisierungseinstellungen zentral über die Katalogintegration verwalten, während Sie einzelne Tabellen nach Bedarf steuern können.
Aktualisierungsintervall für eine Katalogintegration festlegen¶
Wenn Sie den Befehl CREATE CATALOG INTEGRATION ausführen, können Sie einen Wert für den Parameter REFRESH_INTERVAL_SECONDS angeben. Andernfalls beträgt das standardmäßige Aktualisierungsintervall 30 Sekunden. Snowflake fragt den externen Katalog nur ab, wenn Iceberg-Tabellen mit der Katalogintegration definiert sind.
Das folgende Beispiel erstellt eine Katalogintegration für AWS Glue und legt ein Aktualisierungsintervall von 60 Sekunden fest:
CREATE CATALOG INTEGRATION auto_refresh_catalog_integration
CATALOG_SOURCE = GLUE
CATALOG_NAMESPACE = 'my_catalog_namespace'
TABLE_FORMAT = ICEBERG
GLUE_AWS_ROLE_ARN = 'arn:aws:iam::123456789123:role/my-catalog-role'
GLUE_CATALOG_ID = '123456789123'
ENABLED = TRUE
REFRESH_INTERVAL_SECONDS = 60;
Um das Aktualisierungsintervall für eine Katalogintegration zu aktualisieren, verwenden Sie den Befehl ALTER CATALOG INTEGRATION.
Beispiel:
ALTER CATALOG INTEGRATION auto_refresh_catalog_integration SET REFRESH_INTERVAL_SECONDS = 120;
Iceberg-Tabelle mit automatischer Aktualisierung erstellen¶
Erstellen Sie eine Iceberg-Tabelle mit dem Befehl CREATE ICEBERG TABLE. Um festzulegen, dass die Tabelle automatisches Aktualisierung von Metadaten verwenden soll, setzen Sie AUTO_REFRESH = TRUE.
Im folgenden Beispiel wird eine Iceberg-Tabelle erstellt, die AWS Glue als Katalog verwendet, wobei die zuvor erstellte Katalogintegration (auto_refresh_catalog_integration) und die CATALOG_TABLE_NAME von AWS Glue angegeben werden.
CREATE OR REPLACE ICEBERG TABLE auto_refresh_iceberg_table
CATALOG_TABLE_NAME = 'myGlueTable'
CATALOG = 'auto_refresh_catalog_integration'
AUTO_REFRESH = TRUE;
Automatische Aktualisierung aktivieren oder deaktivieren¶
Bemerkung
Wenn die Tabelle eine Katalogintegration verwendet, die vor Snowflake Version 8.22 erstellt wurde, müssen Sie den Befehl ALTER CATALOG INTEGRATION verwenden, um den Parameter
REFRESH_INTERVAL_SECONDSfestzulegen, bevor Sie die automatische Aktualisierung für die Tabelle aktivieren.Das häufige Ein- und Ausschalten der automatischen Aktualisierung für eine Iceberg-Tabelle kann die Aktualisierung der Metadaten für diese Tabelle verlangsamen.
Verwenden Sie den Befehl ALTER ICEBERG TABLE, um die automatische Aktualisierung für eine bestehende Iceberg-Tabelle zu aktivieren oder zu deaktivieren.
Beispiel:
ALTER ICEBERG TABLE my_iceberg_table SET AUTO_REFRESH = FALSE;
Überwachung des automatischen Aktualisierungsstatus¶
SHOW ICEBERG TABLES¶
Um den automatischen Aktualisierungsstatus für mehrere Tabellen zu erhalten, verwenden Sie den Befehl SHOW ICEBERG TABLES.
SHOW ICEBERG TABLES;
Die Befehlsausgabe enthält eine Spalte mit dem Namen auto_refresh_status, die für jede Tabelle, auf die Sie Zugriffsrechte haben, dieselben Informationen anzeigt wie die Funktion SYSTEM$AUTO_REFRESH_STATUS.
SYSTEM$AUTO_REFRESH_STATUS¶
Um den automatischen Aktualisierungsstatus für eine bestimmte Tabelle abzurufen, rufen Sie die Funktion SYSTEM$AUTO_REFRESH_STATUS auf.
SELECT SYSTEM$AUTO_REFRESH_STATUS('my_iceberg_table');
Die Funktion gibt Details über die Pipe zurück, die Snowflake verwendet, um Aktualisierungen für die Tabelle zu automatisieren, z. B. den Ausführungsstatus und die Größe der Snapshot-Warteschlange. Der Ausführungsstatus RUNNING zeigt an, dass die automatische Aktualisierung wie erwartet läuft. Weitere Informationen dazu finden Sie unter SYSTEM$AUTO_REFRESH_STATUS.
ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY¶
Um Metadaten und Snapshot-Informationen über den letzten Aktualisierungsverlauf für eine bestimmte Tabelle abzurufen, verwenden Sie die Funktion ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY.
SELECT *
FROM TABLE(INFORMATION_SCHEMA.ICEBERG_TABLE_SNAPSHOT_REFRESH_HISTORY(
TABLE_NAME => 'my_iceberg_table'
));
Ereignisse der automatischen Aktualisierung überwachen¶
Sie können Snowflake so konfigurieren, dass ein Ereignis aufgezeichnet wird, das Informationen über den Status der automatischen Aktualisierung einer Iceberg-Tabelle liefert. Snowflake erfasst das Ereignis in Ihrer aktiven Ereignistabelle. Angenommen, Sie haben eine Ereignistabelle, die mit einer Datenbank verbunden ist. Wenn Snowflake eine Iceberg-Tabelle in dieser Datenbank automatisch aktualisiert, zeichnet Snowflake ein Ereignis in Ihrer Ereignistabelle auf.
Durch die Überwachung automatischer Aktualisierungsereignisse können Sie Einblicke in die folgenden Bereiche erhalten:
Fortschritt der automatischen Aktualisierung: Verfolgen Sie, wie Snapshots den automatischen Aktualisierungsprozess durchlaufen.
Aggregierte Statistiken: Überprüfen Sie die zusammengefassten Statistiken für automatische Aktualisierungsoperationen.
Sie können auch Alerts für die folgenden kritischen Bedingungen konfigurieren:
Aktualisierungsfehler
Hohe Aktualisierungslatenzen
Bemerkung
Das Protokollieren von Ereignissen für die automatische Aktualisierung verursacht Kosten. Weitere Informationen dazu finden Sie unter Kosten der Telemetriedatenerfassung.
Snowflake erfasst ein Ereignis, wenn die automatische Aktualisierung startet, abgeschlossen wird oder zu einem Fehler führt.
Schweregrad für die Erfassung von Ereignissen festlegen¶
Um Ereignisse der automatischen Aktualisierung zu erfassen, müssen Sie den Parameter LOG_LEVEL auf Ebene der Iceberg-Tabelle oder auf Ebene des Kontos festlegen. LOG_LEVEL bestimmt anhand der folgenden Werte, welche Ereignisse erfasst werden sollen:
ERROR: Ereignisse, die auf eine Änderung hinweisen, die menschliches Eingreifen erfordert.
WARN: Ereignisse, die auf ein Problem hinweisen, das ohne menschliches Eingreifen gelöst werden kann.
DEBUG: Ereignisse mit hohem Volumen.
Bemerkung
Es gibt keinen Standard-Schweregrad. Um Ereignisse zu erfassen, müssen Sie den Schweregrad entweder auf Kontoebene oder auf Ebene der Iceberg-Tabelle festlegen.
Um z. B. Ereignisse der automatischen Aktualisierung auf DEBUG-Ebene für eine bestimmte Iceberg-Tabelle zu erfassen, verwenden Sie den folgenden Befehl:
ALTER ICEBERG TABLE <my_table_name> SET LOG_LEVEL = DEBUG;
Weitere Informationen dazu finden Sie unter Einstellung der Grade für Protokollierung, Metriken und Ablaufverfolgung.
Ereignistabelle nach Ereignissen der automatischen Aktualisierung abfragen¶
Bevor Sie Abfragen nach Ereignissen der automatischen Aktualisierung durchführen können, müssen Sie eine Ereignistabelle einrichten und den Schweregrad für die Ereigniserfassung festlegen.
Das folgende Beispiel zeigt, wie automatische Iceberg-Aktualisierungsereignisse abgerufen werden, die während der Snapshot-Verarbeitung generiert werden:
SELECT record_type,
record:"name" event_name,
record:"severity_text" log_level,
resource_attributes:"snow.database.name" database_name,
resource_attributes:"snow.schema.name" schema_name,
resource_attributes:"snow.table.name" table_name,
resource_attributes:"snow.catalog.integration.name" catalog_integration_name,
record_attributes:"snow.snapshot.id" snapshot_id,
parse_json(value):metadata_file_location metadata_file_location,
parse_json(value):snapshot_state snapshot_state
FROM my_active_event_table
WHERE record_type='EVENT' AND event_name='iceberg_auto_refresh_snapshot_lifecycle';
Ausgabe:
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
| RECORD_TYPE | EVENT_NAME | LOG_LEVEL | DATABASE_NAME | SCHEMA_NAME | TABLE_NAME | CATALOG_INTEGRATION_NAME | SNAPSHOT_ID | METADATA_FILE_LOCATION | SNAPSHOT_STATE |
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
| EVENT | iceberg_auto_refresh_snapshot_lifecycle | DEBUG | TESTDB | TESTSH | TESTTABLE | glue_integration | 4281775564368 | metadata.json | started |
| EVENT | iceberg_auto_refresh_snapshot_lifecycle | DEBUG | TESTDB | TESTSH | TESTTABLE | glue_integration | 4281775564368 | metadata.json | completed |
+-------------+-----------------------------------------+-----------+---------------+-------------+------------+--------------------------+---------------+------------------------+----------------+
Fehlerbehebung¶
Wenn während des automatischen Aktualisierungsprozesses ein Fehler auftritt, aktualisiert Snowflake den Status der Ausführung auf einen der folgenden Werte:
STALLEDbedeutet, dass Snowflake versucht, den Fehler zu beheben. Wenn die Wiederherstellung erfolgreich ist, läuft der automatische Aktualisierungsprozess wie Automatische Aktualisierung erwartet weiter und der Zustand der Ausführung wechselt zurück in den gesunden ZustandRUNNING.STOPPEDbedeutet, dass der automatische Aktualisierungsprozess auf einen nicht behebbaren Fehler gestoßen ist und die automatische Aktualisierung der Tabelle gestoppt wurde.Ein nicht behebbarer Fehler kann z. B. auftreten, wenn Snowflake keine direkte Verbindung zwischen dem Ziel-Snapshot und dem aktuellen Snapshot herstellen kann.
Um den Zustand
STOPPEDwiederherzustellen, führen Sie die folgenden Aktionen aus:Schalten Sie die automatische Aktualisierung für die Tabelle aus.
Führen Sie eine manuelle Metadatenaktualisierung durch. Eine Anleitung dazu finden Sie unter Tabellen-Metadaten aktualisieren.
Aktivieren Sie die automatische Aktualisierung mit der Anweisung ALTER ICEBERG TABLE … SET AUTO_REFRESH erneut.
Überprüfen Sie, ob sich die automatische Aktualisierung im Status
RUNNINGbefindet, indem Sie die Funktion SYSTEM$AUTO_REFRESH_STATUS aufrufen. Sie können die Funktion auch mehrmals aufrufen, um festzustellen, dass die Anzahl der Snapshots in der Warteschlange (pendingSnapshotCount) allmählich abnimmt.
Rechnungsstellung¶
Snowflake verwendet Snowpipe, um Aktualisierungen für Iceberg-Tabellen zu automatisieren, sodass die Gebühren für die automatische Aktualisierung in derselben Zeile Ihrer Abrechnung erscheinen wie die Snowpipe-Gebühren. Die Verwendung von Ereignissen zur Überwachung der automatischen Aktualisierung verursacht ebenfalls Kosten. Weitere Informationen dazu finden Sie unter Kosten der Telemetriedatenerfassung.
Für dieses Feature fallen keine Gebühren für die Snowpipe-Datei an.
Sie können die anfallenden Kosten abschätzen, indem Sie sich die Kontonutzung Ansicht PIPE_USAGE_HISTORY ansehen, die den Namen der Iceberg-Tabelle in der Spalte pipe_name anzeigt.
Bei deltabasierten Iceberg-Tabellen zeigen die automatischen Aktualisierungs-Pipes einen NULL Pipe-Namen an.
Weitere Informationen zu den Gebühren für Iceberg-Tabellen finden Sie unter Abrechnung von Iceberg-Tabellen.
Hinweise und Einschränkungen¶
Beachten Sie Folgendes, wenn Sie mit Iceberg-Tabellen arbeiten, die eine automatische Aktualisierung verwenden:
Für Katalogintegrationen, die vor Snowflake Version 8.22 (oder 9.2 für Delta-basierte Tabellen) erstellt wurden, müssen Sie den Parameter
REFRESH_INTERVAL_SECONDSmanuell setzen, bevor Sie die automatische Aktualisierung von Tabellen aktivieren, die von dieser Katalogintegration abhängen. Anweisungen dazu finden Sie unter ALTER CATALOG INTEGRATION … SET AUTO_REFRESH.Für Katalogintegrationen für Objektspeicher wird die automatische Aktualisierung nur für Integrationen mit
TABLE_FORMAT = DELTAunterstützt.Bei Tabellen mit häufigen Aktualisierungen kann die Verwendung eines kürzeren Abfrageintervalls (
REFRESH_INTERVAL_SECONDS) zu einer Leistungsverschlechterung führen.