CREATE SCHEMA¶
Erstellt ein neues Schema in der aktuellen Datenbank.
Darüber hinaus kann dieser Befehl zum Klonen eines vorhandenen Schemas verwendet werden, entweder in seinem aktuellen Zustand 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
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 } ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
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
oder1
Enterprise Edition:
0
bis90
für permanente Schemata0
oder1
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.
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
COMMENT = 'string_literal'
Gibt einen Kommentar zum Schema 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 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:
|
USAGE |
Externes Volume, Katalogintegration |
Erforderlich beim Festlegen der Objektparameter |
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.
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.
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 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
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 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+
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 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+