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

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

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"}                         |
+-----------------------------------------------------------------------------------------------------------+

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

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

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