CREATE ICEBERG TABLE (Iceberg-Dateien im Objektspeicher)

Erstellt oder ersetzt eine Apache Iceberg™-Tabelle im aktuellen/angegebenen Schema unter Verwendung von Iceberg-Dateien im Objektspeicher (externer Cloudspeicher). Dieser Typ von Iceberg-Tabelle erfordert eine Katalogintegration.

Unter diesem Thema werden Iceberg-Tabellen einfach als „Tabellen“ bezeichnet, es sei denn, die Angabe von Iceberg-Tabellen vermeidet Verwechslungen.

Bemerkung

Bevor Sie eine Tabelle erstellen, müssen Sie das externe Volume erstellen, auf dem die Iceberg-Metadaten und -Datendateien gespeichert werden. Eine Anleitung dazu finden Sie unter Externes Volume konfigurieren.

Sie benötigen auch eine Katalogintegration für die Tabelle. Weitere Informationen dazu finden Sie unter Katalogintegration für Dateien im Objektspeicher konfigurieren.

Siehe auch:

ALTER ICEBERG TABLE, DROP ICEBERG TABLE, SHOW ICEBERG TABLES, DESCRIBE ICEBERG TABLE, UNDROP ICEBERG TABLE

Syntax

CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = '<catalog_integration_name>' ]
  METADATA_FILE_PATH = '<metadata_file_path>'
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

Erforderliche Parameter

table_name

Gibt den Bezeichner (den Namen) für die Tabelle an. Dieser muss für das Schema, in dem die Tabelle erstellt wird, eindeutig sein.

Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B. "My object"). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.

Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.

METADATA_FILE_PATH = 'metadata_file_path'

Gibt den relativen Pfad der Iceberg-Metadatendatei an, die für Spaltendefinitionen verwendet werden soll.

Wenn beispielsweise s3://mybucket_us_east_1/metadata/v1.metadata.json der vollständige Pfad zu Ihrer Metadatendatei ist und der Speicherort des externen Volumes s3://mybucket_us_east_1/ ist, geben Sie metadata/v1.metadata.json als Wert für METADATA_FILE_PATH an.

Vor Snowflake-Version 7.34 wurde dieser Parameter METADATA_FILE_NAME genannt.

Bemerkung

  • Fügen Sie keinen führenden Schrägstrich in den Dateipfad ein.

  • Ab Snowflake-Versionen 7.34 geben Sie keinen BASE_LOCATION-Speicher mehr an, um Tabelle aus Iceberg-Dateien im Objektspeicher zu erstellen.

    Vor Version 7.34 war ein Parameter namens BASE_LOCATION (in früheren Versionen auch FILE_PATH genannt) erforderlich, um aus Iceberg-Dateien im Objektspeicher eine Tabelle zu erstellen. Der Parameter gab einen relativen Pfad vom EXTERNAL_VOLUME-Speicherort an.

    Sie können weiterhin ein Skript oder eine Anweisung ausführen, die die alte Syntax verwendet. Wenn Sie dies tun, beachten Sie die folgenden Hinweise:

    • Die Parquet-Datendateien und Iceberg-Metadatendateien für die Tabelle müssen sich innerhalb des Speicherorts BASE_LOCATION befinden.

    • Um die Tabelle zu aktualisieren, müssen Sie einen Pfad relativ zu BASE_LOCATION angeben. Wenn der vollständige Pfad zu Ihrer Metadatendatei beispielsweise s3://mybucket_us_east_1/my_base_location/metadata/v1.metadata.json lautet, geben Sie für metadata-file-relative-path den Wert metadata/v1.metadata.json an.

      Weitere Informationen dazu finden Sie unter ALTER ICEBERG TABLE … REFRESH.

Optionale Parameter

EXTERNAL_VOLUME = 'external_volume_name'

Gibt den Bezeichner (Name) für das externe Volume an, auf dem die Iceberg-Tabelle ihre Metadatendateien und die Daten im Parquet-Format speichert. In Iceberg-Metadaten- und Iceberg-Manifest-Dateien sind das Tabellenschema, die Partitionen, die Snapshots und andere Metadaten gespeichert.

Wenn Sie diesen Parameter nicht angeben, wird für die Iceberg-Tabelle standardmäßig das externe Volume von Schema, Datenbank oder Konto verwendet. Das Schema hat Vorrang vor der Datenbank, und die Datenbank hat Vorrang vor dem Konto.

CATALOG = 'catalog_integration_name'

Gibt den Bezeichner (Name) der Katalogintegration für diese Tabelle an.

Wenn nichts angegeben wird, ist die Iceberg-Tabelle standardmäßig die Katalogintegration für das Schema, die Datenbank oder das Konto. Das Schema hat Vorrang vor der Datenbank, und die Datenbank hat Vorrang vor dem Konto.

REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }

Gibt an, ob in Abfrageergebnissen ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen (�) ersetzt werden sollen. Sie können diesen Parameter nur für Tabellen festlegen, die einen externen Iceberg-Katalog verwenden.

  • TRUE: Snowflake ersetzt ungültige UTF-8-Zeichen durch das Unicode-Ersetzungszeichen.

  • FALSE lässt ungültige UTF-8-Zeichen unverändert. Snowflake gibt eine Fehlermeldung an den Benutzer zurück, wenn es auf ein ungültiges UTF-8-Zeichen in einer Parquet-Datendatei stößt.

Wenn nichts angegeben wird, ist die Iceberg-Tabelle standardmäßig die Katalogintegration für das Schema, die Datenbank oder das Konto. Das Schema hat Vorrang vor der Datenbank, und die Datenbank hat Vorrang vor dem Konto.

Standard: FALSE

COMMENT = 'string_literal'

Gibt einen Kommentar für die Tabelle an.

Standard: Kein Wert

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

Gibt den Namen des Tags und den Wert der Tag-Zeichenfolge an.

Der Tag-Wert ist immer eine Zeichenfolge, die maximale 256 Zeichen lang sein kann.

Weitere Informationen zur Angabe von Tags in einer Anweisung finden Sie unter Tag-Kontingente für Objekte und Spalten.

Anforderungen an die Zugriffssteuerung

Eine Rolle, die zur Ausführung dieses SQL-Befehls verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE ICEBERG TABLE

Schema

CREATE EXTERNAL VOLUME

Konto

Erforderlich, um ein neues externes Volume zu erstellen.

USAGE

Externes Volume

Erforderlich, um auf ein vorhandenes externes Volume zu verweisen.

CREATE INTEGRATION

Konto

Erforderlich, um eine neuen Katalogintegration zu erstellen.

USAGE

Katalogintegration

Erforderlich, um auf eine bestehende Katalogintegration zu verweisen.

Beachten Sie, dass für die Bearbeitung eines Objekts in einem Schema auch die Berechtigung USAGE für die übergeordnete Datenbank und das Schema erforderlich ist.

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einer bestimmten Gruppe von Berechtigungen finden Sie unter Erstellen von kundenspezifischen Rollen.

Allgemeine Informationen zu Rollen und Berechtigungen zur Durchführung von SQL-Aktionen auf sicherungsfähigen Objekten finden Sie unter Übersicht zur Zugriffssteuerung.

Nutzungshinweise

  • Hinweise zur Ausführung dieses Befehls:

    • Wenn Sie Ihr externes Volume oder die Katalogintegration mit einem Bezeichner in doppelten Anführungszeichen erstellt haben, müssen Sie den Bezeichner genau so wie erstellt (einschließlich der doppelten Anführungszeichen) in Ihrer CREATE ICEBERG TABLE-Anweisung angeben. Fehlende Anführungszeichen können zu einem Object does not exist-Fehler (oder einer ähnlichen Art von Fehler) führen.

      Ein Beispiel dazu finden Sie im Abschnitt Beispiele (unter diesem Thema).

    • Ab Snowflake-Versionen 7.34 geben Sie keinen BASE_LOCATION-Speicher mehr an, um Tabelle aus Iceberg-Dateien im Objektspeicher zu erstellen.

      Vor Version 7.34 war ein Parameter namens BASE_LOCATION (in früheren Versionen auch FILE_PATH genannt) erforderlich, um aus Iceberg-Dateien im Objektspeicher eine Tabelle zu erstellen. Der Parameter gab einen relativen Pfad vom EXTERNAL_VOLUME-Speicherort an.

      Sie können weiterhin ein Skript oder eine Anweisung ausführen, die die alte Syntax verwendet. Wenn Sie dies tun, beachten Sie die folgenden Hinweise:

      • Die Parquet-Datendateien und Iceberg-Metadatendateien für die Tabelle müssen sich innerhalb des Speicherorts BASE_LOCATION befinden.

      • Um die Tabelle zu aktualisieren, müssen Sie einen Pfad relativ zu BASE_LOCATION angeben. Wenn der vollständige Pfad zu Ihrer Metadatendatei beispielsweise s3://mybucket_us_east_1/my_base_location/metadata/v1.metadata.json lautet, geben Sie für metadata-file-relative-path den Wert metadata/v1.metadata.json an.

        Weitere Informationen dazu finden Sie unter ALTER ICEBERG TABLE … REFRESH.

  • Hinweise zum Erstellen von Tabellen:

    • Ein Schema darf keine Tabellen und/oder Ansichten mit gleichem Namen enthalten. Beim Erstellen einer Tabelle:

      • Wenn im Schema bereits eine Ansicht mit dem gleichen Namen vorhanden ist, wird ein Fehler zurückgegeben und die Tabelle nicht erstellt.

      • Wenn bereits eine Tabelle mit dem gleichen Namen im Schema existiert, wird ein Fehler zurückgegeben, und die Tabelle wird nicht erstellt, es sei denn, das optionale Schlüsselwort OR REPLACE ist im Befehl enthalten.

    • CREATE OR REPLACE <Objekt>-Anweisungen sind atomar. Das heißt, wenn ein Objekt ersetzt wird, erfolgt das Löschen des alten Objekts und das Erstellen des neuen Objekts in einer einzigen Transaktion.

      Das bedeutet, dass alle Abfragen, die parallel zur Operation CREATE OR REPLACE ICEBERG TABLE ausgeführt werden, entweder die alte oder die neue Version der Tabelle verwenden.

    • Ähnlich wie bei reservierten Schlüsselwörtern können ANSI-reservierte Funktionsnamen (z. B. CURRENT_DATE, CURRENT_TIMESTAMP) nicht als Spaltennamen verwendet werden.

    • Wenn Sie eine Tabelle neu erstellen (mit dem optionalen Schlüsselwort OR REPLACE), wird deren Verlauf gelöscht, wodurch alle Streams auf der Tabelle veraltet sind. Ein veralteter Stream ist unlesbar.

  • Metadaten:

    Achtung

    Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „Benutzer“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.

Beispiele

Iceberg-Tabelle aus Iceberg-Metadaten im Objektspeicher erstellen

In diesem Beispiel wird eine Iceberg-Tabelle aus Iceberg-Metadaten-Dateien im Objektspeicher erstellt, indem ein relativer Pfad (ohne führenden Schrägstrich /) zu den Tabellen-Metadaten auf dem externen Volume angegeben wird.

CREATE ICEBERG TABLE my_iceberg_table
  EXTERNAL_VOLUME='my_external_volume'
  CATALOG='my_catalog_integration'
  METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy

Externes Volume oder Katalogintegration mit einem in Anführungszeichen gesetzten Bezeichner angeben

In diesem Beispiel wird eine Iceberg-Tabelle mit einem externen Volume und einer Katalogintegration erstellt, deren Bezeichner doppelte Anführungszeichen enthalten. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist die Groß-/Kleinschreibung zu beachten, sie enthalten auch häufig Sonderzeichen.

Die Bezeichner "external_volume_1" und "catalog_integration_1" werden genau so angegeben, wie sie erstellt wurden (einschließlich der doppelten Anführungszeichen). Fehlende Anführungszeichen können zu einem Object does not exist-Fehler (oder einer ähnlichen Art von Fehler) führen.

Weitere Informationen dazu finden Sie unter Bezeichner mit doppelten Anführungszeichen.

CREATE OR REPLACE ICEBERG TABLE itable_with_quoted_catalog
  EXTERNAL_VOLUME = '"external_volume_1"'
  CATALOG = '"catalog_integration_1"'
  METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy