Iceberg-Tabelle verwalten¶
Unter diesem Thema werden die folgenden Aufgaben erläutert, die Ihnen bei der Verwaltung einer Iceberg-Tabelle helfen:
Sie können auch eine Iceberg-Tabelle, die eine Katalogintegration verwendet, in eine Tabelle konvertieren, die Snowflake als Iceberg-Katalog verwendet. Weitere Informationen dazu finden Sie unter Iceberg-Tabelle konvertieren.
Tabellen-Metadaten manuell aktualisieren¶
Wenn Sie eine Katalogintegration verwenden, können Sie mit dem Befehl ALTER ICEBERG TABLE die Tabellenmetadaten aus einer bestimmten Iceberg-Metadatendatei aktualisieren. Durch das Aktualisieren der Tabellenmetadaten werden die Metadaten mit den jüngsten Tabellenänderungen synchronisiert.
Metadaten einer Iceberg-Tabelle aktualisieren, die AWS Glue als Katalog verwendet¶
Das folgende Beispiel aktualisiert manuell die Metadaten für eine Tabelle, die AWS Glue für den Iceberg-Katalog verwendet. Bei diesem Typ von Iceberg-Tabelle müssen Sie im Befehl keinen Pfad zur Metadatendatei angeben.
ALTER ICEBERG TABLE my_iceberg_table REFRESH;
Metadaten einer Iceberg-Tabelle aktualisieren, die aus Dateien in einem Objektspeicher erstellt wurde¶
Im folgenden Beispiel wird eine Tabelle manuell aktualisiert, die aus Iceberg-Metadatendateien in einem externen Cloudspeicherort erstellt wurde, und gibt den relativen Pfad zu einer Metadatendatei an. Die Metadatendatei definiert die Daten in der Tabelle nach dem Aktualisieren.
ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
Snapshots von DML-Änderungen generieren¶
Bei Tabellen, die Snowflake als Katalog verwenden, generiert Snowflake automatisch die Iceberg-Metadaten. Snowflake schreibt die Metadaten in einen Ordner mit dem Namen metadata
auf Ihrem externen Volume an dem Speicherort, der beim Erstellen der Tabelle mit dem Parameter BASE_LOCATION
angegeben wurde.
Alternativ können Sie die Funktion SYSTEM$GET_ICEBERG_TABLE_INFORMATION aufrufen, um Iceberg-Metadaten für alle neuen Änderungen zu generieren.
Beispiel:
SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
Ausgabe:
+-----------------------------------------------------------------------------------------------------------+
| SYSTEM$GET_ICEBERG_TABLE_INFORMATION('DB1.SCHEMA1.IT1') |
|-----------------------------------------------------------------------------------------------------------|
| {"metadataLocation":"s3://mybucket/metadata/v1.metadata.json","status":"success"} |
+-----------------------------------------------------------------------------------------------------------+
Iceberg-Tabelle abfragen¶
Um eine Iceberg-Tabelle abzufragen, muss ein Benutzer die folgenden Berechtigungen erhalten oder erben:
Die USAGE-Berechtigung für die Datenbank und das Schema, die die Tabelle enthalten, sowie für das mit der Tabelle verbundene externe Volume. Um eine Tabelle abzufragen, die nicht von Snowflake verwaltet wird, muss der Benutzer auch die Berechtigung USAGE für die Katalogintegration der Tabelle haben.
Die SELECT-Berechtigungen für die Tabelle.
Sie können eine Iceberg-Tabelle mit einer SELECT-Anweisung abfragen. Beispiel:
SELECT col1, col2 FROM my_iceberg_table;
Iceberg-Tabelle aktualisieren¶
Sie können INSERT- und UPDATE-Anweisungen verwenden, um eine Iceberg-Tabelle zu ändern, die Snowflake als Katalog verwendet.
Im folgenden Beispiel wird in eine Iceberg-Tabelle namens store_sales
ein neuer Wert eingefügt, und dann wird die Spalte cola
auf 1 aktualisiert, wenn der Wert derzeit -99 ist.
INSERT INTO store_sales values (-99);
UPDATE store_sales
SET cola = 1
WHERE cola = -99;
Abrufen von Speicherkennzahlen für Iceberg-Tabellen¶
Snowflake stellt Ihrem Konto keine Kosten für die Speicherung der Iceberg-Tabellen in Rechnung. Sie können jedoch nachvollziehen, wie viel Speicherplatz eine Iceberg-Tabelle belegt, indem Sie die Ansichten TABLE_STORAGE_METRICS und TABLES im Schema Snowflake Information Schema oder Account Usage abfragen.
Die folgende Beispielabfrage verbindet die Ansicht ACCOUNT_USAGE.TABLE_STORAGE_METRICS mit der Ansicht ACCOUNT_USAGE.TABLES und filtert nach der Spalte TABLES.IS_ICEBERG.
SELECT metrics.* FROM
snowflake.account_usage.table_storage_metrics metrics
INNER JOIN snowflake.account_usage.tables tables
ON (
metrics.id = tables.table_id
AND metrics.table_schema_id = tables.table_schema_id
AND metrics.table_catalog_id = tables.table_catalog_id
)
WHERE tables.is_iceberg='YES';