CREATE DATABASE (katalogverknüpft)¶
Erstellt eine neue Katalogverknüpfte Datenbank für Apache Iceberg™-Tabellen, die einen externen Iceberg REST-Katalog verwenden.
Syntax¶
CREATE DATABASE <name>
LINKED_CATALOG = ( catalogParams ),
[ EXTERNAL_VOLUME = '<external_vol>' ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Wobei:
catalogParams ::= CATALOG = '<catalog_int>', [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE } ] [ NAMESPACE_FLATTEN_DELIMITER = '<string_literal>' ] [ SYNC_INTERVAL_SECONDS = <value> ]
Erforderliche Parameter¶
name
Gibt den Bezeichner für die katalogverknüpfte Datenbank an. Dieser muss für Ihr Konto 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.
Optionale Parameter¶
EXTERNAL_VOLUME = my_external_vol
Gibt ein Externes Volumen an, das den Zugriff auf die Daten und Metadaten Ihrer externen Iceberg-Tabellen ermöglicht.
Nicht erforderlich bei Verwendung von Anmeldeinformationen.
COMMENT = 'string_literal'
Gibt einen Kommentar für die Datenbank 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-Kontingent für Objekte.
Katalogparameter (catalogParams)¶
CATALOG = catalog_int
Gibt den Namen Ihrer Katalogintegration an.
ALLOWED_NAMESPACES = ('namespace1', 'namespace2', ... )
Gibt optional einen oder mehrere Namespaces in Ihrem Remote-Katalog an, um den Bereich der automatischen Tabellenerkennung einzuschränken. Snowflake synchronisiert die angegebenen Namespaces und alle Namespaces und Tabellen, die von diesen abhängen. Wenn ein verschachtelter Namespace in der ALLOWED_NAMESPACES Liste enthalten ist, Sie jedoch den NAMESPACE_MODE-Parameter auf IGNORE_NESTED_NAMESPACE setzen, synchronisiert Snowflake weder den verschachtelten Namespace noch die darunter liegenden Schemata und Tabellen.
BLOCKED_NAMESPACES = ('namespace1', 'namespace2', ... )
Gibt optional einen oder mehrere Namespaces in Ihrem Remote-Katalog an, die für die automatische Tabellenerkennung gesperrt werden sollen.
Snowflake blockiert die angegebenen Namespaces und alle Namespaces und Tabellen, die von ihnen abhängen.
Wenn Sie sowohl ALLOWED_NAMESPACES als auch BLOCKED_NAMESPACES angeben, dann hat dieBLOCKED_NAMESPACES-Liste Vorrang. Beispiel: Wenn
ns1.ns2
erlaubt ist, aberns1
blockiert ist, dann wird Snowflake nicht synchronisiertns1.ns2
.NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE }
Gibt an, wie Snowflake Namespaces für Iceberg-Tabellen in der katalogverknüpften Datenbank behandelt.
IGNORE_NESTED_NAMESPACE
: Snowflake verknüpft nur Tabellen in der ersten Namespace-Ebene für Ihren Katalog.FLATTEN_NESTED_NAMESPACE
: Snowflake verknüpft Tabellen in allen Namespace-Ebenen für Ihren Katalog. Für eine Tabelle in einem verschachtelten Namespace verwendet Snowflake die NAMESPACE_FLATTEN_DELIMITER-Parameter, um einen vereinfachten Namespace zu erstellen. Mit dieser Option müssen Sie die NAMESPACE_FLATTEN_DELIMITER-Parameter einstellen.Betrachten Sie beispielsweise eine Tabelle mit dem Namen
iceberg_table_5
imnamespace3aa
-Namespace:my_catalog_linked_db |-- namespace3 | |-- namespace3a | |-- namespace3aa | |-- iceberg_table_5
Wenn Sie
NAMESPACE_FLATTEN_DELIMITER = "/"
einstellen, können Sie"my_catalog_linked_db"."namespace3/namespace3a/namespace3aa"."iceberg_table_5"
angeben, um auf die Tabelle zu verweisen.
Standard:
IGNORE_NESTED_NAMESPACE
NAMESPACE_FLATTEN_DELIMITER = 'string_literal'
Erforderlich, wenn Sie NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE einstellen. Gibt ein Trennzeichen an, das Snowflake verwendet, um vereinfachte Namespaces für Tabellen in Ihrem Katalog zu konstruieren.
Wichtig
Das Zeichen, das Sie als Trennzeichen wählen, darf nicht in Ihren entfernten Namespaces erscheinen. Während des automatischen Erkennungsprozesses überspringt Snowflake jeden Namespace, der das Trennzeichen enthält, und erstellt kein entsprechendes Schema in Ihrer mit dem Katalog verbundenen Datenbank.
Gültige Zeichen: Alle in Snowflake-Bezeichnern erlaubten Zeichen.
SYNC_INTERVAL_SECONDS = 'value'
Gibt das Zeitintervall (in Sekunden) an, das Snowflake für die automatische Erkennung von Schemas und Tabellen in Ihrem Remote-Katalog verwenden soll.
Werte: 30 bis 86.400 (1 Tag), einschließlich
Standard: 30 Sekunden.
Anforderungen an die Zugriffssteuerung¶
Eine Rolle, die zur Ausführung dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:
Berechtigung |
Objekt |
Anmerkungen |
---|---|---|
CREATE DATABASE |
Konto |
Erforderlich, um eine neue Datenbank zu erstellen. Only the SYSADMIN role, or a higher role, has this privilege by default. The privilege can be granted to additional roles as needed. |
USAGE |
Externes Volume |
Erforderlich, um auf ein vorhandenes externes Volume zu verweisen. |
USAGE |
Katalogintegration |
Erforderlich, um auf eine bestehende Katalogintegration zu verweisen. |
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¶
Wird nur unterstützt, wenn Sie eine Katalogintegration für Iceberg REST verwenden (z. B. Snowflake Open Catalog).
Abrechnung Während des Vorschauzeitraums stellt Snowflake keine Rechnung für katalogverknüpfte Datenbanken dar. Die Abrechnung beginnt, wenn Apache Iceberg™ katalogverknüpfte Datenbanken allgemein verfügbar sind.
Um die automatische Tabellenerkennung auf einen bestimmten Satz von Namespaces zu beschränken, verwenden Sie die ALLOWED_NAMESPACES Parameter. Sie können auch die BLOCKED_NAMESPACES Parameter verwenden, um eine Reihe von Namespaces zu blockieren.
Snowflake synchronisiert keine Remote-Katalogzugriffssteuerung (Benutzer oder Rollen).
Sie können Schemas oder extern verwaltete Iceberg-Tabellen in einer mit dem Katalog verbundenen Datenbank erstellen. Das Erstellen anderer Snowflake-Objekte wird derzeit nicht unterstützt.
Latenz
Bei Datenbanken, die mit 7.500 Namespaces in einem Remote-Katalog verknüpft sind, dauert das Ermitteln von Namespaces und Tabellen etwa eine Stunde.
Bei Remote-Katalogen mit 500.000 Tabellen dauert der automatische Aktualisierungsprozess etwa eine Stunde. Für Namespaces mit unterschiedlichen Latenzanforderungen empfehlen wir Ihnen, separate katalogverknüpfte Datenbanken zu erstellen. Jede Datenbank sollte auf eine Katalogintegration mit einem geeigneten Intervall für die automatische Aktualisierung verweisen (REFRESH_INTERVAL_SECONDS).
Für Iceberg-Tabellen in einer katalogverknüpften Datenbank:
Snowflake kopiert keine Eigenschaften von Remote-Katalogtabellen (wie Aufbewahrungsrichtlinien oder Puffer) und unterstützt derzeit nicht das Ändern von Tabelleneigenschaften.
Automatische Aktualisierung ist standardmäßig aktiviert. Wenn der
table-uuid
einer externen Tabelle und der mit dem Katalog verknüpften Datenbanktabelle nicht übereinstimmen, schlägt die Aktualisierung fehl und Snowflake löscht die Tabelle aus der mit dem Katalog verknüpften Datenbank; Snowflake ändert die Remotetabelle nicht.Wenn Sie eine Tabelle aus dem Remote-Katalog löschen, löscht Snowflake die Tabelle auch in der mit dem Katalog verbundenen Datenbank. Diese Aktion ist asynchron, sodass Sie die Änderung im Remote-Katalog möglicherweise nicht sofort sehen.
Wenn Sie eine Tabelle im Remotekatalog umbenennen, löscht Snowflake die bestehende Tabelle aus der mit dem Katalog verbundenen Datenbank und erstellt eine Tabelle mit dem neuen Namen.
Maskierungsrichtlinien und Tags werden unterstützt. Andere Snowflake-spezifische Features wie Replikation, Klonen und Freigabe werden nicht unterstützt.
Das Zeichen, das Sie für denNAMESPACE_FLATTEN_DELIMITER-Parameter wählen, kann nicht in Ihren Remote-Namespaces angezeigt werden. Während der automatischen Erkennung überspringt Snowflake jeden Namespace, der das Trennzeichen enthält, und erstellt kein entsprechendes Schema in Ihrer mit dem Katalog verbundenen Datenbank.
Wenn Sie etwas anderes als
_
,$
, Großbuchstaben oder Zahlen für angeben die NAMESPACE_FLATTEN_DELIMITER-Parameter verwenden, müssen Sie den Schemanamen in Anführungszeichen setzen, wenn Sie die Tabelle abfragen.Für Datenbanken, die mit AWS Glue verknüpft sind, müssen Sie Kleinbuchstaben verwenden und die Schema-, Tabellen- und Spaltennamen in doppelte Anführungszeichen setzen. Dies ist auch für andere Iceberg REST-Kataloge erforderlich, die nur Bezeichner in Kleinbuchstaben unterstützen.
Das folgende Beispiel zeigt eine gültige Abfrage:
CREATE SCHEMA "s1";
Die folgenden -Anweisungen sind nicht gültig, da sie Großbuchstaben verwenden oder die doppelten Anführungszeichen weglassen:
CREATE SCHEMA s1; CREATE SCHEMA "Schema1";
Verwenden von UNDROP ICEBERG TABLE wird nicht unterstützt.
Die Freigabe mit einem Freigabeangebot wird für Tabellen unterstützt, die ein externes Volume verwenden. Die direkte Freigabe wird derzeit nicht unterstützt.
Zum Schreiben in Tabellen einer mit dem Katalog verbundenen Datenbank:
Automatische Anmeldeinformationen werden nicht unterstützt.
Das Schreiben in Tabellen in verschachtelten Namespaces wird derzeit nicht unterstützt.
Für ALLOWED_NAMESPACES und BLOCKED_NAMESPACES speichert Snowflake keine verschachtelten Namespaces, wenn das Set bereits den übergeordneten Namespace enthält. Wenn Sie beispielsweise eine Datenbank erstellen und
ALLOWED_NAMESPACES = ('ns1', 'ns1.ns2', 'ns1.ns3')
angeben, dann speichert Snowflake nurns1
, da die anderen beiden automatisch enthalten sind. Wenn Sie GET_DDL auf der Beispieldatenbank verwenden, gibt SnowflakeALLOWED_NAMESPACES = ('ns1')
zurück. Dasselbe gilt für BLOCKED_NAMESPACES.Beim Abfragen von Tabellen in einer mit dem Katalog verbundenen Datenbank:
Snowflake konvertiert Bezeichner ohne Anführungszeichen (Tabellen- und Spaltennamen) automatisch in Großbuchstaben. Wenn Ihr externer Iceberg-Katalog Bezeichner verwendet, bei denen die Groß-/Kleinschreibung beachtet wird, müssen Sie Tabellen- und Spaltennamen in doppelte Anführungszeichen setzen.
Weitere Informationen zu Kontobezeichnern finden Sie unter Anforderungen an Bezeichner.
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¶
Erstellen Sie eine katalogverknüpfte Datenbank mit verschachtelten Namespaces (Flattening).
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int',
NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
NAMESPACE_FLATTEN_DELIMITER = '-'
)
EXTERNAL_VOLUME = 'my_external_vol';
Erstellen Sie eine mit dem Katalog verknüpfte Datenbank, die automatische Anmeldeinformationen verwendet und einen zulässigen Namespace angibt:
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int_vended_creds',
ALLOWED_NAMESPACES = ('my_namespace')
);