CREATE SCHEMA¶
現在のデータベースに新しいスキーマを作成します。
このコマンドは次のバリアントをサポートしています。
- CREATE OR ALTER SCHEMA: スキーマが存在しない場合はスキーマを作成するか、既存のスキーマを変更します。 
- CREATE SCHEMA ... CLONE: 既存のスキーマのクローンを、現在の状態で、または過去の特定の時刻/時点で作成します(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> } ) ]
      [ 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>' , ... ] ) ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
  [ ENABLE_DATA_COMPACTION = { TRUE | FALSE } ]
復元されたスキーマ(スナップショットから)
CREATE SCHEMA <name> FROM SNAPSHOT SET <snapshot_set> IDENTIFIER '<snapshot_id>'
バリアント構文¶
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>' ]
CREATE SCHEMA ... CLONE¶
同じパラメーター値で新しいスキーマを作成します。
CREATE [ OR REPLACE ] SCHEMA [ IF NOT EXISTS ] <name> CLONE <source_schema> [ ... ]
詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。
必須パラメーター¶
- name
- スキーマの識別子を指定します。スキーマが作成されるデータベースに対して一意である必要があります。 - また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例: - "My object")。二重引用符で囲まれた識別子も大文字と小文字が区別されます。- 詳細については、 識別子の要件 をご参照ください。 
スナップショットパラメーター¶
その FROMSNAPSHOTSET 句は、バックアップからスキーマを復元します。他のスキーマプロパティは、バックアップスキーマにあるものとすべて同じであるため、指定しません。
このフォームには CREATEORREPLACE 句がありません。通常は、新しい名前でスキーマを復元して、この新しいスキーマからデータまたはその他のオブジェクトを回復させるか、元のスキーマの名前を変更してから、元の名前でスキーマを復元します。
注釈
復元されたスキーマは、スナップショットの元のスキーマから独立しています。復元されたスキーマと元のスキーマの間にクローニング関係はありません。したがって、復元されたスキーマ内のテーブルのすべてのマイクロパーティションは、そのスキーマによって所有されます。
新しく復元されたスキーマのバックアップを作成する場合は、そのスキーマ用に新しいスナップショットセットを作成します。
スナップショットの詳細については、バックアップと不変ストレージのスナップショット をご参照ください。
- snapshot_set
- 特定のスキーマ用に作成されたスナップショットセットの名前を指定します。SHOWSNAPSHOTSETS コマンドを使用して、適切なスナップショットセットを見つけることができます。 
- snapshot_id
- そのスナップショットセット内の特定のスナップショットの識別子を指定します。SHOWSNAPSHOTSINSNAPSHOTSET コマンドを使用して、スナップショットの作成日時に基づいて、スナップショットセット内で適切な識別子を見つけます。 
オプションのパラメーター¶
- 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: - 永続スキーマの場合は - 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
- 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です。 - ステートメントでのタグの指定に関する情報については、 オブジェクトのタグクォータ をご参照ください。 
- WITH CONTACT ( purpose = contact [ , purpose = contact ...] )
- 新しいオブジェクトを1つ以上の 連絡先 に関連付けます。 
- ENABLE_DATA_COMPACTION = { TRUE | FALSE }
- SnowflakeがSnowflake管理 Apache Iceberg™ テーブル でデータ圧縮を有効にするかどうかを指定します。 - TRUE:Snowflakeはテーブルでデータ圧縮を実行します。
- FALSE:Snowflakeはテーブルでデータ圧縮を実行しません。
 - デフォルト: - TRUE- 詳細については、 ENABLE_DATA_COMPACTION および データ圧縮の設定 をご参照ください。 
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
| 権限 | オブジェクト | 注意 | 
|---|---|---|
| CREATE SCHEMA | データベース | 通常のアクセススキーマと 管理アクセス スキーマの両方を作成できます。 | 
| CREATE SCHEMA ... CLONE ... WITH MANAGED ACCESS | オプション | 必要な権限は、ソーススキーマが管理されているか、管理されていないかによって異なります。 
 | 
| USAGE | 外部ボリューム、カタログ統合 | 
 | 
| 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のストレージコスト をご参照ください。
- OR REPLACEと- IF NOT EXISTS句は互いに排他的です。両方を同じステートメントで使うことはできません。
- CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。 
- 管理アクセススキーマでは、スキーマ所有者は含まれるオブジェクト(テーブルまたはビューなど)の許可を管理しますが、オブジェクトに対する他の権限(USAGE、 SELECT、 DROP など)はありません。 
- :doc:` カタログリンクデータベース</user-guide/tables-iceberg-catalog-linked-database>` で、このコマンドは、リンクされたIceberg REST カタログに名前空間を作成し、Snowflakeデータベースに対応するスキーマを作成します。このユースケースでは、Snowflakeは COMMENT および TAG オプションのみをサポートしています。CREATE OR ALTER および CLONE バリアントはサポートされていません。 
- メタデータについて。 - 注意 - 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 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+---------+----------------+
一時スキーマを作成します。
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 | +-------------------------------+--------------------+------------+------------+---------------+--------------+-----------------------------------------------------------+----------------+----------------+
CREATE OR ALTER SCHEMA の例¶
簡単なスキーマを作成する¶
s1 という名前のスキーマを作成します。
CREATE OR ALTER SCHEMA s1;
スキーマ s1 を作成または変更し、プロパティとパラメーターを設定します。
CREATE OR ALTER SCHEMA s1
  WITH MANAGED ACCESS
  DATA_RETENTION_TIME_IN_DAYS = 5
  DEFAULT_DDL_COLLATION = 'de';
以前にスキーマに設定されたパラメーターを解除する¶
変更されたスキーマ定義に 以前に設定されたパラメーターがない 場合、そのパラメーターは設定解除されます。次の例では、前の例で作成したスキーマ(s1)の管理アクセスをオフにします。
CREATE OR ALTER SCHEMA s1
  DATA_RETENTION_TIME_IN_DAYS = 5
  DEFAULT_DDL_COLLATION = 'de';