カテゴリ:

データベース、スキーマ、共有 DDL

CREATE DATABASE

システムに新しいデータベースを作成します。

さらに、このコマンドは次の目的にも使用できます。

こちらもご参照ください:

ALTER DATABASESHOW DATABASES

DESCRIBE SHARESHOW SHARES

構文

標準データベース

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>' ]

共有データベース(共有から)

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

セカンダリデータベース(データベース複製)

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

必須パラメーター

名前

データベースの識別子を指定します。アカウントに対して一意である必要があります。

また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。

詳細については、 識別子の要件 をご参照ください。

重要

データベースの複製とフェールオーバー のベストプラクティスとして、各セカンダリデータベースにプライマリデータベースと同じ名前を付けることをお勧めします。このプラクティスは、ビュー内の完全修飾テーブル名のクエリなど、同じデータベース内の他のオブジェクトによる完全修飾オブジェクト(つまり、 '<データベース>.<スキーマ>.<オブジェクト>')の参照をサポートしています。

セカンダリデータベースの名前がプライマリデータベースと異なる場合、これらのオブジェクト参照はセカンダリデータベースで壊れます。

Secure Data Sharingパラメーター

プロバイダーアカウント.共有名

データベースを作成する 共有 の識別子を指定します。文書化されているように、共有の名前は、共有を提供するアカウントの名前で完全に修飾されている必要があります。

データベースの複製のパラメーター

AS REPLICA OF Snowflake地域.アカウント名.プライマリデータベース名

レプリカを作成するプライマリデータベース(セカンダリデータベース)の識別子を指定します。識別子にスペース、特殊文字、または大文字と小文字が混在する場合、文字列全体を二重引用符で囲む必要があります。

プライマリデータベースの名前が必要です。データベース名に加えて、プライマリデータベースを格納するアカウントがレプリカを作成するアカウントに対してどこにあるかに応じて、追加のセグメントが必要です。詳細については、次のテーブルを展開してください。

別のアカウント、地域などのデータベースを参照します。

修飾データベース名

レプリカが作成されるアカウント

データベース名

プライマリデータベースと同じアカウント。

アカウント.データベース名

プライマリデータベースを格納するアカウントと同じ地域ですが、アカウントは異なります。

Snowflake地域.アカウント.データベース名

プライマリデータベースを格納するアカウントと同じ地域グループですが、地域は異なります。各Snowflakeアカウントがホストされている地域のSnowflake地域 ID を指定します。

オプションのパラメーター

TRANSIENT

データベースを一時として指定します。一時的なデータベースにはFail-safe期間がないため、Time Travelを離れると追加のストレージコストは発生しません。ただし、これは、データが失われた場合にもFail-safeで保護されないことを意味します。詳細については、 Fail-safeの理解と表示 をご参照ください。

さらに、定義上、一時データベースで作成されたすべてのスキーマ(および結果としてすべてのテーブル)は一時的です。一時テーブルの詳細については、 CREATE TABLE をご参照ください。

デフォルト:値なし(つまり、データベースは永続的)

CLONE ソースデータベース

指定したソースデータベースのクローンを作成することを指定します。データベースのクローン作成の詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。

AT | BEFORE ( TIMESTAMP => タイムスタンプ | OFFSET => 時差 | STATEMENT => id )

データベースのクローンを作成するとき、 AT | BEFORE 句は、Time Travelを使用して、過去の特定の時点またはそれ以前のデータベースをクローンすることを指定します。

DATA_RETENTION_TIME_IN_DAYS = 数値

データベースでTime Travelアクション(CLONE および UNDROP)を実行できる日数を指定し、さらにデータベースで作成されたすべてのスキーマのデフォルトのTime Travel保持時間を指定します。詳細については、 Time Travelの理解と使用 をご参照ください。

このオブジェクトレベルパラメーターの詳細な説明、およびオブジェクトパラメーターの詳細については、 パラメーター をご参照ください。

値:

  • Standard Edition: 0 または 1

  • Enterprise Edition:

    • 永続データベースの場合は 090

    • 一次データベースの場合は 0 または 1

デフォルト:

  • Standard Edition: 1

  • Enterprise Edition(またはそれ以上): 1 (アカウントレベルで別のデフォルト値が指定されていない場合)

注釈

0 の値は、データベースのTime Travelを効果的に無効にします。

DEFAULT_DDL_COLLATION = '照合仕様'

データベースに追加されたすべてのスキーマとテーブルのデフォルトの 照合仕様 を指定します。デフォルトは、スキーマおよび個々のテーブルレベルで上書きできます。

パラメーターの詳細については、 DEFAULT_DDL_COLLATION をご参照ください。

COMMENT = '文字列リテラル'

データベースのコメントを指定します。

デフォルト:値なし

データベースの複製のパラメーター

AUTO_REFRESH_MATERIALIZED_VIEWS_ON_SECONDARY = TRUE | FALSE

セカンダリデータベースのマテリアライズドビューの、自動バックグラウンドメンテナンスを実行するかどうかを指定します。

  • TRUE は、セカンダリデータベースのマテリアライズドビューの自動バックグラウンドメンテナンスを有効にします。プライマリデータベースのマテリアライズドビューに対して自動クラスタリングが有効になっている場合、これにより、セカンダリデータベースのマテリアライズドビューの自動モニタリングと再クラスタリングも有効になります。

  • FALSE は、マテリアライズドビューの自動バックグラウンドメンテナンスを無効にします。更新操作中、マテリアライズドビュー定義のみがセカンダリデータベースに複製されます。

デフォルト: FALSE

一般的な使用上の注意

  • データベースを作成すると、現在のセッション用にアクティブ/現在のデータベースとして自動的に設定されます(データベースに対して USE DATABASE コマンドを使用するのと同等)。

  • 同じ名前のデータベースが既に存在する場合、エラーが返され、コマンドでオプションの OR REPLACE キーワードが指定されていない限り、データベースは作成されません。

    重要

    OR REPLACE の使用は、既存のデータベースで DROP DATABASE を使用してから、同じ名前で新しいデータベースを作成することと同等です。ただし、ドロップされたデータベースは、システムから完全には削除 されません 。代わりに、Time Travel内で保持されます。Time Travelでドロップされたデータベースはアカウントのデータストレージに寄与するため、これは重要です。詳細については、 Time TravelおよびFail-safeのストレージコスト をご参照ください。

  • 新しいデータベースを作成すると、データベースに2つのスキーマが自動的に作成されます。

    • PUBLIC :データベースのデフォルトのスキーマ。

    • INFORMATION_SCHEMA :データベース内のオブジェクトに関するメタデータのクエリに使用できるビューとテーブル関数を含むスキーマ。アカウント内のすべてのオブジェクトにわたって使用できます。

  • 共有から作成されたデータベースは、次の点で標準データベースと異なります。

    • これらのスキーマが共有に明示的に付与されていない限り、PUBLIC または INFORMATION_SCHEMA スキーマはありません。

    • それらはクローンできません。

    • TRANSIENTDATA_RETENTION_TIME_IN_DAYS などのプロパティは適用されません。

  • データベースがアクティブ/現在の場合、別のスキーマを使用するか、 PUBLIC スキーマをドロップしない限り、PUBLIC スキーマもデフォルトでアクティブ/現在になります。

データベース複製の使用上の注意

  • データベースの複製では、独自の仮想ウェアハウスではなく、Snowflakeが提供する計算リソースを使用してオブジェクトとデータをコピーします。ただし、 STATEMENT_TIMEOUT_IN_SECONDS セッション/オブジェクトパラメーターは、ステートメントがキャンセルされるまでの実行時間を制御します。デフォルト値は 172800 (2日)です。プライマリデータベースの 初期複製 の完了には2日以上かかる場合があるため(データベースのメタデータの量とデータベースオブジェクトのデータの量に応じて異なります)、複製操作を実行するセッションの STATEMENT_TIMEOUT_IN_SECONDS 値を 604800 (最大値の7日)に増やします。

    同じセッションで ALTER DATABASE セカンダリデータベース名 REFRESH ス テートメントを実行する前に、次の ALTER SESSION ステートメントを実行します。

    ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
    

    STATEMENT_TIMEOUT_IN_SECONDS パラメーターは、セッション内のアクティブなウェアハウスにも適用されることに注意してください。このパラメーターは、セッションレベルまたはウェアハウスレベルで設定された 低い 値を優先します。現在のセッションでアクティブなウェアハウスがある場合は、このウェアハウスの STATEMENT_TIMEOUT_IN_SECONDS も 604800 に設定します( ALTER WAREHOUSE を使用)。

    例:

    -- 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;
    

    複製操作が完了した後、パラメーター値をデフォルトにリセットできます。

    ALTER WAREHOUSE my_wh UNSET STATEMENT_TIMEOUT_IN_SECONDS;
    

データ保持期間が10日である2つの永続的なデータベースを作成します。

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             |
+---------------------------------+------------+------------+------------+--------+----------+---------+---------+----------------+

一時データベースを作成します。

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              |
+---------------------------------+---------------+------------+------------+--------+----------+---------+-----------+----------------+

アカウント ab67890 が提供する共有からデータベースを作成します。

CREATE DATABASE snow_sales FROM SHARE ab67890.sales_s;

共有からデータベースを作成する詳細な例については、 データコンシューマー をご参照ください。

データベース複製の例

次の例では、 aws_us_east_1.myaccount2 アカウントに aws_us_west_2.myaccount1.mydb1 プライマリデータベースのレプリカを作成し、レプリカのマテリアライズドビューの自動更新を有効にします。 SQL ステートメントは、同じ AWS 地域グループ(public)で実行されますが、プライマリデータベースを保存するアカウントとは異なる地域で実行されます。

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