CREATE ICEBERG TABLE (AWS Glue als Iceberg-Katalog)¶
Erstellt oder ersetzt eine Apache Iceberg™-Tabelle im aktuellen/angegebenen Schema unter Verwendung einer Iceberg-Tabelle, die im AWS Glue Data Catalog registriert ist. Dieser Typ von Iceberg-Tabelle erfordert eine Katalogintegration, um Snowflake mit AWS Glue zu verbinden.
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 AWS Glue 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>' ]
CATALOG_TABLE_NAME = '<catalog_table_name>'
[ CATALOG_NAMESPACE = '<catalog_namespace>' ]
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
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.
CATALOG_TABLE_NAME = 'catalog_table_name'
Gibt den Tabellennamen an, wie er vom 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.
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. Sie müssen eine Katalogintegration angeben, die Sie für AWS Glue konfiguriert haben. Weitere Informationen dazu finden Sie unter Katalogintegration für AWS Glue konfigurieren.
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.
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.
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
AUTO_REFRESH = { TRUE | FALSE }
Gibt an, ob Snowflake den mit der Tabelle verbundenen externen Iceberg-Katalog automatisch nach Aktualisierungen der Metadaten abfragen soll, wenn Sie automatische Aktualisierung verwenden. Wenn für den Parameter
REFRESH_INTERVAL_SECONDS
bei der Katalogintegration kein Wert angegeben wird, verwendet Snowflake ein Standardaktualisierungsintervall von 30 Sekunden.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).
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¶
Erstellen Sie eine Iceberg-Tabelle mit AWS Glue als Katalog¶
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';
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 "glue_volume_1"
und "glue_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 = '"glue_volume_1"'
CATALOG = '"glue_catalog_integration_1"'
CATALOG_TABLE_NAME='my_glue_catalog_table'
CATALOG_NAMESPACE='icebergcatalogdb2';