CREATE ICEBERG TABLE (Iceberg REST Katalog)¶
Erzeugt oder ersetzt eine Apache Iceberg™ Tabelle im aktuellen/vorgegebenen Schema für einen Iceberg REST-Katalog.
Verwenden Sie diesen Befehl für die folgenden Szenarios:
Sie möchten einen Remote-Iceberg-Katalog verwenden, der der Open Source Apache Iceberg REST OpenAPI–Spezifikation entspricht.
Sie möchten eine Tabelle in Snowflake Open Catalog oder Apache Polaris™ abfragen. Weitere Informationen dazu finden Sie unter Abfrage einer Tabelle in Snowflake Open Catalog mit Snowflake.
Sie möchten eine extern verwaltete Tabelle in einer katalogverknüpften Datenbank erstellen. Siehe CREATE ICEBERG TABLE (katalogverknüpfte Datenbank).
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 Konfigurieren Sie eine Katalogintegration für Apache Iceberg™ REST-Kataloge oder Katalogintegration für Snowflake Open Catalog.
- 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>' ]
CATALOG_TABLE_NAME = '<rest_catalog_table_name>'
[ CATALOG_NAMESPACE = '<catalog_namespace>' ]
[ PATH_LAYOUT = { FLAT | HIERARCHICAL } ]
[ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
[ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
[ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
Wobei:
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 (katalogverknüpfte Datenbank)¶
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
[
--Column definition
<col_name> <col_type> [ DEFAULT <col_default> ]
[ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
-- Additional column definitions
[ , <col_name> <col_type> [ DEFAULT <col_default> ] [ ... ] ]
]
[ PARTITION BY ( partitionExpression [ , partitionExpression , ... ] ) ]
[ PATH_LAYOUT = { FLAT | HIERARCHICAL } ]
[ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
[ ICEBERG_VERSION = <integer> ]
[ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ BASE_LOCATION = '<path_to_directory_for_table_files>' ]
[ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
Wobei:
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> )
CREATE ICEBERG TABLE (katalogverknüpfte Datenbank) … AS SELECT¶
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ] [ ... ] AS SELECT <query>
Sie können eine Maskierungsrichtlinie auf eine Spalte in einer CTAS-Anweisung anwenden. Geben Sie die Maskierungsrichtlinie nach dem Datentyp der Spalte an. Beispiel:
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] ) [ ... ] AS SELECT <query>
Erforderliche Parameter¶
table_nameGibt den Bezeichner (Name) für die Tabelle in Snowflake an; 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.
Bemerkung
Um eine Liste von Tabellen oder Namespaces in Ihrem Remote-Katalog abzurufen, können Sie die folgenden Funktionen verwenden:
CATALOG_TABLE_NAME = 'rest_catalog_table_name'Gibt den Tabellennamen an, wie er von Ihrem externen Katalog erkannt wird. Dieser Parameter kann nicht mehr geändert werden, nachdem Sie die Tabelle erstellt haben.
Bemerkung
Geben Sie keinen Namespace mit dem Tabellennamen an (
mynamespace.mytable). Um einen Namespace für diese Tabelle anzugeben und den Standard-Namespace für die Katalogintegration zu überschreiben setzen, verwenden Sie den Parameter CATALOG_NAMESPACE.col_nameZum Erstellen einer Tabelle in einer katalogverknüpften Datenbank (Vorschau).
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 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_typeZum Erstellen einer Tabelle in einer katalogverknüpften Datenbank (Vorschau).
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 für Apache Iceberg™-Tabellen.
Optionale Parameter¶
col_name col_type DEFAULT col_default-
Gibt für eine Tabelle, die Iceberg v3 entspricht, sowohl den anfänglichen Standard als auch den Schreibstandard für die angegebene Spalte an. Wenn der Datentyp für die Spalte Zeichenfolge ist, müssen Sie den Standardwert in einfache Anführungszeichen setzen.
Wichtig
Wenn Sie einen Standardwert für eine Spalte angeben, müssen Sie einen statischen Wert angeben. Sie können keinen Ausdruck bzw. keine Funktion für den Wert angeben. Diese Anforderung entspricht der Iceberg v3-Spezifikation und gilt sowohl für den anfänglichen Standardwert als auch für den Schreibstandard.
Standardwerte sind ein Feature von Iceberg v3, sodass Sie keinen Standardwert für eine Tabelle angeben können, die Iceberg v2 entspricht. Weitere Informationen zur Verwendung von Standardwerten mit Iceberg-Tabellen finden Sie unter Verwenden von Iceberg-Tabellen mit Standardwerten.
Bemerkung
Um den Schreibstandard für die Spalte zu ändern, nachdem Sie die Tabelle erstellt haben, führen Sie ALTERICEBERGTABLE …ALTERCOLUMN …SETWRITEDEFAULT aus.
PARTITION BY = ( partitionExpression [ , partitionExpression , ... ] )Gibt einen oder mehrere Partitionsausdrücke an.
PATH_LAYOUT = { FLAT | HIERARCHICAL }-
Gibt das Pfad-Layout an, das Snowflake beim Schreiben von Parquet-Datendateien in die Tabelle verwendet:
FLAT: Snowflake schreibt alle Parquet-Datendateien unter demdata/-Verzeichnis für die Tabelle.HIERARCHICAL: Snowflake schreibt partitionierte Daten unter demdata/-Verzeichnis für die Tabelle mithilfe eines hierarchischen Pfadlayouts. Bei diesem Layout wird jede Partitionsspalte als Verzeichnisebene im Pfad dargestellt. Um diese Partitionsspalten zu definieren, verwenden Sie den Parameter PARTITION BY. Dieses Layout wird auch als „Hive-style“-Partitionierung bezeichnet.Wenn Sie PATH_LAYOUT =HIERARCHICAL ohne eine PARTITIONBY-Klausel angeben, speichert Snowflake die Parquet-Datendateien in einem vereinfachten Layoutpfad. Sie können das Layout des Pfads für eine bestehende Tabelle nicht ändern. Daher können Sie diesen Parameter auf HIERARCHICAL setzen, ohne eine PARTITIONBY-Klausel anzugeben, wenn Sie die Partitionierung mit hierarchischen Pfaden momentan nicht verwenden möchten, dies aber in Zukunft möglicherweise tun werden.
Bemerkung
Für extern verwaltete Tabellen, die Sie in einer Snowflake-Standarddatenbank erstellen, leitet Snowflake das vom Remotekatalog angegebene Partitionierungsschema ab und berücksichtigt es.
Standard:
FLAT
MASKING POLICY = policy_nameZum Erstellen einer Tabelle in einer katalogverknüpften Datenbank (Vorschau).
Gibt die Maskierungsrichtlinie an, die für eine Spalte festgelegt werden soll. Die Maskierungsrichtlinie muss zu einer Standard-Snowflake-Datenbank gehören (nicht zur katalogverknüpften Datenbank).
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 Sie diesen Parameter nicht angeben, wird in der Iceberg-Tabelle standardmäßig die Katalogintegration für das Schema, die Datenbank oder das Konto verwendet. Das Schema hat Vorrang vor der Datenbank, und die Datenbank hat Vorrang vor dem Konto.
CATALOG_NAMESPACE = 'catalog_namespace'Gibt optional den Namespace (z. B.
my_database) für die REST-Katalogquelle an. Indem Sie einen Namespace bei der Katalogintegration und dann auf Tabellenebene angeben, können Sie eine einzige REST-Katalogintegration verwenden, um Iceberg-Tabellen in verschiedenen Datenbanken zu erstellen. Wenn Sie bei der Tabelle keinen Namespace angeben, verwendet die Tabelle den Standard-Namespace des Katalogs, der mit der Katalogintegration verbunden ist.Wenn bei der Katalogintegration kein Standard-Namespace angegeben wurde, müssen Sie den Namespace für die REST-Katalogquelle angeben, um einen Katalog-Namespace für die Tabelle festzulegen.
Bemerkung
Um eine Liste von Tabellen oder Namespaces in Ihrem Remote-Katalog abzurufen, können Sie die folgenden Funktionen verwenden:
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
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.
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.FALSElä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
AUTO_REFRESH = { TRUE | FALSE }Gibt an, ob Snowflake den mit der Tabelle verbundenen externen Iceberg-Katalog automatisch nach Aktualisierungen der Metadaten abfragen soll.
Wenn für den Parameter
REFRESH_INTERVAL_SECONDSbei der Katalogintegration kein Wert angegeben wird, verwendet Snowflake ein Standardaktualisierungsintervall von 30 Sekunden.Weitere Informationen dazu finden Sie unter Automatische Aktualisierung.
Standard: FALSE
Bemerkung
Verwendung von AUTO_REFRESH durch INFER_SCHEMA wird nicht unterstützt.
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
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 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 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.
BASE_LOCATION = 'path_to_directory_for_table_files'Der Pfad zu einem Verzeichnis, das Snowflake verwendet, um Schreibpfade für die Daten- und Metadatendateien der Tabelle zu erstellen.
Wenn Sie ein
EXTERNAL_VOLUMEverwenden, muss dieser Pfad in die Speicherpfade aufgenommen werden, die für das externe Volumen angegeben sind, und Sie haben die Möglichkeit, einen relativen Pfad anzugeben. Wenn Sie einen relativen Pfad angeben, ist dieser relativ zurSTORAGE_BASE_URLfür das externe Volumen. Wenn nichts angegeben wird, erstellt Snowflake einen Schreibpfad mithilfe von Attributen wie dem Wert des BASE_LOCATION_PREFIX-Parameters und dem Tabellennamen.Wenn Sie Anmeldedaten verwenden, müssen Sie auch einen absoluten Pfad angeben.
Bemerkung
Dieses Verzeichnis kann nach dem Erstellen der Tabelle nicht mehr geändert werden.
ICEBERG_VERSION = integer-
Gibt die Version der Apache Iceberg™-Spezifikation an, der die Tabelle entspricht.
Vorsicht
Bevor Sie andere Engines verwenden, um die Formatversion einer Iceberg-Tabelle in den Tabelleneigenschaften auf Version 3 zu aktualisieren, stellen Sie sicher, dass die Tabelle nicht von Engines oder Anwendungen verwendet wird, die noch nicht Version 3 unterstützen. Das Herabstufen von Formatversionen wird in der Apache Iceberg-Spezifikation nicht unterstützt. Daher müssen alle Reader und Writer Version 3 unterstützen. Die Standardversion für Iceberg-Tabellen in Snowflake ist Version 2, die bei Bedarf auf Version 3 geändert werden kann. Die Verwendung von Snowflake zur Durchführung von In-Place-Versions-Upgrades wird derzeit nicht unterstützt.
Wenn Sie diesen Parameter nicht angeben, wird für die Iceberg-Tabelle standardmäßig die Iceberg-Version des Schemas, der Datenbank oder des Kontos verwendet. Das Schema hat Vorrang vor der Datenbank, und die Datenbank hat Vorrang vor dem Konto.
2: Die Tabelle entspricht der Iceberg-Version 2.3: Die Tabelle entspricht der Iceberg-Version 3.
Standard:
2Weitere Informationen zu diesem Parameter finden Sie unter ICEBERG_VERSION.
ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE }-
Gibt an, ob die Tabelle das Merge-on-Read-Verhalten verwendet.
Wenn Sie diesen Parameter nicht festlegen, verwendet die Iceberg-Tabelle standardmäßig das Merge-on-Read-Verhalten, das für das Schema, die Datenbank oder das Konto angegeben ist. Das Schema hat Vorrang vor der Datenbank, und die Datenbank hat Vorrang vor dem Konto.
- Werte:
TRUE: Die Tabelle verwendet das Merge-on-Read-Verhalten. Je nachdem, ob die Tabelle Version 2 oder Version 3 der Apache Iceberg™-Tabellenspezifikation entspricht, ist das Verhalten wie in der folgenden Liste beschrieben:Wenn die Tabelle Version 2 entspricht, verwenden Sie positionsbezogene Löschdateien.
Wenn die Tabelle Version 3 entspricht, verwenden Sie Löschvektoren.
FALSE: Die Tabelle verwendet das Copy-on-Write-Verhalten.Standard:
TRUEEine detaillierte Beschreibung dieses Parameters finden Sie unter ENABLE_ICEBERG_MERGE_ON_READ.
WITH CONTACT ( purpose = contact [ , purpose = contact ...] )Verknüpfen Sie das neue Objekt mit einem oder mehreren Kontakten.
Geben Sie die WITH CONTACT-Klausel nach allen anderen Klauseln mit Ausnahme der AS-Klausel an (wenn diese Klausel von diesem Befehl unterstützt wird).
Parameter für Partitionsausdrücke (partitionExpression)¶
Snowflake unterstützt alle Partitionstransformationen in Version 2 der Apache Iceberg-Spezifikation. Weitere Informationen dazu finden Sie unter Partitionstransformationen.
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. |
CREATE INTEGRATION |
Konto |
Erforderlich, um eine neuen Katalogintegration zu erstellen. |
USAGE |
Katalogintegration |
Erforderlich, um auf eine bestehende Katalogintegration zu verweisen. |
Für das Ausführen von Operationen auf einem Objekt in einem Schema ist mindestens eine Berechtigung für die übergeordnete Datenbank und mindestens eine Berechtigung für das übergeordnete Schema erforderlich.
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¶
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.Die OR REPLACE-Option führt eine nicht atomare Operation aus, die in diesem Fall eine DROP-Operation ist, gefolgt von CREATE, in Ihrem externen Iceberg-Katalog.
Zum Erstellen einer Iceberg-Tabelle mit Schreibunterstützung:
Wenn Sie eine Standard-Snowflake-Datenbank verwenden, müssen Sie zunächst eine Iceberg-Tabelle in Ihrem Remote-Katalog erstellen. Sie könnten zum Beispiel Spark verwenden, um eine Iceberg-Tabelle in Open Catalog zu schreiben. Geben Sie in Ihrer CREATE ICEBERG TABLE-Anweisung keine Spaltendefinitionen an.
Wenn Sie eine katalogverknüpfte Datenbank verwenden, müssen Sie beim Erstellen der Tabelle Spaltendefinitionen angeben. Alternativ können Sie auch in Iceberg-Tabellen schreiben, die Snowflake automatisch in Ihrem Remote-Katalog erkennt.
Die TARGET_FILE_SIZE-Eigenschaft wird nur für Tabellen mit Schreibunterstützung (Vorschau) unterstützt.
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:
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 … CLONE:
Für partitionierte Iceberg-Tabellen behält die geklonte Tabelle die Partitionierungsdaten der Quelltabelle bei.
CREATE ICEBERG TABLE (katalogverknüpfte Datenbank) … AS SELECT:
Wird derzeit nicht unterstützt, wenn Sie einen der folgenden Kataloge als Remote-Katalog verwenden:
AWS Glue
Databricks Unity-Katalog
Alternativ können Sie auch die Syntax CREATE ICEBERG TABLE (Iceberg REST Katalog) verwenden, um eine leere Iceberg-Tabelle zu erstellen, und dann eine INSERT INTO … SELECT-Anweisung zum Einfügen von Daten in die leere Tabelle verwenden. Bei dieser Alternative werden jedoch zwei separate Transaktionen verwendet, sodass keine Atomarität garantiert ist.
Verwendung von Standardwerten:
Sie können keine Ausdrücke oder Funktionen wie z. B.CURRENT_TIMESTAMP () für Standardwerte in v3-Iceberg-Tabellen verwenden. In der Tabellenspezifikation Apache Iceberg v3 sind nur konstante Werte zulässig.
Für v2 Iceberg-Tabellen können Sie Ausdrücke wie CURRENT_TIMESTAMP () mit Snowflake verwenden. Diese Eigenschaft wird jedoch nicht in den Iceberg-Metadaten beibehalten, da die Standardwertspezifikation in Version 3 eingeführt wurde. Spalten in v2 Iceberg-Tabellen mit Standardwerten als Ausdrücke werden nur mit Snowflake verwendet, aber die Tabelle bleibt interoperabel mit anderen Engines und konform mit der Spezifikation der Version 2.
Die Verwendung von Standardwerten mitCREATEICEBERGTABLE (katalogverknüpfte Datenbank) … wird unterstützt.
Die Verwendung von Standardwerten mitCREATEICEBERGTABLE (katalogverknüpfte Datenbank) …ASSELECT wird nicht unterstützt.
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.
Beispiele¶
Iceberg-Tabelle erstellen, die einen Remote-Iceberg-REST-Katalog verwendet¶
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'my_rest_catalog_integration'
CATALOG_TABLE_NAME = 'my_remote_table'
AUTO_REFRESH = TRUE;
Iceberg-Tabelle zur Abfrage einer Tabelle in Snowflake Open Catalog erstellen¶
In diesem Beispiel wird eine Iceberg-Tabelle erstellt, die Sie für Abfrage einer Tabelle in Snowflake Open Catalog mit Snowflake verwenden können.
CREATE ICEBERG TABLE open_catalog_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'open_catalog_int'
CATALOG_TABLE_NAME = 'my_open_catalog_table'
AUTO_REFRESH = TRUE;
Iceberg-Tabelle in einer katalogverknüpften Datenbank erstellen¶
Im folgenden Beispiel wird eine schreibfähige Iceberg-Tabelle in einer katalogverknüpften Datenbank mit Spaltendefinitionen erstellt:
USE DATABASE my_catalog_linked_db;
USE SCHEMA 'my_namespace';
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
first_name string,
last_name string,
amount int,
create_date date
);
Erstellen einer partitionierten Tabelle in einer katalogverknüpften Datenbank.¶
Im folgenden Beispiel wird eine extern verwaltete Iceberg-Tabelle erstellt, indem der Wert einer Zeitstempelspalte mit dem Namen start_date verwendet wird, um die Tabelle nach Tagen zu partitionieren:
USE DATABASE my_catalog_linked_db;
USE SCHEMA 'my_namespace';
CREATE OR REPLACE ICEBERG TABLE iceberg_partitioned_date_time (start_date timestamp)
PARTITION BY (DAY(start_date));
Sie können Daten in die Tabelle einfügen, indem Sie die unterstützten Features zum Laden von Tabellen verwenden. Verwenden Sie zum Beispiel eine INSERT INTO-Anweisung zum Einfügen der folgenden Daten in die leere iceberg_partitioned_date_time-Tabelle, die zuvor erstellt wurde:
INSERT INTO iceberg_partitioned_date_time (start_date)
VALUES
(to_timestamp_ntz('2023-01-02 00:00:00')),
(to_timestamp_ntz('2023-02-03 00:00:00')),
(to_timestamp_ntz('2023-01-02 01:00:00')),
(to_timestamp_ntz('2023-02-03 02:00:00'));
Weitere Informationen dazu finden Sie unter Iceberg-Partitionierung.
Erstellen Sie eine extern verwaltete Iceberg v3-Tabelle¶
Im folgenden Beispiel wird eine Apache Iceberg™-Tabelle erstellt, die einen externen Iceberg REST-Katalog verwendet und v3 der Apache Iceberg™-Spezifikation entspricht:
Bemerkung
Sie müssen nicht ICEBERG_VERSION = 3 mit dem Befehl angeben, da die Formatversion bereits in den Metadaten des externen Katalogs definiert ist, sodass Snowflake diese Version aus den Metadaten abruft.
CREATE ICEBERG TABLE my_v3_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'my_rest_catalog_integration'
CATALOG_TABLE_NAME = 'my_remote_table'
AUTO_REFRESH = TRUE;
Iceberg-Tabelle v3 in einer katalogverknüpften Datenbank erstellen¶
Im folgenden Beispiel wird eine schreibfähige Iceberg-Tabelle in einer katalogverknüpften Datenbank mit Spaltendefinitionen erstellt, die v3 der Apache Iceberg™-Spezifikation entspricht:
USE DATABASE my_catalog_linked_db;
USE SCHEMA 'my_namespace';
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table (
first_name string,
last_name string,
amount int,
create_date date
)
ICEBERG_VERSION = 3;
Erstellen Sie eine partitionierte Tabelle in einer katalogverknüpften Datenbank mit hierarchischem Pfadlayout¶
Im folgenden Beispiel wird eine extern verwaltete Iceberg-Tabelle erstellt, indem Sie den Wert einer Zeitstempelspalte mit dem Namen start_date verwenden, um die Tabelle nach Tagen zu partitionieren. WeilPATH_LAYOUT =HIERARCHICAL, schreibt Snowflake Daten in die partitionierte Iceberg-Tabelle, indem ein hierarchisches Pfad-Layout für Dateien verwendet wird, bei denen Partitionierungsinformationen in den Dateipfaden enthalten sind:
USE DATABASE my_catalog_linked_db;
USE SCHEMA 'my_namespace';
CREATE OR REPLACE ICEBERG TABLE iceberg_partitioned_date_time (start_date timestamp)
PARTITION BY (DAY(start_date))
PATH_LAYOUT = HIERARCHICAL;
Sie können Daten in die Tabelle einfügen, indem Sie die unterstützten Features zum Laden von Tabellen verwenden. Verwenden Sie zum Beispiel eine INSERT INTO-Anweisung zum Einfügen der folgenden Daten in die leere iceberg_partitioned_date_time-Tabelle, die zuvor erstellt wurde:
INSERT INTO iceberg_partitioned_date_time (start_date)
VALUES
(to_timestamp_ntz('2023-01-02 00:00:00')),
(to_timestamp_ntz('2023-02-03 00:00:00')),
(to_timestamp_ntz('2023-01-02 01:00:00')),
(to_timestamp_ntz('2023-02-03 02:00:00'));
Weitere Informationen dazu finden Sie unter Partitionierung mit hierarchischen Pfaden.
