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>' , ... ] ) ]
  [ CATALOG_CASE_SENSITIVITY = { CASE_SENSITIVE | CASE_INSENSITIVE } ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
Copy

Wobei:

catalogParams ::=
  CATALOG = '<catalog_int>',
  [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ]
  [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ]
  [ ALLOWED_WRITE_OPERATIONS = { NONE | ALL } ]
  [ NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE } ]
  [ NAMESPACE_FLATTEN_DELIMITER = '<string_literal>' ]
  [ SYNC_INTERVAL_SECONDS = <value> ]
Copy

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

CATALOG_CASE_SENSITIVITY = { CASE_SENSITIVE | CASE_INSENSITIVE }

Legt die Groß-/Kleinschreibung fest, die Ihr externer Iceberg-Katalog für Bezeichner verwendet.

  • CASE_SENSITIVE: Der externe Iceberg-Katalog verwendet Bezeichner, bei denen die Groß-/Kleinschreibung berücksichtigt wird. Beispielsweise ist Snowflake Open Catalog ein Katalog, bei dem zwischen Groß-/Kleinschreibung unterschieden wird.

    • Snowflake gleicht Bezeichner genau so ab, wie sie angezeigt werden, einschließlich der Groß-/Kleinschreibung. Snowflake konvertiert Bezeichner ohne Anführungszeichen automatisch in Großbuchstaben, aber Bezeichner in Anführungszeichen müssen genau der Groß-/Kleinschreibung in Ihrem externen Katalog entsprechen.

    • Wenn der externe Iceberg-Katalog allerdings tatsächlich nicht zwischen Groß- und Kleinschreibung unterscheidet und in Kleinbuchstaben normalisiert, müssen Sie Bezeichner in doppelte Anführungszeichen setzen.

    Diese Anforderungen gelten nur für die Identifizierung vorhandener Schemas, Tabellen und Tabellenspalten.

  • CASE_INSENSITIVE: Der externe Iceberg-Katalog verwendet Bezeichner, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird. Zum Beispiel sind Unity Catalog und AWS Glue Kataloge, bei denen die Groß-/Kleinschreibung nicht beachtet wird.

    • Wenn der externe Iceberg-Katalog die Groß-/Kleinschreibung nicht berücksichtigt und Sie einen der folgenden Befehle ausführen, müssen Sie Bezeichner in doppelte Anführungszeichen setzen:

      • CREATE ICEBERG TABLE

      • CREATE SCHEMA

      • ALTER ICEBERG TABLE ADD COLUMN

      • ALTER ICEBERG TABLE RENAME COLUMN

    • Wenn der externe Iceberg-Katalog allerdings zwischen Groß- und Kleinschreibung unterscheidet, behandelt Snowflake nicht in Anführungszeichen gesetzte Bezeichner als nicht zwischen Groß- und Kleinschreibung unterscheidend und wandelt sie automatisch in Großbuchstaben um. Wenn Sie Objekte erstellen oder abfragen, gleicht Snowflake Bezeichner unabhängig von der Groß-/Kleinschreibung ab, solange sie nicht in Anführungszeichen gesetzt sind.

      Eine Verwendung dieses Musters wird nicht empfohlen, da Snowflake nicht zwei verschiedene Bezeichner auflösen kann, die sich nur in der Groß-/Kleinschreibung unterscheiden. Dieses Muster funktioniert nur, wenn sich keine zwei Bezeichner nur in der Groß-/Kleinschreibung unterscheiden.

    Wenn nicht anders angegeben, gelten diese Anforderungen nur für die Identifizierung vorhandener Schemas, Tabellen und Tabellenspalten.

Standard: CASE_INSENSITIVE

Weitere Informationen zu den Anforderungen bei der Auflösung von Bezeichnern, einschließlich Beispiele, finden Sie unter Anforderungen an die Bezeichnerauflösung in einer katalogverknüpften Datenbank.

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.

WITH CONTACT ( purpose = contact [ , purpose = contact ...] )

Verknüpfen Sie das neue Objekt mit einem oder mehreren Kontakten.

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 darunter verschachtelt sind. 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 darunter verschachtelt sind.

Wenn Sie sowohl ALLOWED_NAMESPACES als auch BLOCKED_NAMESPACES angeben, dann hat dieBLOCKED_NAMESPACES-Liste Vorrang. Beispiel: Wenn ns1.ns2 erlaubt ist, aber ns1 blockiert ist, dann wird Snowflake nicht synchronisiert ns1.ns2.

ALLOWED_WRITE_OPERATIONS = { NONE | ALL }

Gibt an, ob Ihre katalogverknüpfte Datenbank schreibgeschützt oder beschreibbar ist.

  • NONE: Ihre katalogverknüpfte Datenbank ist schreibgeschützt.

    Wenn Ihre katalogverknüpfte Datenbank schreibgeschützt ist, schlägt jede Operation, die Sie ausführen und die eine Übergabe an den Katalog erfordert, fehl. Beispiel: DROP ICEBERG TABLE.

  • ALL: Ihre katalogverknüpfte Datenbank ist beschreibbar.

    Warnung

    Wenn in Ihrer katalogverknüpften Datenbank Schreibberechtigungen aktiviert sind, gibt Snowflake das Löschen von Tabellen an den Remote-Katalog weiter, wodurch die Tabelle und die Daten aus beiden Systemen entfernt werden.

Standard: ALL

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 im namespace3aa-Namespace:

    my_catalog_linked_db
    |-- namespace3
    |   |-- namespace3a
    |       |-- namespace3aa
    |           |-- iceberg_table_5
    
    Copy

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

  • Update: We will start billing sometime in December 2025.

  • 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 (für Benutzende 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.

  • Sie können keine Datenbankrollen in einer mit einem Katalog verknüpften Datenbank erstellen.

  • 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 und Klonen 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 des automatischen Erkennungsprozesses ü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 _, $ oder Zahlen für den 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";
      
      Copy

      Die folgenden -Anweisungen sind nicht gültig, da sie Großbuchstaben verwenden oder die doppelten Anführungszeichen weglassen:

      CREATE SCHEMA s1;
      CREATE SCHEMA "Schema1";
      
      Copy
    • Verwenden von UNDROP ICEBERG TABLE wird nicht unterstützt.

    • Freigabe:

      • Die Freigabe mit einem Freigabeangebot wird derzeit nicht unterstützt.

      • Die direkte Freigabe wird unterstützt

  • Zum Schreiben in Tabellen einer mit dem Katalog verbundenen Datenbank:

    • Das Erstellen von Tabellen in verschachtelten Namespaces wird derzeit nicht unterstützt.

    • Das Schreiben in Tabellen in verschachtelten Namespaces wird derzeit nicht unterstützt.

    • Positionslöschungen auf Zeilenebene werden für Tabellen unterstützt, die auf Amazon S3, Azure oder Google Cloud gespeichert sind. Löschungen auf Zeilenebene mit Gleichheitslöschungsdateien werden nicht unterstützt. Weitere Informationen zu Löschungen auf Zeilenebene finden Sie unter Löschungen auf Zeilenebene verwenden. Um Positionslöschungen zu deaktivieren, was die Ausführung von Data Manipulation Language (DML)-Operationen im Copy-on-Write-Modus ermöglicht, setzen Sie den ENABLE_ICEBERG_MERGE_ON_READ-Parameter auf Tabellen-, Schema- oder Datenbankebene auf FALSE.

  • 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 nur ns1, da die anderen beiden automatisch enthalten sind. Wenn Sie GET_DDL auf der Beispieldatenbank verwenden, gibt Snowflake ALLOWED_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), die ein externes Volumen verwendet.

CREATE DATABASE my_linked_db
  LINKED_CATALOG = (
    CATALOG = 'my_catalog_int',
    NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
    NAMESPACE_FLATTEN_DELIMITER = '-'
  )
  EXTERNAL_VOLUME = 'my_external_vol';
Copy

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')
  );
Copy