CREATE SCHEMA

現在のデータベースに新しいスキーマを作成します。

このコマンドは次のバリアントをサポートしています。

  • CREATE OR ALTER SCHEMA: スキーマが存在しない場合はスキーマを作成するか、既存のスキーマを変更します。

  • CREATE SCHEMA ... CLONE: 既存のスキーマのクローンを、現在の状態で、または過去の特定の時刻/時点で作成します(Time Travelを使用)。スキーマのクローン作成の詳細については、 クローニングに関する考慮事項 をご参照ください。

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

ALTER SCHEMADESCRIBE SCHEMADROP SCHEMASHOW SCHEMASUNDROP SCHEMA

CREATE OR ALTER <オブジェクト>

構文

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

バリアント構文

CREATE OR ALTER SCHEMA

スキーマがまだ存在しない場合は新規に作成し、存在する場合は既存のスキーマをステートメントで定義されたスキーマに変換します。CREATE OR ALTER SCHEMA ステートメントは、 CREATE SCHEMA ステートメントの構文ルールに従い、このステートメントには ALTER SCHEMA ステートメントと同じ制限があります。

詳細については、 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

同じパラメーター値で新しいスキーマを作成します。

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

詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。

必須パラメーター

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を使用して過去の特定の時点またはそれ以前のスキーマをクローンすることを指定します。

IGNORE TABLES WITH INSUFFICIENT DATA RETENTION

Time Travelでクローンに利用可能な履歴データがなくなったテーブルを無視します。AT | BEFORE 句で指定された過去の時間が、データベースまたはスキーマ内の子テーブルのデータ保持期間を超えている場合は、子テーブルのクローン作成操作をスキップします。詳細については、 子オブジェクトとデータ保持時間 をご参照ください。

IGNORE HYBRID TABLES

無視されたハイブリッド・テーブルはクローンされません。ハイブリッド・テーブルを含むスキーマをクローンするには、このオプションを使用します。クローンされたスキーマは他のオブジェクトを含むが、ハイブリッド・テーブルはスキップします。

このオプションを使用せず、スキーマに1つ以上のハイブリッド・テーブルが含まれている場合、コマンドはハイブリッド・テーブルを無言で無視します。しかし、ハイブリッド・テーブルを含むスキーマのエラー処理は、今後のリリースで変更される予定です。したがって、先手を打ってコマンドにこのパラメータを追加しておくとよいでしょう。

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:

    • 永続スキーマの場合は 090

    • 一時スキーマの場合は 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

Apache Iceberg™ テーブル に使用するデフォルト外部ボリュームを指定するオブジェクトパラメーター。

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

CATALOG = catalog_integration_name

Apache Iceberg™ テーブル に使用するデフォルトのカタログ統合を指定するオブジェクトパラメーター。

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

REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }

Icebergテーブル のクエリ結果で、無効な UTF -8文字をUnicode置換文字(�)で置き換えるかどうかを指定します。このパラメーターを設定できるのは、外部Icebergカタログを使用するテーブルのみです。

  • TRUE の場合は、無効な UTF -8文字がUnicode置換文字に置き換えられます。

  • FALSE の場合は、無効な UTF -8 文字は変更されません。Parquetデータファイルで無効な UTF -8 文字が検出された場合、Snowflakeはユーザーエラーメッセージを返します。

デフォルト: FALSE

DEFAULT_DDL_COLLATION = 'collation_specification'

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

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

LOG_LEVEL = 'log_level'

インジェストされ、アクティブなイベントテーブルで使用できるようにするメッセージの重大度レベルを指定します。指定されたレベル(およびそれよりも重大なレベル)のメッセージがインジェストされます。

レベルの詳細については、 LOG_LEVEL をご参照ください。ログレベルの設定については、 ロギング、メトリクス、トレースのレベル設定 をご参照ください。

TRACE_LEVEL = 'trace_level'

トレースイベントがイベントテーブルにインジェストされる方法を制御します。

レベルの詳細については、 TRACE_LEVEL をご参照ください。トレースレベルの設定については、 ロギング、メトリクス、トレースのレベル設定 をご参照ください。

STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }

カタログとしてSnowflakeを使用する Apache Iceberg™ テーブル のストレージシリアル化ポリシーを指定します。

  • COMPATIBLE: Snowflakeはデータファイルのエンコードと圧縮を実行し、サードパーティのコンピューティングエンジンとの相互運用性を確保します。

  • OPTIMIZED: Snowflakeはデータファイルのエンコードと圧縮を実行し、Snowflake内で最高のテーブルパフォーマンスを実現します。

デフォルト: OPTIMIZED

CLASSIFICATION_PROFILE = 'classification_profile'

スキーマと分類プロファイルを関連付け、スキーマ内の機密データが 自動的に分類 されるようにします。

COMMENT = 'string_literal'

スキーマのコメントを指定します。

デフォルト: 値なし

CATALOG_SYNC = 'snowflake_open_catalog_integration_name'

Snowflake Open Catalog 用に構成されたカタログ統合の名前を指定します。指定すると、Snowflakeはスキーマ内のSnowflake管理 Apache Iceberg™ テーブルを Snowflake Open Catalog アカウントの外部カタログと同期します。Snowflake管理のIcebergテーブルとOpen Catalogの同期に関する情報については、 Snowflakeで管理されたテーブルを Snowflake Open Catalog と同期する をご参照ください。

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

デフォルト: 値なし

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

タグ の名前とタグ文字列の値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。

ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。

アクセス制御の要件

この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。

権限

オブジェクト

メモ

CREATE SCHEMA

データベース

通常のアクセススキーマと 管理アクセス スキーマの両方を作成できます。

CREATE SCHEMA ... CLONE ... WITH MANAGED ACCESS

オプション

必要な権限は、ソーススキーマが管理されているか、管理されていないかによって異なります。

  • 管理: ソーススキーマの OWNERSHIP。

  • 非管理: ソーススキーマ上の MANAGE GRANTS ON ACCOUNT および USAGE。

USAGE

外部ボリューム、カタログ統合

EXTERNAL_VOLUME または CATALOG オブジェクトパラメーターをそれぞれ設定する場合は必須。

MODIFY LOG LEVEL

アカウント

スキーマに LOG_LEVEL を設定するために必要です。

MODIFY TRACE LEVEL

アカウント

スキーマに TRACE_LEVEL を設定するために必要です。

OWNERSHIP

スキーマ

既存のスキーマに対して CREATE OR ALTER SCHEMA ステートメントを実行する場合にのみ必要です。

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

指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。

セキュリティ保護可能なオブジェクト に対して 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 OR ALTER SCHEMA の使用上の注意

  • ALTER SCHEMA コマンドのすべての制限が適用されます。

  • このコマンドは、次のアクションをサポートして いません

    • SWAP WITH パラメーターを使用したスキーマの入れ替え。

    • RENAME TO パラメーターを使用したスキーマの名前変更。

    • CLONE パラメーターを使用したスキーマのクローン作成。

    • タグやポリシーの追加や変更。既存のタグとポリシーは保持されます。

    • TRANSIENT スキーマから TRANSIENT 以外へのスキーマ変換、またはその逆。

永続スキーマを作成します。

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

一時スキーマを作成します。

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

管理アクセススキーマを作成します。

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

CREATE OR ALTER SCHEMA の例

簡単なスキーマを作成する

s1 という名前のスキーマを作成します。

CREATE OR ALTER SCHEMA s1;
Copy

スキーマ s1 を作成または変更し、プロパティとパラメーターを設定します。

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

以前にスキーマに設定されたパラメーターを解除する

変更されたスキーマ定義に 以前に設定されたパラメーターがない 場合、そのパラメーターは設定解除されます。次の例では、前の例で作成したスキーマ(s1)の管理アクセスをオフにします。

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