CREATE ICEBERG TABLE

Erstellt eine neue Iceberg-Tabelle im aktuellen/angegebenen Schema oder ersetzt eine bestehende Iceberg-Tabelle. Iceberg-Tabellen kombinieren Features, die in Snowflake-Tabellen standardmäßig enthalten sind, wie z. B. schnelle SQL-Verarbeitung, Sicherheit und Autorisierung sowie Data Governance mit offenen Apache Iceberg-Metadaten und -Speichern.

Darüber hinaus unterstützt dieser Befehl die folgenden Varianten für Iceberg-Tabellen, die Snowflake als Katalog verwenden:

  • CREATE ICEBERG TABLE … AS SELECT (erstellt eine ausgefüllte Tabelle; auch als CTAS bezeichnet)

  • CREATE ICEBERG TABLE … LIKE (erstellt eine leere Kopie einer bestehenden Tabelle)

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 Konfigurieren eines externen Volumes für Iceberg-Tabellen.

Wenn Sie einen externen Iceberg-Katalog oder gar keinen Katalog verwenden, müssen Sie außerdem eine Katalogintegration für die Tabelle erstellen. Weitere Informationen dazu finden Sie unter Katalogintegration für Iceberg-Tabellen konfigurieren.

Siehe auch:

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

Unter diesem Thema:

Syntax

Snowflake als Iceberg-Katalog

-- Snowflake as the Iceberg catalog
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name> (
    -- Column definition
    <col_name> <col_type>
      [ inlineConstraint ]
      [ NOT NULL ]
      [ COLLATE '<collation_specification>' ]
      [ { DEFAULT <expr>
          | { AUTOINCREMENT | IDENTITY }
            [ { ( <start_num> , <step_num> )
                | START <num> INCREMENT <num>
              } ]
        } ]
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
      [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
      [ COMMENT '<string_literal>' ]

    -- Additional column definitions
    [ , <col_name> <col_type> [ ... ] ]

    -- Out-of-line constraints
    [ , outoflineConstraint [ ... ] ]
  )
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = 'SNOWFLAKE' ]
  BASE_LOCATION = '<relative_path_from_external_volume>'
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ CHANGE_TRACKING = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

Wobei:

inlineConstraint ::=
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE
    | PRIMARY KEY
    | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ]
  }
  [ <constraint_properties> ]
Copy

Weitere Details zu Inline-Einschränkungen finden Sie unter CREATE | ALTER TABLE … CONSTRAINT.

outoflineConstraint ::=
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ]
    | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ]
    | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ]
      REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ]
  }
  [ <constraint_properties> ]
Copy

Weitere Details zu Out-of-Line-Einschränkungen finden Sie unter CREATE | ALTER TABLE … CONSTRAINT.

Externer Iceberg-Katalog

-- External Iceberg catalog
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = '<catalog_integration_name>' ]
  externalCatalogParams
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]
Copy

Wobei:

externalCatalogParams (for AWS Glue Data Catalog) ::=
  CATALOG_TABLE_NAME = '<catalog_table_name>'
  [ CATALOG_NAMESPACE = '<catalog_namespace>' ]
Copy
externalCatalogParams (for Iceberg files in object storage) ::=
  METADATA_FILE_PATH = '<metadata_file_path>'
Copy

Syntaxvariante

Die folgende Syntaxvariante wird für das Erstellen von Iceberg-Tabellen unterstützt, die Snowflake als Katalog verwenden.

CREATE ICEBERG TABLE … AS SELECT (auch als CTAS bezeichnet)

Erstellt eine neue Tabelle, die mit den von einer Abfrage zurückgegebenen Daten gefüllt ist:

CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ]
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ COPY GRANTS ]
  AS SELECT <query>
  [ ... ]
Copy

Eine Maskierungsrichtlinie kann auf eine Spalte in einer CTAS-Anweisung angewendet werden. Geben Sie die Maskierungsrichtlinie nach dem Datentyp der Spalte an. In ähnlicher Weise kann eine Zeilenzugriffsrichtlinie auf die Tabelle angewendet werden. Beispiel:

CREATE ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] )
  ...
  [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] )
  AS SELECT <query>
  [ ... ]
Copy

Bemerkung

In einer CTAS-Anweisung ist die COPY GRANTS-Klausel nur gültig, wenn sie mit der OR REPLACE-Klausel kombiniert wird. COPY GRANTS kopiert Berechtigungen aus der Tabelle, die durch CREATE OR REPLACE ersetzt wird (falls bereits vorhanden), nicht aus den Quelltabellen, die in der SELECT-Anweisung abgefragt werden. CTAS mit COPY GRANTS ermöglicht das Überschreiben einer Tabelle mit einem neuen Datensatz unter Beibehaltung der für diese Tabelle bestehenden Berechtigungen.

Weitere Informationen zu COPY GRANTS finden Sie in diesem Dokument unter COPY GRANTS.

CREATE ICEBERG TABLE … LIKE

Erstellt eine neue Tabelle mit den gleichen Spaltendefinitionen wie eine bestehende Tabelle, wobei aber keine Daten aus der bestehenden Tabelle kopiert werden. Spaltennamen, Typen, Standardwerte und Einschränkungen werden in die neue Tabelle kopiert:

CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> LIKE <source_table>
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ COPY GRANTS ]
  [ ... ]
Copy

Weitere Informationen zu COPY GRANTS finden Sie in diesem Dokument unter COPY GRANTS.

Bemerkung

CREATE TABLE … LIKE für eine Tabelle mit einer Sequenz mit automatischer Inkrementierung, auf die über eine Datenfreigabe zugegriffen wird, wird derzeit nicht unterstützt.

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.

col_name

Gibt den Spaltenbezeichner (Name) an. Alle Anforderungen an Tabellenbezeichner gelten auch für Spaltenbezeichner.

Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner und Reservierte und begrenzte Schlüsselwörter.

Bemerkung

Zusätzlich zu den standardmäßig reservierten Schlüsselwörtern können die folgenden Schlüsselwörter nicht als Spaltenbezeichner verwendet werden, da sie für Kontextfunktionen nach ANSI-Standard reserviert sind:

  • CURRENT_DATE

  • CURRENT_ROLE

  • CURRENT_TIME

  • CURRENT_TIMESTAMP

  • CURRENT_USER

Die Liste der reservierten Schlüsselwörter finden Sie unter Reservierte und begrenzte Schlüsselwörter.

col_type

Gibt den Datentyp für die Spalte an.

Weitere Informationen zu den Datentypen, die für Tabellenspalten angegeben werden können, finden Sie unter Datentypen von Iceberg-Tabellen.

query

Unterabfrage, die die Funktion INFER_SCHEMA aufruft und die Ausgabe als Array formatiert.

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.

CONSTRAINT ...

Definiert eine Inline- oder Out-of-Line-Beschränkung für die angegebenen Spalten in der Tabelle.

Weitere Informationen zur Syntax finden Sie unter CREATE | ALTER TABLE … CONSTRAINT. Weitere Informationen zu Einschränkungen finden Sie unter Einschränkungen.

COLLATE 'collation_specification'

Gibt die Sortierung an, die für Spaltenoperationen wie den Zeichenfolgenvergleich verwendet werden soll. Diese Option gilt nur für Textspalten (z. B. VARCHAR, STRING, TEXT usw.). Weitere Informationen dazu finden Sie unter Sortierungsspezifikationen.

DEFAULT ... oder . AUTOINCREMENT ...

Gibt an, ob der Spalte ein Standardwert zugewiesen wird, wenn ein Wert nicht über eine INSERT- oder CREATE TABLE AS SELECT-Anweisung angegeben wird:

DEFAULT expr

Der Standardwert für die Spalte wird durch den angegebenen Ausdruck definiert. Eine der folgenden Optionen ist möglich:

  • Konstantenwert

  • Sequenzreferenz (seq_name.NEXTVAL)

  • Einfacher Ausdruck, der einen skalaren Wert zurückgibt.

    Der einfache Ausdruck kann eine SQL-UDF (benutzerdefinierte Funktion) enthalten, wenn die UDF keine sichere UDF ist.

    Bemerkung

    Wenn sich ein Standardausdruck auf eine benutzerdefinierte SQL-UDF bezieht, wird die Funktion beim Erstellen der Tabelle durch deren Definition ersetzt. Wenn die benutzerdefinierte Funktion in Zukunft neu definiert wird, führt dies nicht zur Aktualisierung des Standardausdrucks der Spalte.

    Der einfache Ausdruck darf keine Referenzen enthalten auf:

    • Unterabfragen

    • Aggregationen

    • Fensterfunktionen

    • Sichere UDFs

    • UDFs die in anderen Sprachen als SQL geschrieben sind (z. B. Java, JavaScript).

    • Externe Funktionen

AUTOINCREMENT | IDENTITY } [ ( start_num , step_num ) | START num INCREMENT num } ]

AUTOINCREMENT und IDENTITY sind gleichbedeutend. Wenn einer von beiden verwendet wird, beginnt der Standardwert der Spalte mit einer angegebenen Zahl, und jeder nachfolgende Wert wird automatisch um den angegebenen Betrag erhöht.

Vorsicht

Snowflake verwendet eine Sequenz, um die Werte für eine automatisch inkrementierte Spalte zu generieren. Sequenzen haben Einschränkungen. Weitere Informationen dazu finden Sie unter Semantik von Sequenzen.

Der Standardwert für Start und Schritt/Erhöhung ist 1.

AUTOINCREMENT und IDENTITY können nur bei Spalten mit numerischen Datentypen verwendet werden.

Standard: Kein Wert (die Spalte hat keinen Standardwert)

Bemerkung

DEFAULT oder AUTOINCREMENT schließen sich gegenseitig aus. Für eine Spalte kann nur eine Option angegeben werden.

MASKING POLICY = policy_name

Gibt die Maskierungsrichtlinie an, die für eine Spalte festgelegt werden soll.

COMMENT 'string_literal'

Gibt einen Kommentar für die Spalte an.

(Beachten Sie, dass Kommentare auf Spaltenebene oder auf Tabellenebene angegeben werden können. Die Syntax ist jeweils leicht unterschiedlich.)

USING ( col_name , cond_col_1 ... )

Gibt die Argumente an, die an den SQL-Ausdruck für die bedingte Maskierungsrichtlinie übergeben werden sollen.

Die erste Spalte in der Liste gibt die Spalte für die Richtlinienbedingungen zur Maskierung oder Tokenisierung der Daten an. Sie muss mit der Spalte übereinstimmen, für die die Maskierungsrichtlinie festgelegt ist.

Die zusätzlichen Spalten geben an, welche Spalten ausgewertet werden sollen, um zu ermitteln, ob die Daten in der jeweiligen Zeile des Abfrageergebnisses maskiert oder tokenisiert werden sollen, wenn auf der ersten Spalte eine Abfrage ausgeführt wird.

Wenn die USING-Klausel weggelassen wird, behandelt Snowflake die bedingte Maskierungsrichtlinie wie eine normale Maskierungsrichtlinie.

CLUSTER BY ( expr [ , expr , ... ] )

Gibt eine oder mehrere Spalten oder Spaltenausdrücke in der Tabelle als Gruppierungsschlüssel an. Weitere Informationen dazu finden Sie unter Gruppierungsschlüssel und geclusterte Tabellen.

Standard: Kein Wert (für die Tabelle ist kein Gruppierungsschlüssel definiert)

Wichtig

Clustering wird nur für Tabellen unterstützt, die Snowflake als Iceberg-Katalog verwenden.

Gruppierungsschlüssel sind nicht für alle Tabellen vorgesehen oder empfehlenswert. Sie eignen sich vorrangig für sehr große Tabellen (d. h. im Multi-Terabyte-Bereich).

Bevor Sie Gruppierungsschlüssel für eine Tabelle angeben, sollten Sie sich erst mit Mikropartitionen vertraut machen. Weitere Informationen dazu finden Sie unter Grundlegendes zu Tabellenstrukturen in Snowflake.

DATA_RETENTION_TIME_IN_DAYS = integer

Gibt die Aufbewahrungsfrist für die Tabelle an, sodass Time Travel-Aktionen (SELECT, CLONE, UNDROP) für historische Daten in der Tabelle durchgeführt werden können. Weitere Informationen dazu finden Sie unter Verstehen und Verwenden von Time Travel und Verwenden von temporären und transienten Tabellen.

Eine ausführliche Beschreibung dieses Parameters auf Objektebene sowie weitere Informationen zu Objektparametern finden Sie unter Parameter.

Werte:

  • Standardausführung: 0 oder 1

  • Enterprise Edition:

    • 0 bis 90 für permanente Tabellen

    • 0 oder 1 für temporäre und transiente Tabellen

Standard:

  • Standardausführung: 1

  • Enterprise Edition (oder höher): 1 (es sei denn, es wurde ein anderer Standardwert auf Schema-, Datenbank- oder Kontoebene angegeben).

Bemerkung

Der Wert 0 deaktiviert Time Travel für die Tabelle.

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Objektparameter, der die maximale Anzahl von Tagen angibt, für die Snowflake die Datenaufbewahrungsfrist für die Tabelle verlängern kann, um zu verhindern, dass Streams auf der Tabelle veraltet sind.

Eine detaillierte Beschreibung dieses Parameters finden Sie unter MAX_DATA_EXTENSION_TIME_IN_DAYS.

CHANGE_TRACKING = { TRUE | FALSE }

Gibt an, ob die Änderungsverfolgung für die Tabelle aktiviert werden soll.

  • TRUE aktiviert die Änderungsverfolgung der Tabelle. Diese Einstellung fügt der Quelltabelle ein Paar ausgeblendeter Spalten hinzu und beginnt mit dem Speichern von Metadaten zur Änderungsverfolgung in den Spalten. Diese Spalten verbrauchen nur wenig Speicherplatz.

    Die Änderungsverfolgungsmetadaten können mithilfe der CHANGES-Klausel für SELECT-Anweisungen oder durch Erstellen und Abfragen eines oder mehrerer Streams der Tabelle abgefragt werden.

  • FALSE aktiviert die Änderungsverfolgung in der Tabelle nicht.

Standard: FALSE

DEFAULT_DDL_COLLATION = 'collation_specification'

Gibt eine Standardsortierungsspezifikation für die Spalten in der Tabelle an, einschließlich der Spalten, die der Tabelle in Zukunft hinzugefügt werden.

Weitere Informationen zu den Parametern finden Sie unter DEFAULT_DDL_COLLATION.

COPY GRANTS

Gibt an, dass die Zugriffsberechtigungen aus der Originaltabelle beibehalten werden, wenn eine neue Tabelle mit einer der folgenden CREATE TABLE-Varianten erstellt wird:

  • CREATE OR REPLACE TABLE

  • CREATE TABLE … LIKE

  • CREATE TABLE … CLONE

Der Parameter kopiert alle Berechtigungen, mit Ausnahme von OWNERSHIP, aus der bestehenden Tabelle in die neue Tabelle. Die neue Tabelle übernimmt keine zukünftigen Berechtigungen, die für den Objekttyp im Schema definiert werden. Standardmäßig ist die Rolle, die die Anweisung CREATE TABLE ausführt, Eigentümer der neuen Tabelle.

Wenn der Parameter nicht in der CREATE ICEBERG TABLE-Anweisung enthalten ist, übernimmt die neue Tabelle keine expliziten Zugriffsrechte für die ursprüngliche Tabelle, übernimmt aber alle zukünftigen Berechtigungszuweisungen, die für den Objekttyp in dem Schema definiert werden.

Hinweis:

  • Mit Datenfreigabe:

    • Wenn die vorhandene Tabelle für ein anderes Konto freigegeben wurde, wird auch die Ersatztabelle freigegeben.

    • Wenn die vorhandene Tabelle mit Ihrem Konto als Datenkonsument geteilt wurde und der Zugriff auf andere Rollen im Konto weiter gewährt wurde (unter Verwendung von GRANT IMPORTED PRIVILEGES auf der übergeordneten Datenbank), wird auch der Zugriff auf die Ersatztabelle gewährt.

  • Die SHOW GRANTS-Ausgabe für die Ersetzungstabelle listet den Berechtigungsempfänger für die kopierten Berechtigungen als Rolle auf, die die CREATE ICEBERG TABLE-Anweisung ausgeführt hat, mit dem aktuellen Zeitstempel für den Zeitpunkt, an dem die Anweisung ausgeführt wurde.

  • Die Operation zum Kopieren von Berechtigungen erfolgt atomar im Befehl CREATE ICEBERG TABLE (d. h. innerhalb derselben Transaktion).

COMMENT = 'string_literal'

Gibt einen Kommentar für die Tabelle an.

Standard: Kein Wert

(Beachten Sie, dass Kommentare auf Spaltenebene oder auf Tabellenebene angegeben werden können. Die Syntax ist jeweils leicht unterschiedlich.)

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

Gibt die Zeilenzugriffsrichtlinie an, die für eine Tabelle festgelegt werden soll.

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.

Snowflake-Katalogparameter

CATALOG = 'SNOWFLAKE'

Gibt Snowflake als Iceberg-Katalog an. Snowflake übernimmt die gesamte Lebenszykluswartung der Tabelle, wie z. B. die Komprimierung.

BASE_LOCATION = 'relative_path_from_external_volume'

Gibt einen relativen Pfad vom EXTERNAL_VOLUME-Speicherort der Tabelle zu einem Verzeichnis an, in das Snowflake Tabellendaten und Metadaten schreiben kann.

Dieser Parameter kann nach dem Erstellen der Tabelle nicht mehr geändert werden.

Externe Katalogparameter (externalCatalogParams)

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.

AWS Glue

CATALOG_TABLE_NAME = 'catalog_table_name'

Gibt den Tabellennamen an, wie er von Ihrem AWS Glue-Datenkatalog erkannt wird. Ein Beispiel für die Verwendung von CATALOG_TABLE_NAME beim Erstellen einer Iceberg-Tabelle finden Sie unter Beispiele (unter diesem Thema). Dieser Parameter kann nach dem Erstellen der Tabelle nicht mehr geändert werden.

CATALOG_NAMESPACE = 'catalog_namespace'

Gibt optional den Namespace (z. B. my_glue_database) für die AWS Glue-Datenkatalogquelle an und überschreibt den Standard-Namespace des Katalogs, der mit der Katalogintegration angegeben wurde. Durch die Angabe eines Namespace auf Tabellenebene können Sie eine einzige Katalogintegration für AWS Glue verwenden, um Iceberg-Tabellen in verschiedenen Datenbanken zu erstellen.

Wenn nicht angegeben, verwendet die Tabelle den Standard-Katalog-Namespace, der mit der Katalogintegration verbunden ist.

Iceberg-Dateien im Objektspeicher

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

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.

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

  • 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.

  • Cloud- und regionsübergreifende Iceberg-Tabellen werden derzeit nicht unterstützt, wenn Sie Snowflake als Iceberg-Katalog verwenden. Wenn CREATE ICEBERG TABLE eine Fehlermeldung wie "External volume <Name_des_Volumes> must have a STORAGE_LOCATION defined in the local region ..." zurückgibt, stellen Sie sicher, dass Ihr externes Volume einen aktiven Speicherort in derselben Region wie Ihr Snowflake-Konto angibt.

  • 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.

  • CREATE TABLE … LIKE:

    • Wenn die Quelltabelle Gruppierungsschlüssel hat, dann hat auch die neue Tabelle Gruppierungsschlüssel. Standardmäßig wird Automatic Clustering für die neue Tabelle nicht angehalten – auch wenn Automatic Clustering für die Quelltabelle angehalten wurde.

  • CREATE TABLE … AS SELECT (CTAS):

    • Wenn Gruppierungsschlüssel in einer CTAS-Anweisung angegeben werden, gilt Folgendes:

      • Spaltendefinitionen sind erforderlich und müssen in der Anweisung ausdrücklich angegeben werden.

      • Standardmäßig wird Automatic Clustering für die neue Tabelle nicht angehalten – auch wenn Automatic Clustering für die Quelltabelle angehalten wurde.

      Die ORDER BY-Unterklausel in einer CREATE TABLE-Anweisung hat keinen Einfluss auf die Reihenfolge der Zeilen, die von zukünftigen SELECT-Anweisungen auf dieser Tabelle zurückgegeben werden. Um die Reihenfolge der Zeilen in zukünftigen SELECT-Anweisungen festzulegen, verwenden Sie in diesen Anweisungen eine ORDER BY-Unterklausel.

  • 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 mit Snowflake als Katalog erstellen

In diesem Beispiel wird eine Iceberg-Tabelle mit Snowflake als Iceberg-Katalog erstellt. Die resultierende Tabelle wird von Snowflake verwaltet und unterstützt Lese- und Schreibzugriff. Die Anweisung gibt einen Wert für den Parameter BASE_LOCATION an. Damit wird Snowflake mitgeteilt, wohin Tabellendaten und Metadaten auf dem externen Datenträger geschrieben werden sollen.

CREATE ICEBERG TABLE my_iceberg_table (amount int)
  CATALOG='SNOWFLAKE'
  EXTERNAL_VOLUME='my_external_volume'
  BASE_LOCATION='my/relative/path/from/extvol';
Copy

Iceberg-Tabelle mit AWS Glue als Katalog erstellen

In diesem Beispiel wird eine Iceberg-Tabelle erstellt, die den AWS Glue-Datenkatalog verwendet. Um den Standard-Katalog-Namespace zu überschreiben und einen Katalog-Namespace für die Tabelle festzulegen, verwendet die Anweisung den optionalen Parameter CATALOG_NAMESPACE.

CREATE ICEBERG TABLE glue_iceberg_table
  EXTERNAL_VOLUME='glue_catalog_volume'
  CATALOG='glue_catalog_integration'
  CATALOG_TABLE_NAME='my_glue_catalog_table'
  CATALOG_NAMESPACE='icebergcatalogdb2';
Copy

Iceberg-Tabelle aus Iceberg-Metadaten im Objektspeicher erstellen

In diesem Beispiel wird eine Iceberg-Tabelle aus Iceberg-Metadaten erstellt, die in einem externen Cloudspeicher gespeichert sind. Dabei wird auch ein relativer Pfad zu den Tabellenmetadaten auf dem externen Datenträger angegeben.

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 "exvol_lower" und "catint_lower" 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 = '"exvol_lower"'
  CATALOG = '"catint_lower"'
  METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
Copy