CREATE ICEBERG TABLE (Snowflake als Iceberg-Katalog)¶
Erstellt oder ersetzt eine Apache Iceberg™-Tabelle, die Snowflake als Iceberg-Katalog im aktuellen/angegebenen Schema verwendet.
Darüber hinaus unterstützt dieser Befehl die folgenden Varianten:
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 Externes Volume 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> (
-- Column definition
<col_name> <col_type>
[ inlineConstraint ]
[ NOT NULL ]
[ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
[ [ WITH ] PROJECTION POLICY <policy_name> ]
[ [ 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 [ ... ] ]
)
[ PARTITION BY ( partitionExpression [, partitionExpression , ...] ) ]
[ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = 'SNOWFLAKE' ]
[ BASE_LOCATION = '<directory_for_table_files>' ]
[ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
[ CATALOG_SYNC = '<open_catalog_integration_name>']
[ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] AGGREGATION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
[ ENABLE_DATA_COMPACTION = { TRUE | FALSE } ]
Wobei:
inlineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } [ <constraint_properties> ]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> ]Bemerkung
Snowflake repräsentiert Spalten, die als PRIMARY KEY definiert sind, als Bezeichnerfelder in den Iceberg-Metadaten dar. Die IDs für diese Spalten werden in den Metadaten als Bezeichnerfeld-IDs eingefügt.
Snowflake erzwingt keine NOT NULL- und UNIQUE-Einschränkungen auf PRIMARY KEY-Spalten für Iceberg-Tabellen.
Weitere Details zu Out-of-Line-Einschränkungen finden Sie unter CREATE | ALTER TABLE … CONSTRAINT.
partitionExpression ::= <col_name> -- identity transform | BUCKET ( <num_buckets> , <col_name> ) | TRUNCATE ( <width> , <col_name> ) | YEAR ( <col_name> ) | MONTH ( <col_name> ) | DAY ( <col_name> ) | HOUR ( <col_name> )
Syntaxvariante¶
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. Setzen Sie die AS SELECT-Klausel an das Ende der Anweisung.
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ] [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ] [ EXTERNAL_VOLUME = '<external_volume_name>' ] [ CATALOG = 'SNOWFLAKE' ] [ BASE_LOCATION = '<relative_path_from_external_volume>' ] [ COPY GRANTS ] [ ... ] AS SELECT <query>
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> [ , ... ] ) [ EXTERNAL_VOLUME = '<external_volume_name>' ] [ CATALOG = 'SNOWFLAKE' ] [ BASE_LOCATION = '<directory_for_table_files>' ] [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] ) [ ... ] AS SELECT <query>
Bemerkung
In einer CTAS ist der COPY GRANTS-Parameter nur in Verbindung mit der OR REPLACE-Klausel gültig. 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 zum COPY GRANTS-Parameter finden Sie unter COPY GRANTS in diesem Dokument.
Weitere Informationen zu dieser Syntaxvariante finden Sie in den Nutzungshinweisen.
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 ] [ ... ]
Weitere Informationen zum COPY GRANTS-Parameter finden Sie unter COPY GRANTS in diesem Dokument.
Bemerkung
CREATE TABLE … LIKE wird bei Tabellen mit einer automatischen Inkrementiersequenz, auf die über eine Datenfreigabe zugegriffen wird, nicht unterstützt.
Weitere Informationen zu dieser Syntaxvariante finden Sie in den Nutzungshinweisen.
CREATE ICEBERG TABLE … CLONE¶
Erstellt eine neue Iceberg-Tabelle mit denselben Spaltendefinitionen und mit allen vorhandenen Daten aus der Quelltabelle, ohne die Daten tatsächlich zu kopieren. Sie können diese Variante auch verwenden, um eine Tabelle zu einem bestimmten Zeitpunkt oder Zeitpunkt in der Vergangenheit zu klonen (mit Time Travel):
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <name> CLONE <source_iceberg_table> [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ] [COPY GRANTS] ...
Bemerkung
Wenn die Anweisung eine bestehende Iceberg-Tabelle mit demselben Namen ersetzt, kopiert Snowflake die Berechtigungen aus der Tabelle, die ersetzt wird. Wenn es keine Tabelle mit diesem Namen gibt, kopiert Snowflake die Berechtigungen aus der zu klonenden Quelltabelle.
Weitere Informationen zum COPY GRANTS-Parameter finden Sie unter COPY GRANTS in diesem Dokument.
Weitere Informationen zum Klonen finden Sie unter CREATE <Objekt> … CLONE und Klonen und Apache Iceberg™-Tabellen.
Erforderliche Parameter¶
table_nameGibt 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_nameGibt 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 beschränkte 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_DATECURRENT_ROLECURRENT_TIMECURRENT_TIMESTAMPCURRENT_USER
Die Liste der reservierten Schlüsselwörter finden Sie unter Reservierte und beschränkte Schlüsselwörter.
col_typeGibt den Datentyp für die Spalte an.
Weitere Informationen zu den Datentypen, die für Tabellenspalten angegeben werden können, finden Sie unter Datentypen für Apache Iceberg™-Tabellen.
Bemerkung
Sie können
floatoderdoublenicht als Primärschlüssel verwenden (in Übereinstimmung mit der Apache Iceberg-Spezifikation).
Optionale Parameter¶
BASE_LOCATION = 'directory_for_table_files'Der Pfad zu einem Verzeichnis, das Snowflake verwendet, um die Schreibpfade für die Daten- und Metadatendateien der Tabelle zu erstellen. Geben Sie einen relativen Pfad zum Speicherort der Tabelle
EXTERNAL_VOLUMEan.Wenn nicht angegeben, erstellt Snowflake einen Schreibpfad anhand von Attributen wie dem Wert des Parameters BASE_LOCATION_PREFIX und dem Tabellennamen.
Weitere Informationen dazu finden Sie unter Daten- und Metadatenverzeichnisse.
Dieses Verzeichnis kann nach dem Erstellen der Tabelle nicht mehr geändert werden.
TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }'-
Gibt eine Zielgröße der Parquet-Datei für die Tabelle an.
'{ 16MB | 32MB | 64MB | 128MB }'gibt eine feste Zieldateigröße für die Tabelle an.'AUTO'funktioniert je nach Tabellentyp unterschiedlich:Snowflake-verwaltete Tabellen: AUTO gibt an, dass Snowflake die Dateigröße für die Tabelle auf Grundlage von Tabellenmerkmalen wie Größe, DML-Muster, Datenaufnahme-Workload und Clustering-Konfiguration wählen soll. Snowflake passt die Dateigröße automatisch an, beginnend mit 16 MB, um die Leistung beim Lesen und Schreiben in Snowflake zu verbessern. Verwenden Sie diese Option, um die Tabellenleistung in Snowflake zu optimieren.
Extern verwaltete Tabellen: AUTO gibt an, dass Snowflake aggressiv auf die größte Dateigröße skalieren soll (128 MB).
Weitere Informationen dazu finden Sie unter Zieldateigröße festlegen.
Standard: AUTO
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.
MASKING POLICY = policy_nameGibt die Maskierungsrichtlinie an, die für eine Spalte festgelegt werden soll.
PROJECTION POLICY policy_nameGibt die Projektionsrichtlinie 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 eine Abfrage auf der ersten Spalte eine Auswahl vornimmt.
Wenn die USING-Klausel weggelassen wird, behandelt Snowflake die bedingte Maskierungsrichtlinie wie eine normale Maskierungsrichtlinie.
PARTITION BY = ( partitionExpression [ , partitionExpression , ... ] )Gibt einen oder mehrere Partitionsausdrücke an.
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.
Beachten Sie bei Verwendung der Varianten-Syntax (LIKE, AS SELECT) die Hinweise zur Verwendung der Varianten-Syntax.
Standard: Kein Wert (für die Tabelle ist kein Gruppierungsschlüssel definiert)
Wichtig
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.
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 = 'SNOWFLAKE'Gibt Snowflake als Iceberg-Katalog an. Snowflake übernimmt die gesamte Lebenszykluswartung der Tabelle, wie z. B. die Komprimierung.
CATALOG_SYNC = 'open_catalog_integration_name'Gibt optional den Namen einer Katalogintegration an, die für Snowflake Open Catalog konfiguriert wurde. Falls angegeben, synchronisiert Snowflake die Tabelle mit einem externen Katalog in Ihrem Snowflake Open Catalog-Konto. Weitere Informationen zur Synchronisierung von Snowflake-verwalteten Iceberg-Tabellen mit Open Catalog finden Sie unter Eine Snowflake-verwaltete Tabelle mit Snowflake Open Catalog synchronisieren.
Weitere Informationen zu diesem Parameter finden Sie unter CATALOG_SYNC.
STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }Gibt die Speicherserialisierungsrichtlinie für die Tabelle an. Wenn dies bei der Tabellenerstellung nicht angegeben wird, erbt die Tabelle den auf Schema-, Datenbank- oder Kontoebene eingestellten Wert. Wenn der Wert auf keiner Ebene angegeben wird, verwendet die Tabelle den Standardwert.
Sie können den Wert dieses Parameters nach der Erstellung der Tabelle nicht mehr ändern.
COMPATIBLE: Snowflake führt eine Codierung und Komprimierung durch, die die Interoperabilität mit Computing-Engines von Drittanbietern sicherstellt.OPTIMIZED: Snowflake führt die Codierung und Komprimierung aus, um eine optimale Tabellenperformance in Snowflake sicherzustellen.
Standard:
OPTIMIZED
DATA_RETENTION_TIME_IN_DAYS = integerGibt die Aufbewahrungsfrist für eine Snowflake-verwaltete 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.
Eine ausführliche Beschreibung dieses Parameters auf Objektebene sowie weitere Informationen zu Objektparametern finden Sie unter Parameter.
Werte:
Standardausführung:
0oder1Enterprise Edition:
0bis90für permanente Tabellen
Standard:
Standardausführung:
1Enterprise Edition (oder höher):
1(es sei denn, es wurde ein anderer Standardwert auf Schema-, Datenbank- oder Kontoebene angegeben).
Bemerkung
Der Wert
0deaktiviert Time Travel für die Tabelle.
MAX_DATA_EXTENSION_TIME_IN_DAYS = integerObjektparameter, 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.
TRUEaktiviert 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.
FALSEaktiviert die Änderungsverfolgung in der Tabelle nicht.
Standard: FALSE
COPY GRANTSGibt 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.
Anmerkung:
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 PRIVILEGESauf 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 an. Sie können einen Kommentar auf Spaltenebene oder auf Tabellenebene angeben. Die Syntax ist jeweils leicht unterschiedlich.
Standard: Kein Wert
ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )Gibt die Zeilenzugriffsrichtlinie an, die für eine Tabelle festgelegt werden soll.
AGGREGATION POLICY policy_nameGibt die Aggregationsrichtlinie 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-Kontingent für Objekte.
WITH CONTACT ( purpose = contact [ , purpose = contact ...] )Verknüpfen Sie das neue Objekt mit einem oder mehreren Kontakten.
ENABLE_DATA_COMPACTION = { TRUE | FALSE }Gibt an, ob Snowflake die Datenkomprimierung für die Tabelle aktivieren soll.
TRUE: Snowflake führt die Datenkomprimierung für die Tabelle durch.FALSE: Snowflake führt keine Datenkomprimierung für die Tabelle durch.
Standard:
TRUEWeitere Informationen dazu finden Sie unter ENABLE_DATA_COMPACTION und Datenkomprimierung festlegen.
Parameter für Partitionsausdrücke (partitionExpression)¶
Weitere Informationen zur Partitionierung von Iceberg-Tabellen finden Sie unter Iceberg-Partitionierung.
col_nameGibt den Bezeichner (Name) für die zu partitionierende Quellspalte an.
Gibt bei alleiniger Verwendung ohne eine Transformation wie YEAR eine Identitätstransformation für die Quellspalte an. Weitere Informationen finden Sie unter Identität.
BUCKETGibt eine Bucket-Transformation an. Weitere Informationen dazu finden Sie unter Details zur Bucket-Transformation.
num_bucketsgibt die Anzahl der Buckets an, in die die Daten gruppiert werden sollen.TRUNCATEGibt eine Abschneiden-Transformation an, die die Daten auf der Grundlage der abgeschnittenen Werte der angegebenen Quellspalte partitioniert. Weitere Informationen dazu finden Sie unter Details zur Abschneiden-Transformation.
YEARGibt eine Jahrestransformation an, die das Jahr aus einem Datums- oder Zeitstempelwert einer Quellspalte extrahiert. Weitere Informationen dazu finden Sie unter Partitionstransformationen.
MONTHGibt eine Monatstransformation an. Weitere Informationen dazu finden Sie unter Partitionstransformationen.
DAYGibt eine Tagestransformation an, die den Tag aus einem Datums- oder Zeitstempelwert einer Quellspalte extrahiert. Weitere Informationen dazu finden Sie unter Partitionstransformationen.
HOURGibt eine Stundentransformation an, die die Stunde aus einem Zeitstempelwert einer Quellspalte extrahiert. Weitere Informationen dazu finden Sie unter Partitionstransformationen.
Anforderungen an die Zugriffssteuerung¶
Eine Rolle, die zur Ausführung dieser Operation 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. |
USAGE-Berechtigung für die übergeordnete Datenbank und das Schema ist erforderlich, um Operationen an einem beliebigen Objekt in einem Schema durchzuführen. Beachten Sie, dass eine Rolle, die eine beliebige Berechtigung für ein Schema erhalten hat, es dieser Rolle erlaubt, das Schema aufzulösen. Zum Beispiel kann eine Rolle, der die CREATE-Berechtigung für ein Schema gewährt wurde, Objekte in diesem Schema erstellen, ohne auch USAGE für dieses Schema gewährt bekommen zu haben.
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:
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 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).
Um eine Iceberg-Tabelle mit der USING TEMPLATE-Klausel (und von der INFER_SCHEMA-Ausgabe abgeleiteten Spaltendefinitionen) zu erstellen, müssen Sie
KIND => 'ICEBERG'für die Funktion INFER_SCHEMA angeben.
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 REPLACEist 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.
Die
OR REPLACE- undIF NOT EXISTS-Klauseln schließen sich gegenseitig aus. Sie können nicht beide in derselben Anweisung verwendet werden.Ä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.
Syntaxvarianten verwenden:
CREATE ICEBERG TABLE … LIKE:
Wenn Sie keinen Gruppierungsschlüssel angeben, erbt die Tabelle den Gruppierungsschlüssel der Quelltabelle (falls einer existiert).
Standardmäßig wird Automatic Clustering für die neue Tabelle nicht ausgesetzt – auch wenn Automatic Clustering für die Quelltabelle ausgesetzt wurde.
Für partitionierte Iceberg-Tabellen wird die Partitionierung der Quelltabelle ignoriert. Um dieses Verhalten zu überschreiben, geben Sie die PARTITION BY-Klausel mit dem Befehl an.
CREATE ICEBERG 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 ist Automatic Clustering für die neue Tabelle aktiviert, auch wenn Automatic Clustering für die Quelltabelle angehalten wurde.
Das Clustering der Daten erfolgt beim Erstellen der neuen Tabelle. Eine Clustertabelle generiert einen Abfrageplan, der eine Sortieroperation enthält, und die Erstellung dauert länger als die einer entsprechenden Tabelle, die nicht geclustert ist.
Alternativ können Sie mit einer ORDER BY-Klausel in der CTAS-Abfrage eine Tabelle mit Zeilen in sortierter Reihenfolge erstellen.
CREATE ICEBERG TABLE … CLONE:
Für partitionierte Iceberg-Tabellen behält die geklonte Tabelle die Partitionierungsdaten der Quelltabelle bei.
Metadaten:
Achtung
Kunden müssen sicherstellen, dass bei der Nutzung des Snowflake-Dienstes keine personenbezogenen Daten (außer für ein Objekt „User“), sensible Daten, exportkontrollierte Daten oder andere regulierte Daten als Metadaten eingegeben werden. Weitere Informationen dazu finden Sie unter Metadatenfelder in Snowflake.
Wenn Sie eine Tabelle erstellen, die Sie mit Snowflake Open Catalog synchronisieren möchten, sollten Sie Folgendes beachten:
Wichtig
Um sicherzustellen, dass die Zugriffsrechte im Open Catalog in der Tabelle korrekt durchgesetzt werden, achten Sie vor dem Erstellen der Tabelle darauf, dass sie bestimmte Bedingungen erfüllt. Diese Bedingungen beziehen sich auf die Hierarchie der Verzeichnisstruktur für den Katalog. Informationen dazu, wie Sie diese Bedingungen und Anweisungen erfüllen können, finden Sie in dem Hinweis Kataloginhalt organisieren in der Snowflake Open Catalog-Dokumentation.
Informationen zur Behebung von Problemen bei der Erstellung einer von Snowflake verwalteten Tabelle finden Sie unter Sie können keine von Snowflake verwaltete Tabelle erstellen.
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.
Das Beispiel legt den Tabellennamen (my_iceberg_table) als BASE_LOCATION fest. Auf diese Weise schreibt Snowflake Daten und Metadaten in ein Verzeichnis, das den Namen der Tabelle in Ihrem externen Volume-Speicherort verwendet.
CREATE ICEBERG TABLE my_iceberg_table (amount int)
CATALOG = 'SNOWFLAKE'
EXTERNAL_VOLUME = 'my_external_volume'
BASE_LOCATION = 'my_iceberg_table';
Erstellen einer partitionierten Iceberg-Tabelle¶
Im folgenden Beispiel wird eine von Snowflake verwaltete Iceberg-Tabelle erstellt, indem der Wert einer Spalte namens c_nationkey, um die Tabelle zu partitionieren:
CREATE OR REPLACE ICEBERG TABLE customer_iceberg_partitioned (
c_custkey INTEGER,
c_name STRING,
c_address STRING,
c_nationkey INTEGER,
c_phone STRING,
c_acctbal INTEGER,
c_mktsegment STRING,
c_comment STRING
)
PARTITION BY (c_nationkey)
EXTERNAL_VOLUME = 'my_ext_vol'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'customer_iceberg_partitioned';
Weitere Informationen dazu finden Sie unter Iceberg-Partitionierung.
Erstellen einer Iceberg-Tabelle mit der CTAS-Syntaxvariante¶
Dieses Beispiel verwendet die CREATE ICEBERG TABLE … AS SELECT-Syntaxvariante, um eine neue Iceberg-Tabelle aus einer Tabelle namens base_iceberg_table zu erstellen. Die AS SELECT-Klausel muss am Ende der Anweisung stehen.
CREATE OR REPLACE ICEBERG TABLE iceberg_table_copy (column1 int)
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'iceberg_table_copy'
AS SELECT * FROM base_iceberg_table;
Externes Volume mit Bezeichner in doppelten Anführungszeichen angeben¶
In diesem Beispiel wird eine Iceberg-Tabelle mit einem externen Volume erstellt, dessen Bezeichner doppelte Anführungszeichen enthält. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist die Groß-/Kleinschreibung zu beachten, sie enthalten auch häufig Sonderzeichen.
Der Bezeichner "external_volume_1" wird genau so angegeben, wie er erstellt wurde (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 table_with_quoted_external_volume
EXTERNAL_VOLUME = '"external_volume_1"'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'my/relative/path/from/external_volume';
