Kategorien:

DDL für Datenbanken, Schemas und Freigaben

CREATE DATABASE

Erstellt eine neue Datenbank im System.

Darüber hinaus kann dieser Befehl für folgende Aufgaben verwendet werden:

Siehe auch:

ALTER DATABASE, SHOW DATABASES

DESCRIBE SHARE, SHOW SHARES

Syntax

Standarddatenbank

CREATE [ OR REPLACE ] [ TRANSIENT ] DATABASE [ IF NOT EXISTS ] <name>
    [ CLONE <source_db>
          [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ] ]
    [ DATA_RETENTION_TIME_IN_DAYS = <num> ]
    [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
    [ COMMENT = '<string_literal>' ]

Freigegebene Datenbank (aus einer Freigabe)

CREATE DATABASE <name> FROM SHARE <provider_account>.<share_name>

Sekundäre Datenbank (Datenbankreplikation)

CREATE DATABASE <name>
    AS REPLICA OF <snowflake_region>.<account_name>.<primary_db_name>
    AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = { TRUE | FALSE }

Erforderliche Parameter

Name

Gibt den Bezeichner für die 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ß- und Kleinschreibung zu beachten.

Weitere Details dazu finden Sie unter Anforderungen an Bezeichner.

Wichtig

Als bewährte Methode für Datenbankreplikation und Failover empfehlen wir, jeder sekundären Datenbank denselben Namen wie ihrer primären Datenbank zu geben. Diese Vorgehensweise unterstützt das Verweisen auf vollständig qualifizierte Objekte (d. h. '<Datenbank>.<Schema>.<Objekt>') durch andere Objekte in derselben Datenbank, z. B. das Abfragen eines vollständig qualifizierten Tabellennamens in einer Ansicht.

Wenn eine sekundäre Datenbank einen anderen Namen als die primäre Datenbank hat, werden diese Objektreferenzen in der sekundären Datenbank unterbrochen.

Parameter für Secure Data Sharing

Anbieterkonto.Freigabename

Gibt den Bezeichner der Freigabe an, aus der die Datenbank erstellt werden soll. Wie dokumentiert, muss der Name der Freigabe mit dem Namen des Kontos, das die Freigabe bereitstellt, vollqualifiziert sein.

Parameter für Datenbankreplikationen

AS REPLICA OF Snowflake-Region.Kontoname.Name_der_Primärdatenbank

Gibt den Bezeichner für eine Primärdatenbank an, von der ein Replikat (d. h. eine Sekundärdatenbank) erstellt werden soll. Wenn der Bezeichner Leerzeichen, Sonderzeichen oder Zeichen in Groß-/Kleinschreibung enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen eingeschlossen werden.

Erfordert den Namen der Primärdatenbank. Zusätzlich zum Datenbanknamen sind zusätzliche Segmente erforderlich, je nachdem, wo sich das Konto, in dem die Primärdatenbank gespeichert ist, relativ zu dem Konto befindet, in dem Sie das Replikat erstellen. Erweitern Sie die folgende Tabelle, um weitere Informationen zu erhalten:

Verweisen auf eine Datenbank in einem anderen Konto, einer anderen Region usw.

Qualifizierter Datenbankname

Konto, in dem das Replikat erstellt wird

Datenbankname

Gleiches Konto wie die Primärdatenbank.

Konto.Datenbankname

Dieselbe Region, aber ein anderes Konto als das Konto, in dem die Primärdatenbank gespeichert ist.

Snowflake-Region.Konto.Datenbankname

Dieselbe Regionsgruppe, aber eine andere Region als das Konto, in dem die Primärdatenbank gespeichert ist. Geben Sie die Snowflake-Regions-ID für Ihre Region an, in der die einzelnen Snowflake-Konten gehostet werden.

Optionale Parameter

TRANSIENT

Gibt eine Datenbank als transient an. Transiente Datenbanken 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 Verstehen und Anzeigen von Fail-safe.

Darüber hinaus sind per Definition alle Schemata (und damit alle Tabellen), die in einer transienten Datenbank erstellt werden, transient. Weitere Informationen zu transienten Tabellen finden Sie unter CREATE TABLE.

Standard: Kein Wert (d. h. die Datenbank ist permanent)

CLONE Quell-DB

Gibt an, dass ein Klon der angegebenen Quelldatenbank erstellt wird. Weitere Informationen zum Klonen einer Datenbank finden Sie unter CREATE <Objekt> … CLONE.

AT | BEFORE ( TIMESTAMP => Zeitstempel | OFFSET => Zeitunterschied | STATEMENT => ID )

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

DATA_RETENTION_TIME_IN_DAYS = Zahl

Gibt die Anzahl der Tage an, für die Time Travel-Aktionen (CLONE und UNDROP) auf der Datenbank ausgeführt werden können, sowie die standardmäßige Time Travel-Aufbewahrungsdauer für alle in der Datenbank erstellten Schemata. 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.

Werte:

  • Standardausführung: 0 oder 1

  • Enterprise Edition:

    • 0 bis 90 für permanente Datenbanken

    • 0 oder 1 für transiente Datenbanken

Standard:

  • Standardausführung: 1

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

Bemerkung

Mit dem Wert 0 wird Time Travel für die Datenbank deaktiviert.

DEFAULT_DDL_COLLATION = 'Sortierungsspezifikation'

Gibt eine Standardsortierungsspezifikation für alle zur Datenbank hinzugefügten Schemas und Tabellen an. Der Standardwert kann auf der Ebene des Schemas und der einzelnen Tabelle überschrieben werden.

Weitere Informationen zu diesem Parameter finden Sie unter DEFAULT_DDL_COLLATION.

COMMENT = 'Zeichenfolgenliteral'

Gibt einen Kommentar für die Datenbank an.

Standard: Kein Wert

Parameter für Datenbankreplikationen

AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = TRUE | FALSE

Gibt an, ob für materialisierte Ansichten der sekundären Datenbank eine automatische Hintergrundwartung durchgeführt werden soll.

  • TRUE aktiviert die automatische Hintergrundwartung von materialisierten Ansichten in der sekundären Datenbank. Wenn für eine materialisierte Ansicht in der Primärdatenbank Automatic Clustering aktiviert ist, werden auch das automatische Überwachen und das Reclustering der materialisierten Ansicht in der Sekundärdatenbank aktiviert.

  • FALSE deaktiviert die automatische Hintergrundwartung materialisierter Ansichten. Während einer Aktualisierungsoperation werden nur die Definitionen der materialisierten Ansicht in die sekundäre Datenbank repliziert.

Standard: FALSE

Allgemeine Nutzungshinweise

  • Das Erstellen einer Datenbank setzt die Datenbank automatisch als aktiv/aktuell für die aktuelle Sitzung (entspricht der Verwendung des Befehls USE DATABASE für die Datenbank).

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

    Wichtig

    Die Verwendung von OR REPLACE entspricht der Verwendung von DROP DATABASE für die vorhandene Datenbank und dem Erstellen einer neuen Datenbank mit dem gleichen Namen. Die entfernte Datenbank wird jedoch nicht dauerhaft aus dem System gelöscht. Stattdessen wird sie in Time Travel aufbewahrt. Dies ist wichtig, da in Time Travel gelöschte Datenbanken den Datenspeicher für Ihr Konto beeinflussen. Weitere Informationen dazu finden Sie unter Speicherkosten für Time Travel und Fail-safe.

  • Beim Erstellen einer neuen Datenbank werden automatisch zwei Schemas in der Datenbank erstellt:

    • PUBLIC: Standardschema für die Datenbank.

    • INFORMATION_SCHEMA: Schema, das Ansichten und Tabellenfunktionen enthält, die für die Abfrage von Metadaten über die Objekte in der Datenbank sowie über alle Objekte im Konto verwendet werden kann.

  • Datenbanken, die aus Freigaben erstellt werden, unterscheiden sich von Standarddatenbanken durch folgende Punkte:

    • Sie haben nicht die PUBLIC- oder INFORMATION_SCHEMA-Schemata, es sei denn, diese Schemata wurden der Freigabe ausdrücklich gewährt.

    • Sie können nicht geklont werden.

    • Eigenschaften wie TRANSIENT und DATA_RETENTION_TIME_IN_DAYS gelten nicht.

  • Wenn eine Datenbank aktiv/aktuell ist, ist das PUBLIC-Schema standardmäßig auch aktiv/aktuell, es sei denn, es wird ein anderes Schema verwendet oder das PUBLIC-Schema wurde gelöscht.

Nutzungshinweise zur Datenbankreplikation

  • Bei der Datenbankreplikation werden zum Kopieren von Objekten und Daten die von Snowflake bereitgestellten Computeressourcen anstelle Ihres eigenen virtuellen Warehouse verwendet. Der Sitzungs-/Objektparameter STATEMENT_TIMEOUT_IN_SECONDS steuert jedoch weiterhin, wie lange eine Anweisung ausgeführt wird, bevor sie abgebrochen wird. Der Standardwert ist 172800 (2 Tage). Da die erstmalige Replikation einer Primärdatenbank länger als 2 Tage dauern kann (abhängig von der Menge der Metadaten in der Datenbank sowie der Menge der Daten in den Datenbankobjekten), empfehlen wir, den Wert STATEMENT_TIMEOUT_IN_SECONDS für die Sitzung, in der Sie den Replikationsoperation ausführen, auf 604800 (7 Tage, Maximalwert) zu erhöhen.

    Führen Sie die folgende ALTER SESSION-Anweisung aus, bevor Sie in derselben Sitzung die Anweisung ALTER DATABASE Name_der_Sekundärdatenbank REFRESH ausführen:

    ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
    

    Beachten Sie, dass der Parameter STATEMENT_TIMEOUT_IN_SECONDS auch für das aktive Warehouse einer Sitzung gilt. Der Parameter berücksichtigt den niedrigeren Wert, der auf Sitzungs- oder Warehouse-Ebene festgelegt wurde. Wenn Sie in der aktuellen Sitzung ein aktives Warehouse haben, setzen Sie STATEMENT_TIMEOUT_IN_SECONDS auch für dieses Warehouse auf 604800 (mithilfe von ALTER WAREHOUSE).

    Beispiel:

    -- determine the active warehouse in the current session (if any)
    SELECT CURRENT_WAREHOUSE();
    
    +---------------------+
    | CURRENT_WAREHOUSE() |
    |---------------------|
    | MY_WH               |
    +---------------------+
    
    -- change the STATEMENT_TIMEOUT_IN_SECONDS value for the active warehouse
    
    ALTER WAREHOUSE my_wh SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
    

    Sie können den Parameterwert nach Abschluss des Replikationsvorgangs auf den Standardwert zurücksetzen:

    ALTER WAREHOUSE my_wh UNSET STATEMENT_TIMEOUT_IN_SECONDS;
    

Beispiele

Erstellen Sie zwei permanente Datenbanken, eine mit einer Datenaufbewahrungsfrist von 10 Tagen:

CREATE DATABASE mytestdb;

CREATE DATABASE mytestdb2 DATA_RETENTION_TIME_IN_DAYS = 10;

SHOW DATABASES LIKE 'my%';

+---------------------------------+------------+------------+------------+--------+----------+---------+---------+----------------+
| created_on                      | name       | is_default | is_current | origin | owner    | comment | options | retention_time |
|---------------------------------+------------+------------+------------+--------+----------+---------+---------+----------------|
| Tue, 17 Mar 2016 16:57:04 -0700 | MYTESTDB   | N          | N          |        | PUBLIC   |         |         | 1              |
| Tue, 17 Mar 2016 17:06:32 -0700 | MYTESTDB2  | N          | N          |        | PUBLIC   |         |         | 10             |
+---------------------------------+------------+------------+------------+--------+----------+---------+---------+----------------+

Erstellen Sie eine transiente Datenbank:

CREATE TRANSIENT DATABASE mytransientdb;

SHOW DATABASES LIKE 'my%';

+---------------------------------+---------------+------------+------------+--------+----------+---------+-----------+----------------+
| created_on                      | name          | is_default | is_current | origin | owner    | comment | options   | retention_time |
|---------------------------------+---------------+------------+------------+--------+----------+---------+-----------+----------------|
| Tue, 17 Mar 2016 16:57:04 -0700 | MYTESTDB      | N          | N          |        | PUBLIC   |         |           | 1              |
| Tue, 17 Mar 2016 17:06:32 -0700 | MYTESTDB2     | N          | N          |        | PUBLIC   |         |           | 10             |
| Tue, 17 Mar 2015 17:07:51 -0700 | MYTRANSIENTDB | N          | N          |        | PUBLIC   |         | TRANSIENT | 1              |
+---------------------------------+---------------+------------+------------+--------+----------+---------+-----------+----------------+

Erstellen Sie eine Datenbank aus einer Freigabe, die vom Konto ab67890 bereitgestellt wird:

CREATE DATABASE snow_sales FROM SHARE ab67890.sales_s;

Ausführlichere Beispiele zum Erstellen einer Datenbank aus einer Freigabe finden Sie unter Datenverbraucher.

Beispiele für die Datenbankreplikation

Im folgenden Beispiel wird ein Replikat der Primärdatenbank aws_us_west_2.myaccount1.mydb1 im Konto aws_us_east_1.myaccount2 erstellt und die automatische Aktualisierung der materialisierten Ansichten im Replikat aktiviert. Die SQL-Anweisung wird in derselben AWS-Regionsgruppe (public) ausgeführt, jedoch in einer anderen Region als das Konto, in dem die primäre Datenbank gespeichert ist:

CREATE DATABASE mydb1
  AS REPLICA OF aws_us_west_2.myaccount.mydb1
  AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = TRUE;