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. Die Aktualisierungsoperation (Refresh) der Tabelle hält die Tabelle mit allen Änderungen synchron, die in AWS Glue auftreten.
Bei diesem Typ von Iceberg-Tabelle geben Sie im Befehl keinen Pfad zur Metadatendatei an.
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.
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';