CREATE SCHEMA

Erstellt ein neues Schema in der aktuellen Datenbank.

Darüber hinaus unterstützt dieser Befehl die folgenden Varianten:

  • CREATE OR ALTER SCHEMA: Erstellt ein Schema, wenn es nicht existiert, oder ändert ein bestehendes Schema.

  • CREATE SCHEMA … CLONE: Erstellt einen Klon eines bestehenden Schemas, entweder in ihrem aktuellen Status oder zu einem bestimmten Zeitpunkt/Punkt in der Vergangenheit (mit Time Travel). Weitere Informationen zum Klonen eines Schemas finden Sie unter Hinweise zum Klonen.

Siehe auch:

ALTER SCHEMA, DESCRIBE SCHEMA, DROP SCHEMA, SHOW SCHEMAS, UNDROP SCHEMA

CREATE OR ALTER <objekt>

Syntax

CREATE [ OR REPLACE ] [ TRANSIENT ] SCHEMA [ IF NOT EXISTS ] <name>
  [ CLONE <source_schema>
      [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
      [ IGNORE TABLES WITH INSUFFICIENT DATA RETENTION ]
      [ IGNORE HYBRID TABLES ] ]
  [ WITH MANAGED ACCESS ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ EXTERNAL_VOLUME = <external_volume_name> ]
  [ CATALOG = <catalog_integration_name> ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ CLASSIFICATION_PROFILE = '<classification_profile>' ]
  [ COMMENT = '<string_literal>' ]
  [ CATALOG_SYNC = '<snowflake_open_catalog_integration_name>' ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

Syntaxvariante

CREATE OR ALTER SCHEMA

Erstellt ein neues Schema, wenn es noch nicht existiert, oder wandelt ein vorhandenes Schema in das in der Anweisung definierte Schema um. Eine CREATE OR ALTER SCHEMA-Anweisung folgt den Syntaxregeln einer CREATE SCHEMA-Anweisung und hat die gleichen Einschränkungen wie eine ALTER SCHEMA-Anweisung.

Weitere Informationen dazu finden Sie unter Nutzungshinweise zu CREATE OR ALTER SCHEMA.

CREATE OR ALTER [ TRANSIENT ] SCHEMA <name>
  [ WITH MANAGED ACCESS ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ EXTERNAL_VOLUME = <external_volume_name> ]
  [ CATALOG = <catalog_integration_name> ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ LOG_LEVEL = '<log_level>' ]
  [ TRACE_LEVEL = '<trace_level>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ COMMENT = '<string_literal>' ]
Copy

CREATE SCHEMA … CLONE

Erzeugt ein neues Schema mit denselben Parameterwerten:

CREATE [ OR REPLACE ] SCHEMA [ IF NOT EXISTS ] <name> CLONE <source_schema>
  [ ... ]
Copy

Weitere Details dazu finden Sie unter CREATE <Objekt> … CLONE.

Erforderliche Parameter

name

Gibt den Bezeichner für das Schema an. Dieser muss für die Datenbank, in der das Schema 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 Details dazu finden Sie unter Anforderungen an Bezeichner.

Optionale Parameter

TRANSIENT

Gibt ein Schema als transient an. Transiente Schemata haben keine Fail-safe-Frist, sodass ihnen nach Verlassen von Time Travel keine zusätzlichen Speicherkosten entstehen. Das bedeutet aber auch, dass sie bei einem Datenverlust nicht durch Fail-safe geschützt sind. Weitere Informationen dazu finden Sie unter Erläuterungen zu und Anzeigen von Fail-safe.

Darüber hinaus sind per Definition alle in einem transienten Schema erstellten Tabellen transient. Weitere Informationen zu transienten Tabellen finden Sie unter CREATE TABLE.

Standard: Kein Wert (d. h. das Schema ist permanent)

CLONE source_schema

Gibt an, dass ein Klon des angegebenen Quellschemas erstellt wird. Weitere Informationen zum Klonen eines Schemas finden Sie unter CREATE <Objekt> … CLONE.

AT | BEFORE ( TIMESTAMP => timestamp | OFFSET => time_difference | STATEMENT => id )

Beim Klonen eines Schemas gibt die AT | BEFORE-Klausel an, dass Time Travel verwendet wird, um das Schema an oder vor einem bestimmten Punkt der Vergangenheit zu klonen.

IGNORE TABLES WITH INSUFFICIENT DATA RETENTION

Ignorieren Sie Tabellen, für die in Time Travel keine historischen Daten mehr zum Klonen verfügbar sind. Wenn der in der AT|BEFORE-Klausel angegebene Zeitpunkt in der Vergangenheit für eine beliebige untergeordnete Tabelle in einer Datenbank oder einem Schema außerhalb der Datenaufbewahrungsfrist liegt, wird die Klonoperation für die untergeordnete Tabelle übersprungen. Weitere Informationen dazu finden Sie unter Untergeordnete Objekte und Datenaufbewahrungsdauer.

IGNORE HYBRID TABLES

Ignorieren Sie Hybridtabellen, die nicht geklont werden. Verwenden Sie diese Option, um ein Schema zu klonen, das Hybridtabellen enthält. Das geklonte Schema enthält andere Objekte, überspringt aber Hybridtabellen.

Wenn Sie diese Option nicht verwenden und Ihr Schema eine oder mehrere Hybridtabellen enthält, ignoriert der Befehl die Hybridtabellen stillschweigend. Die Fehlerbehandlung für Schemas, die Hybridtabellen enthalten, wird sich jedoch in einem kommenden Release ändern. Daher sollten Sie diesen Parameter vorsorglich zu Ihren Befehlen hinzufügen.

WITH MANAGED ACCESS

Gibt ein verwaltetes Schema an. Verwaltete Zugriffsschemas zentralisieren die Verwaltung von Berechtigungen für den Schemabesitzer.

In regulären Schemas kann der Besitzer eines Objekts (d. h. die Rolle, die über die Berechtigung OWNERSHIP für das Objekt verfügt) anderen Rollen Berechtigungen für seine Objekte erteilen. In verwalteten Schemas verwaltet der Schemabesitzer alle Berechtigungszuweisungen, einschließlich zukünftiger Zuweisungen, für Objekte im Schema. Objekteigentümer behalten die OWNERSHIP-Berechtigung für die Objekte. Berechtigungszuweisungen für die Objekte können jedoch nur vom Schemaeigentümer verwaltet werden.

DATA_RETENTION_TIME_IN_DAYS = integer

Gibt die Anzahl der Tage an, für die Time Travel-Aktionen (CLONE und UNDROP) auf dem Schema ausgeführt werden können, sowie die standardmäßige Time Travel-Aufbewahrungsdauer für alle im Schema erstellten Tabellen. Weitere Details 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. Weitere Informationen zur Aufbewahrungsdauer auf Tabellenebene finden Sie unter CREATE TABLE und Verstehen und Verwenden von Time Travel.

Werte:

  • Standardausführung: 0 oder 1

  • Enterprise Edition:

    • 0 bis 90 für permanente Schemata

    • 0 oder 1 für transiente Schemata

Standard:

  • Standardausführung: 1

  • Enterprise Edition (oder höher): 1 (es sei denn, auf Datenbank- oder Kontoebene wurde ein anderer Standardwert angegeben)

Bemerkung

Der Wert 0 deaktiviert effektiv Time Travel für das Schema.

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Objektparameter, der die maximale Anzahl von Tagen angibt, für die Snowflake die Datenaufbewahrungsfrist für Tabellen im Schema verlängern kann, um zu verhindern, dass Streams auf den Tabellen veraltet sind.

Eine detaillierte Beschreibung dieses Parameters finden Sie unter MAX_DATA_EXTENSION_TIME_IN_DAYS.

EXTERNAL_VOLUME = external_volume_name

Objektparameter, der das standardmäßig zu verwendende externe Volume für Apache Iceberg™-Tabellen angibt.

Weitere Informationen zu diesem Parameter finden Sie unter EXTERNAL_VOLUME.

CATALOG = catalog_integration_name

Objektparameter, der die standardmäßige Katalogintegration angibt, die für Apache Iceberg™-Tabellen verwendet werden soll.

Weitere Informationen zu diesem Parameter finden Sie unter CATALOG.

REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }

Gibt an, ob in Abfrageergebnissen einer Iceberg-Tabelle 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.

Standard: FALSE

DEFAULT_DDL_COLLATION = 'collation_specification'

Gibt eine Standardsortierungsspezifikation für alle dem Schema hinzugefügten Tabellen an. Der Standardwert kann auf der Ebene der einzelnen Tabellen überschrieben werden.

Weitere Informationen zu diesem Parameter finden Sie unter DEFAULT_DDL_COLLATION.

LOG_LEVEL = 'log_level'

Gibt den Schweregrad von Meldungen an, die in die aktive Ereignistabelle erfasst und zur Verfügung gestellt werden sollen. Meldungen des angegebenen Schweregrads (und mit höherem Schweregrad) werden erfasst.

Weitere Informationen zu Protokolliergraden finden Sie unter LOG_LEVEL. Weitere Informationen zum Festlegen des Protokolliergrads finden Sie unter Einstellung der Grade für Protokollierung, Metriken und Ablaufverfolgung.

TRACE_LEVEL = 'trace_level'

Steuert, wie Ablaufverfolgungsereignisse in die Ereignistabelle aufgenommen werden.

Weitere Informationen zu Protokolliergraden finden Sie unter TRACE_LEVEL. Weitere Informationen zum Festlegen der Ablaufverfolgungsebene finden Sie unter Einstellung der Grade für Protokollierung, Metriken und Ablaufverfolgung.

STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }

Gibt die Speicherserialisierungsrichtlinie für Apache Iceberg™-Tabellen an, die Snowflake als Katalog verwenden.

  • COMPATIBLE: Snowflake führt die Codierung und Komprimierung von Datendateien aus und stellt so die Interoperabilität mit Computing-Engines von Drittanbietern sicher.

  • OPTIMIZED: Snowflake führt die Codierung und Komprimierung von Datendateien aus, um eine optimale Tabellenperformance in Snowflake sicherzustellen.

Standard: OPTIMIZED

CLASSIFICATION_PROFILE = 'classification_profile'

Verknüpft das Schema mit einem Klassifizierungsprofil, sodass sensible Daten im Schema automatisch klassifiziert werden.

COMMENT = 'string_literal'

Gibt einen Kommentar zum Schema an.

Standard: Kein Wert

CATALOG_SYNC = 'snowflake_open_catalog_integration_name'

Gibt den Namen einer für Snowflake Open Catalog konfigurierten Katalogintegration an. Falls spezifiziert, synchronisiert Snowflake die von Snowflake verwalteten Apache Iceberg™-Tabellen im Schema 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.

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 dieser Operation verwendet wird, muss mindestens die folgenden Berechtigungen haben:

Berechtigung

Objekt

Anmerkungen

CREATE SCHEMA

Datenbank

Kann sowohl reguläre als auch verwaltete Zugriffsschemas erstellen.

CREATE SCHEMA … CLONE … WITH MANAGED ACCESS

Optionen

Die erforderlichen Berechtigungen hängen davon ab, ob das Quellschema verwaltet oder nicht verwaltet ist:

  • Verwaltet: OWNERSHIP für das Quellschema.

  • Nicht verwaltet: MANAGE GRANTS ON ACCOUNT und USAGE für das Quellschema.

USAGE

Externes Volume, Katalogintegration

Erforderlich beim Festlegen der Objektparameter EXTERNAL_VOLUME bzw. CATALOG.

MODIFY LOG LEVEL

Konto

Erforderlich, um den LOG_LEVEL für ein Schema festzulegen.

MODIFY TRACE LEVEL

Konto

Erforderlich, um den TRACE_LEVEL für ein Schema festzulegen.

OWNERSHIP

Schema

Nur erforderlich, wenn Sie eine CREATE OR ALTER SCHEMA-Anweisung für ein bestehendes Schema ausführen.

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

Eine Anleitung zum Erstellen einer kundenspezifischen Rolle mit einem bestimmten Satz 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.

Allgemeine Nutzungshinweise

  • Durch das Erstellen eines Schemas wird es automatisch als aktives/aktuelles Schema für die aktuelle Sitzung festgelegt (entspricht der Verwendung des Befehls USE SCHEMA für das Schema).

  • Wenn bereits ein Schema mit dem gleichen Namen in der Datenbank existiert, wird ein Fehler zurückgegeben, und das Schema wird nicht erstellt, es sei denn, das optionale Schlüsselwort OR REPLACE ist im Befehl angegeben.

    Wichtig

    Die Verwendung von OR REPLACE ist das Äquivalent zur Verwendung von DROP SCHEMA auf dem vorhandenen Schema und zur Erstellung eines neuen Schemas mit dem gleichen Namen; das gelöschte Schema wird jedoch nicht permanent aus dem System entfernt. Stattdessen wird es in Time Travel beibehalten. Dies ist wichtig, da in Time Travel entfernte Schemas den Datenspeicher für Ihr Konto beeinflussen. Weitere Informationen dazu finden Sie unter Speicherkosten für Time Travel und Fail-safe.

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

  • In einem Schema mit verwaltetem Zugriff verwaltet der Schemaeigentümer Berechtigungen für die enthaltenen Objekte (z. B. Tabellen oder Ansichten), verfügt jedoch über keine anderen Berechtigungen (USAGE, SELECT, DROP usw.) für die Objekte.

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

Nutzungshinweise zu CREATE OR ALTER SCHEMA

  • Es gelten alle Einschränkungen des Befehls ALTER SCHEMA.

  • Dieser Befehl unterstützt die folgenden Aktionen nicht:

    • Austauschen von Schemas mit dem Parameter SWAP WITH.

    • Umbenennen eines Schemas mit dem Parameter RENAME TO.

    • Erstellen eines Klons eines Schemas unter Verwendung des Parameters CLONE.

    • Hinzufügen oder Ändern von Tags und Richtlinien. Alle vorhandenen Tags und Richtlinien bleiben erhalten.

    • Konvertieren eines TRANSIENT Schemas in ein nicht TRANSIENT Schema oder umgekehrt.

Beispiele

Legen Sie ein dauerhaftes Schema an:

CREATE SCHEMA myschema;

SHOW SCHEMAS;

+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
| created_on                    | name               | is_default | is_current | database_name | owner        | comment                                                   | options | retention_time |
|-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------|
| 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N          | N          | MYDB          |              | Views describing the contents of schemas in this database |         | 1              |
| 2018-12-10 09:33:56.793 -0800 | MYSCHEMA           | N          | Y          | MYDB          | PUBLIC       |                                                           |         | 1              |
| 2018-11-26 06:08:24.263 -0800 | PUBLIC             | N          | N          | MYDB          | PUBLIC       |                                                           |         | 1              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
Copy

Erstellen Sie ein transientes Schema:

CREATE TRANSIENT SCHEMA tschema;

SHOW SCHEMAS;

+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+
| created_on                    | name               | is_default | is_current | database_name | owner        | comment                                                   | options   | retention_time |
|-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------|
| 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N          | N          | MYDB          |              | Views describing the contents of schemas in this database |           | 1              |
| 2018-12-10 09:33:56.793 -0800 | MYSCHEMA           | N          | Y          | MYDB          | PUBLIC       |                                                           |           | 1              |
| 2018-11-26 06:08:24.263 -0800 | PUBLIC             | N          | N          | MYDB          | PUBLIC       |                                                           |           | 1              |
| 2018-12-10 09:35:32.326 -0800 | TSCHEMA            | N          | Y          | MYDB          | PUBLIC       |                                                           | TRANSIENT | 1              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+
Copy

Erstellen Sie ein verwaltetes Zugriffsschema:

CREATE SCHEMA mschema WITH MANAGED ACCESS;

SHOW SCHEMAS;

+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+
| created_on                    | name               | is_default | is_current | database_name | owner        | comment                                                   | options        | retention_time |
|-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------|
| 2018-12-10 09:34:02.127 -0800 | INFORMATION_SCHEMA | N          | N          | MYDB          |              | Views describing the contents of schemas in this database |                | 1              |
| 2018-12-10 09:36:47.738 -0800 | MSCHEMA            | N          | Y          | MYDB          | ROLE1        |                                                           | MANAGED ACCESS | 1              |
| 2018-12-10 09:33:56.793 -0800 | MYSCHEMA           | N          | Y          | MYDB          | PUBLIC       |                                                           |                | 1              |
| 2018-11-26 06:08:24.263 -0800 | PUBLIC             | N          | N          | MYDB          | PUBLIC       |                                                           |                | 1              |
| 2018-12-10 09:35:32.326 -0800 | TSCHEMA            | N          | Y          | MYDB          | PUBLIC       |                                                           | TRANSIENT      | 1              |
+-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+
Copy

Beispiele zu CREATE OR ALTER SCHEMA

Einfaches Schema erstellen

Erstellen Sie ein Schema namens s1:

CREATE OR ALTER SCHEMA s1;
Copy

Erstellen oder ändern Sie das Schema s1 und legen Sie Eigenschaften und Parameter fest:

CREATE OR ALTER SCHEMA s1
  WITH MANAGED ACCESS
  DATA_RETENTION_TIME_IN_DAYS = 5
  DEFAULT_DDL_COLLATION = 'de';
Copy

Einen zuvor im Schema eingestellten Parameter zurücksetzen

Das Fehlen eines zuvor gesetzten Parameters in der geänderten Schemadefinition führt dazu, dass nicht mehr gesetzt ist. Im folgenden Beispiel wird der verwalteten Zugriff für das im vorherigen Beispiel erstellte Schema s1 ausgeschaltet:

CREATE OR ALTER SCHEMA s1
  DATA_RETENTION_TIME_IN_DAYS = 5
  DEFAULT_DDL_COLLATION = 'de';
Copy