CREATE SCHEMA¶
現在のデータベースに新しいスキーマを作成します。
さらに、このコマンドを使用して、 既存のスキーマ を 現在の状態で、または過去の特定の時刻/時点で(Time Travelを使用して)複製できます。スキーマのクローン作成の詳細については、 クローニングに関する考慮事項 をご参照ください。
- こちらもご参照ください。
ALTER SCHEMA、 DESCRIBE SCHEMA、 DROP SCHEMA、 SHOW SCHEMAS、 UNDROP SCHEMA
構文¶
CREATE [ OR REPLACE ] [ TRANSIENT ] SCHEMA [ IF NOT EXISTS ] <name>
[ CLONE <source_schema>
[ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ] ]
[ 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> ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
必須パラメーター¶
name
スキーマの識別子を指定します。スキーマが作成されるデータベースに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
オプションのパラメーター¶
TRANSIENT
スキーマを一時として指定します。一時スキーマにはFail-safe期間がないため、Time Travelを離れると追加のストレージコストは発生しません。ただし、これは、データが失われた場合にもFail-safeで保護されません。詳細については、 Fail-safeの理解と表示 をご参照ください。
また、定義により、一時的なスキーマで作成されたすべてのテーブルは一時的なものです。一時テーブルの詳細については、 CREATE TABLE をご参照ください。
デフォルト: 値なし(つまり、スキーマは永続的)
CLONE source_schema
指定したソーススキーマのクローンを作成することを指定します。スキーマのクローン作成の詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。
AT | BEFORE ( TIMESTAMP => timestamp | OFFSET => time_difference | STATEMENT => id )
スキーマのクローンを作成するとき、 AT | BEFORE 句はTime Travelを使用して過去の特定の時点またはそれ以前のスキーマをクローンすることを指定します。
WITH MANAGED ACCESS
管理スキーマを指定します。管理アクセススキーマは、スキーマの所有者とともに権限管理を集中化します。
通常のスキーマでは、オブジェクトの所有者(つまり、オブジェクトに対する OWNERSHIP 権限を持つロール)は、オブジェクトに対する追加の権限を他のロールに付与できます。管理スキーマでは、スキーマの所有者が、スキーマ内のオブジェクトに対する 将来の付与 を含むすべての権限付与を管理します。オブジェクト所有者は、オブジェクトに対する OWNERSHIP 権限を保持します。ただし、オブジェクトの権限付与を管理できるのはスキーマ所有者のみです。
DATA_RETENTION_TIME_IN_DAYS = integer
スキーマでTime Travelアクション(CLONE および UNDROP)を実行できる日数を指定し、スキーマで作成されたすべてのテーブルのデフォルトのTime Travel保持時間を指定します。詳細については、 Time Travelの理解と使用 をご参照ください。
このオブジェクトレベルパラメーターの詳細な説明、およびオブジェクトパラメーターの詳細については、 パラメーター をご参照ください。テーブルレベルの保持期間の詳細については、 CREATE TABLE および Time Travelの理解と使用 をご参照ください。
値:
Standard Edition:
0
または1
Enterprise Edition:
永続スキーマの場合は
0
~90
一時スキーマの場合は
0
または1
デフォルト:
Standard Edition:
1
Enterprise Edition(またはそれ以上):
1
(データベースまたはアカウントレベルで別のデフォルト値が指定されていない場合)
注釈
0
の値は、スキーマのTime Travelを効果的に無効にします。MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
Snowflakeがスキーマ内のテーブルのデータ保持期間を延長して、テーブル上のストリームが古くなるのを防ぐことができる最大日数を指定するオブジェクトパラメーター。
このパラメーターの詳細については、 MAX_DATA_EXTENSION_TIME_IN_DAYS をご参照ください。
EXTERNAL_VOLUME = external_volume_name
Icebergテーブル に使用するデフォルト外部ボリュームを指定するオブジェクトパラメーター。
このパラメーターの詳細については、 EXTERNAL_VOLUME をご参照ください。
CATALOG = catalog_integration_name
Icebergテーブル に使用するデフォルトのカタログ統合を指定するオブジェクトパラメーター。
このパラメーターの詳細については、 CATALOG をご参照ください。
DEFAULT_DDL_COLLATION = 'collation_specification'
スキーマに追加されたすべてのテーブルのデフォルトの 照合順序仕様 を指定します。デフォルトは、個々のテーブルレベルで上書きできます。
パラメーターの詳細については、 DEFAULT_DDL_COLLATION をご参照ください。
COMMENT = 'string_literal'
スキーマのコメントを指定します。
デフォルト: 値なし
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE SCHEMA |
データベース |
通常のアクセススキーマと 管理アクセス スキーマの両方を作成できます。 |
CREATE SCHEMA ... CLONE ... WITH MANAGED ACCESS |
オプション |
必要な権限は、ソーススキーマが管理されているか、管理されていないかによって異なります。
|
USAGE |
外部ボリューム、カタログ統合 |
|
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
スキーマを作成すると、現在のセッション用にアクティブ/現在のスキーマとして自動的に設定されます(スキーマに USE SCHEMA コマンドを使用するのと同等)。
同じ名前のスキーマがデータベースに既に存在する場合、オプションの
OR REPLACE
キーワードがコマンドで指定されない限り、エラーが返され、スキーマは作成されません。重要
OR REPLACE
を使用することは、既存のスキーマで DROP SCHEMA を使用してから、同じ名前で新しいスキーマを作成することと同等です。ただし、ドロップされたスキーマは、システムから完全に削除された :emph:`` ではありません。代わりに、Time Travelに保持されます。Time Travelでドロップされたスキーマは、アカウントのデータストレージに寄与するため、これは重要です。詳細については、 Time TravelおよびFail-safeのストレージコスト をご参照ください。CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
管理アクセススキーマでは、スキーマ所有者は含まれるオブジェクト(テーブルまたはビューなど)の許可を管理しますが、オブジェクトに対する他の権限(USAGE、 SELECT、 DROP など)はありません。
メタデータについて。
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
永続スキーマを作成します。
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 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
一時スキーマを作成します。
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 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+-----------+----------------+
管理アクセススキーマを作成します。
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 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+