Apache Iceberg™-Tabellen verwalten

Apache Iceberg™-Tabellen in Snowflake verwalten:

Sie können auch eine Iceberg-Tabelle, die einen externen Katalog verwendet, in eine Tabelle konvertieren, die Snowflake als Iceberg-Katalog verwendet. Weitere Informationen dazu finden Sie unter Apache Iceberg™-Tabelle konvertieren, um Snowflake als Katalog zu verwenden.

Eine 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;
Copy

DML-Befehle mit von Snowflake verwalteten Tabellen verwenden

Iceberg-Tabellen, die Snowflake als Katalog verwenden, unterstützen vollständig Befehle der Datenbearbeitungssprache (DML):

Sie können auch mit COPY INTO <Tabelle> oder mit Snowpipe Daten in eine von Snowflake verwaltete Tabelle kopieren.

Beispiel: Eine Tabelle aktualisieren

Sie können INSERT- und UPDATE- Anweisungen verwenden, um von Snowflake verwaltete Iceberg-Tabellen zu ändern.

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;
Copy

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.

Bei Tabellen, die nicht von Snowflake verwaltet werden, gibt die Funktion Informationen zum letzten aktualisierten Snapshot zurück.

Beispiel:

SELECT SYSTEM$GET_ICEBERG_TABLE_INFORMATION('db1.schema1.it1');
Copy

Ausgabe:

+-----------------------------------------------------------------------------------------------------------+
| SYSTEM$GET_ICEBERG_TABLE_INFORMATION('DB1.SCHEMA1.IT1')                                                   |
|-----------------------------------------------------------------------------------------------------------|
| {"metadataLocation":"s3://mybucket/metadata/v1.metadata.json","status":"success"}                         |
+-----------------------------------------------------------------------------------------------------------+

Tabellen warten, die einen externen Katalog verwenden

Sie können Wartungsoperationen auf Iceberg-Tabellen ausführen, die einen externen Katalog verwenden.

Die Wartungsoperationen umfassen Folgendes:

  • Snapshots ablaufen lassen

  • Alte Metadaten-Dateien entfernen

  • Datendateien komprimieren

Wichtig

Um Ihre Iceberg-Tabelle mit externen Änderungen synchron zu halten, ist es wichtig, dass Sie Ihren Snowflake-Aktualisierungsplan mit der Tabellenwartung abstimmen. Aktualisieren Sie die Tabelle jedes Mal, wenn Sie eine Wartungsoperation ausführen.

Informationen zur Wartung von Iceberg-Tabellen, die nicht von Snowflake verwaltet werden, finden Sie in der Apache Iceberg-Dokumentation unter Wartung.

Tabellen-Metadaten aktualisieren

Wenn Sie einen externen Iceberg-Katalog verwenden, können Sie die Metadaten der Tabelle mit dem Befehl ALTER ICEBERG TABLE … REFRESH aktualisieren. Durch das Aktualisieren der Tabellenmetadaten werden die Metadaten mit den jüngsten Tabellenänderungen synchronisiert.

Aktualisieren der Metadaten für eine Tabelle

Das folgende Beispiel aktualisiert manuell die Metadaten für eine Tabelle, die einen externen Katalog verwendet (z. B. AWS Glue oder Delta). Durch das Aktualisieren der Tabelle wird die Tabelle mit allen Änderungen, die im Remote-Katalog vorgenommen wurden, synchronisiert.

Bei diesem Typ von Iceberg-Tabelle geben Sie im Befehl keinen Pfad zur Metadatendatei an.

ALTER ICEBERG TABLE my_iceberg_table REFRESH;
Copy

Aktualisieren Sie die Metadaten für eine aus Iceberg-Dateien erstellte Tabelle

Im folgenden Beispiel wird eine Tabelle manuell aktualisiert, die aus Iceberg-Metadatendateien in einem externen Cloudspeicherort erstellt wurde, wobei der relative Pfad zu einer Metadatendatei ohne Schrägstrich (/) angegeben wird. Die Metadatendatei definiert die Daten in der Tabelle nach dem Aktualisieren.

ALTER ICEBERG TABLE my_iceberg_table REFRESH 'metadata/v1.metadata.json';
Copy

Speichermetriken abrufen

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';
Copy