CREATE ICEBERG TABLE¶
現在の/指定されたスキーマに新しい Icebergテーブル を作成するか、既存のIcebergテーブルを置き換えます。Icebergテーブルは、高速 SQL 処理、セキュリティと認証、データガバナンスといったSnowflakeテーブルの標準機能と、オープンな Apache Iceberg メタデータとストレージを組み合わせます。
さらに、このコマンドはSnowflakeをカタログとして使用するIcebergテーブルに対して以下のバリアントをサポートします。
CREATE ICEBERGTABLE ... AS SELECT (データが入ったテーブルを作成します。CTAS とも呼ばれます)
CREATE ICEBERGTABLE ... LIKE (既存テーブルの空のコピーを作成します)
このトピックでは、 Iceberg tables と指定することで混乱を避ける場合を除き、Icebergテーブルを単に「テーブル」と呼びます。
注釈
テーブルを作成する前に、Icebergメタデータとデータファイルを格納する 外部ボリューム を作成する必要があります。手順については、 Icebergテーブル用に外部ボリュームを構成する をご参照ください。
外部Icebergカタログを使用する場合、またはカタログを一切使用しない場合は、デーブルのカタログ統合も作成する必要があります。詳細については、 Icebergテーブルのカタログ統合を構成する をご参照ください。
このトピックの内容:
構文¶
IcebergカタログとしてのSnowflake¶
-- Snowflake as the Iceberg catalog
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name> (
-- Column definition
<col_name> <col_type>
[ inlineConstraint ]
[ NOT NULL ]
[ COLLATE '<collation_specification>' ]
[ { DEFAULT <expr>
| { AUTOINCREMENT | IDENTITY }
[ { ( <start_num> , <step_num> )
| START <num> INCREMENT <num>
} ]
} ]
[ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ COMMENT '<string_literal>' ]
-- Additional column definitions
[ , <col_name> <col_type> [ ... ] ]
-- Out-of-line constraints
[ , outoflineConstraint [ ... ] ]
)
[ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = 'SNOWFLAKE' ]
BASE_LOCATION = '<relative_path_from_external_volume>'
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
条件:
inlineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } [ <constraint_properties> ]インライン制約の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。
outoflineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ] | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ] | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ] REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ] } [ <constraint_properties> ]アウトライン制約の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。
外部Icebergカタログ¶
-- External Iceberg catalog
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = '<catalog_integration_name>' ]
externalCatalogParams
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ COMMENT = '<string_literal>' ]
条件:
externalCatalogParams (for AWS Glue Data Catalog) ::= CATALOG_TABLE_NAME = '<catalog_table_name>' [ CATALOG_NAMESPACE = '<catalog_namespace>' ]externalCatalogParams (for Iceberg files in object storage) ::= METADATA_FILE_PATH = '<metadata_file_path>'
バリアント構文¶
Snowflakeをカタログとして使用するIcebergテーブルの作成には、次のバリアント構文がサポートされています。
CREATE ICEBERG TABLE ... AS SELECT (CTAS とも呼ばれる)¶
クエリによって返されたデータが入力される新しいテーブルを作成します。
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ] [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ] [ COPY GRANTS ] AS SELECT <query> [ ... ]
マスキングポリシーは、 CTAS ステートメントの列に適用できます。列のデータ型の後にマスキングポリシーを指定します。同様に、行アクセスポリシーをテーブルに適用できます。例:
CREATE ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] ) ... [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] ) AS SELECT <query> [ ... ]
注釈
CTAS では、 COPY GRANTS 句は、 OR REPLACE 句と組み合わせた場合にのみ有効です。COPY GRANTS は、SELECT ステートメントでクエリされているソーステーブルからではなく、 CREATE OR REPLACE で置き換えられているテーブル(既に存在する場合)から権限をコピーします。CTAS と合わせて COPY GRANTS を使用すると、テーブルに対する既存の権限を維持しながら、新しいデータセットでテーブルを上書きできます。
COPY GRANTS の詳細については、このドキュメントの COPY GRANTS をご参照ください。
CREATE ICEBERG TABLE ... LIKE¶
既存のテーブルと同じ列定義を使用して新しいテーブルを作成しますが、既存のテーブルからデータをコピーしません。列名、タイプ、デフォルト、および制約が新しいテーブルにコピーされます。
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> LIKE <source_table> [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ] [ COPY GRANTS ] [ ... ]
COPY GRANTS の詳細については、このドキュメントの COPY GRANTS をご参照ください。
注釈
データ共有を介してアクセスされる自動インクリメントシーケンスを持つテーブルに対するCREATE TABLE ... LIKEは、現在 サポートされていません。
必須パラメーター¶
table_name
テーブルの識別子(名前)を指定します。テーブルが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
col_name
列の識別子(名前)を指定します。テーブル識別子のすべての要件は、列識別子にも適用されます。
詳細については、 識別子の要件 および 予約済みおよび限定キーワード をご参照ください。
注釈
標準の予約キーワードに加えて、次のキーワードは ANSI標準コンテキスト関数用に予約されているため、列識別子として使用できません。
CURRENT_DATE
CURRENT_ROLE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
予約済みキーワードのリストについては、 予約済みおよび限定キーワード をご参照ください。
col_type
列のデータ型を指定します。
テーブル列に指定できるデータ型の情報については、 Icebergテーブルのデータ型 をご参照ください。
query
INFER_SCHEMA 関数を呼び出し、出力を配列としてフォーマットするサブクエリ。
オプションのパラメーター¶
EXTERNAL_VOLUME = 'external_volume_name'
IcebergテーブルがメタデータファイルとデータをParquet形式で保存する外部ボリュームの識別子(名前)を指定します。Icebergのメタデータとマニフェストファイルには、テーブルスキーマ、パーティション、スナップショット、その他のメタデータが格納されています。
このパラメーターを指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントの外部ボリュームになります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
CONSTRAINT ...
テーブル内の指定された列のインラインまたはアウトライン制約を定義します。
構文の情報については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。制約の詳細については、 制約 をご参照ください。
COLLATE 'collation_specification'
文字列比較などの列操作に使用する照合順序を指定します。このオプションはテキスト列(VARCHAR、 STRING、 TEXTなど)にのみ適用されます。詳細については、 照合仕様 をご参照ください。
DEFAULT ...
または .AUTOINCREMENT ...
INSERT または CREATE TABLE AS SELECT ステートメントで値が明示的に指定されていない場合に、デフォルト値を列に自動的に挿入するかどうかを指定します。
DEFAULT expr
列のデフォルト値は、次のいずれかの指定可能な式によって定義されます。
定数値。
シーケンス参照(
seq_name.NEXTVAL
)。スカラー値を返す単純式。
UDFが セキュアUDF でない場合、単純式にSQL UDF(ユーザー定義関数)を含めることができます。
注釈
デフォルトの式がSQLユーザー定義関数(UDF)を参照している場合、関数はテーブル作成時にその定義に置き換えられます。ユーザー定義関数が将来再定義される場合は、列のデフォルト式は更新されません。
単純式 cannot には、次の参照を含めることができません。
サブクエリ。
集計。
ウィンドウ関数。
セキュアUDFs
SQL 以外の言語で記述された UDFs (例: Java、JavaScript)。
外部関数。
- {
AUTOINCREMENT
|IDENTITY
} [ {( start_num , step_num )
|START num INCREMENT num
} ] AUTOINCREMENT
とIDENTITY
は同義語です。いずれかが使用されている場合、列のデフォルト値は指定された数値で始まり、連続する各値は指定された量だけ自動的に増加します。注意
Snowflakeはシーケンスを使用して、自動インクリメントされた列の値を生成します。シーケンスには制限があります。 シーケンスのセマンティクス をご参照ください。
開始とステップ/増分の両方のデフォルト値は
1
です。AUTOINCREMENT
およびIDENTITY
は、数値データ型の列にのみ使用できます。
デフォルト:値なし(列にデフォルト値なし)
注釈
DEFAULT
とAUTOINCREMENT
は、相互に排他的です。列には1つしか指定できません。MASKING POLICY = policy_name
列に設定する マスキングポリシー を指定します。
COMMENT 'string_literal'
列のコメントを指定します。
(コメントは列レベルまたはテーブルレベルで指定できることに注意してください。それぞれの構文は少し異なります。)
USING ( col_name , cond_col_1 ... )
条件付きマスキングポリシー SQL 式に渡す引数を指定します。
リストの最初の列は、データをマスクまたはトークン化するポリシー条件の列を指定し、マスキングポリシーが設定されている列と一致する 必要 があります。
追加の列は、最初の列でクエリが実行されたときに、クエリ結果の各行のデータをマスクするかトークン化するかを決定するために評価する列を指定します。
USING 句が省略されている場合、Snowflakeは条件付きマスキングポリシーを通常の マスキングポリシー として扱います。
CLUSTER BY ( expr [ , expr , ... ] )
テーブル内の1つ以上の列または列式をクラスタリングキーとして指定します。詳細については、 クラスタリングキーとクラスタ化されたテーブル をご参照ください。
デフォルト:値なし(テーブルにクラスタリングキーが定義されていない)
重要
クラスタリングをサポートしているのは、SnowflakeをIcebergカタログとして使用するテーブルのみです。
クラスタリングキーは、すべてのテーブルに対して意図または推奨されているわけでは ありません。通常、非常に大きな(つまり、マルチテラバイト)テーブルに役立ちます。
テーブルのクラスタリングキーを指定する前に、マイクロパーティションについて理解する必要があります。詳細については、 Snowflakeテーブル構造について をご参照ください。
DATA_RETENTION_TIME_IN_DAYS = integer
テーブルの履歴データに対してTime Travelアクション(SELECT、CLONE、UNDROP)を実行できるように、テーブルの保持期間を指定します。詳細については、 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 をご参照ください。
CHANGE_TRACKING = { TRUE | FALSE }
テーブルで変更追跡を有効にするかどうかを指定します。
TRUE
テーブルの変更追跡を有効にします。この設定により、非表示の列のペアがソーステーブルに追加され、変更追跡メタデータの列への保存が開始されます。これらの列は少量のストレージを消費します。変更追跡メタデータのクエリには、 SELECT ステートメントの CHANGES 句を使用するか、テーブルで1つ以上のストリームを作成し、クエリします。
FALSE
は、テーブルの変更追跡を有効にしません。
デフォルト: FALSE
DEFAULT_DDL_COLLATION = 'collation_specification'
将来テーブルに追加される列を含む、テーブルの列のデフォルトの 照合順序仕様 を指定します。
パラメーターの詳細については、 DEFAULT_DDL_COLLATION をご参照ください。
COPY GRANTS
次の CREATE TABLE バリアントのいずれかを使用して新しいテーブルが作成されるときに、元のテーブルからのアクセス権限を保持することを指定します。
CREATE OR REPLACE TABLE
CREATE TABLE ... LIKE
CREATE TABLE ... CLONE
このパラメーターは、既存のテーブルから新しいテーブルにすべての権限(OWNERSHIP 以外)をコピーします。新しいテーブルは、スキーマ内のオブジェクトタイプに定義された将来の許可を継承 しません 。デフォルトでは、 CREATE TABLE ステートメントを実行するロールが新しいテーブルを所有します。
パラメーターが CREATE ICEBERG TABLE ステートメントに含まれていない場合、新しいテーブルは元のテーブルに付与された明示的なアクセス権限を継承 しません が、スキーマ内のオブジェクトタイプに定義された将来の権限は継承します。
注意:
データ共有 の場合、
既存のテーブルが別のアカウントと共有されていた場合、置換テーブルも共有されます。
既存のテーブルがデータコンシューマとしてアカウントと共有され、アクセスがアカウント内の他のロールにさらに許可された場合(親データベースの
GRANT IMPORTED PRIVILEGES
を使用)、置換テーブルにもアクセスが許可されます。
置換テーブルの SHOW GRANTS 出力には、コピーされた権限の被付与者が、ステートメントが実行されたときの現在のタイムスタンプとともに、 CREATE ICEBERG TABLE ステートメントを実行したロールとしてリストされます。
付与をコピーする操作は、 CREATE ICEBERGTABLE コマンドで(つまり、同じトランザクション内で)アトミックに発生します。
COMMENT = 'string_literal'
テーブルのコメントを指定します。
デフォルト: 値なし
(コメントは列レベルまたはテーブルレベルで指定できることに注意してください。それぞれの構文は少し異なります。)
ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )
テーブルに設定する 行アクセスポリシー を指定します。
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。
Snowflakeカタログパラメーター¶
CATALOG = 'SNOWFLAKE'
SnowflakeをIcebergカタログに指定します。Snowflakeがテーブルのコンパクションなど、ライフサイクルのメンテナンスをすべて行います。
BASE_LOCATION = 'relative_path_from_external_volume'
テーブルの
EXTERNAL_VOLUME
の場所から、Snowflakeがテーブルデータとメタデータを書き込めるディレクトリへの相対パスを指定します。このパラメーターはテーブル作成後に変更することはできません。
外部ステージパラメーター(externalCatalogParams)¶
CATALOG = 'catalog_integration_name'
このテーブルのカタログ統合の識別子(名前)を指定します。
指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントのカタログ統合になります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
AWS Glue
CATALOG_TABLE_NAME = 'catalog_table_name'
AWS Glue Data Catalogで認識されるテーブル名を指定します。Icebergテーブルを作成する際に
CATALOG_TABLE_NAME
を使用する例については、 例 (このトピック内)をご参照ください。このパラメーターはテーブル作成後に変更することはできません。CATALOG_NAMESPACE = 'catalog_namespace'
オプションで AWS Glue Data Catalogソースの名前空間(
my_glue_database
など)を指定し、カタログ統合で指定されたデフォルトのカタログ名前空間を上書きします。テーブルレベルで名前空間を指定することで、 AWS Glueの単一のカタログ統合を使用して、異なるデータベース間でIcebergテーブルを作成できます。指定されない場合、テーブルはカタログ統合に関連付けられたデフォルトのカタログ名前空間を使用します。
オブジェクトストレージのIcebergファイル
METADATA_FILE_PATH = 'metadata_file_path'
列定義に使用するIcebergメタデータファイルの相対パスを指定します。例えば、
s3://mybucket_us_east_1/metadata/v1.metadata.json
がメタデータファイルへのフルパスで、外部ボリュームのストレージの場所がs3://mybucket_us_east_1/
の場合、METADATA_FILE_PATH
の値としてmetadata/v1.metadata.json
を指定します。Snowflakeのバージョン7.34より前では、このパラメーターは
METADATA_FILE_NAME
と呼ばれていました。
注釈
Snowflakeのバージョン7.34以降では、オブジェクトストレージのIcebergファイルからテーブルを作成する際に BASE_LOCATION
を指定 しません。
バージョン7.34より前では、オブジェクトストレージ内のIcebergファイルからテーブルを作成するには BASE_LOCATION
(以前のバージョンでは FILE_PATH
とも呼ばれていました)というパラメーターが必要でした。パラメーターは、 EXTERNAL_VOLUME
の場所からの相対パスを指定しました。
従来の構文を使用するスクリプトやステートメントを引き続き実行できます。その場合、以下の注意事項が適用されます。
テーブルのParquetデータファイルとIcebergメタデータファイルは、
BASE_LOCATION
内にある必要があります。テーブルをリフレッシュするには、
BASE_LOCATION
と 相対的 なパスを指定する必要があります。例えば、メタデータファイルのフルパスがs3://mybucket_us_east_1/my_base_location/metadata/v1.metadata.json
の場合、metadata/v1.metadata.json
をmetadata-file-relative-path
として指定します。詳細については、 ALTER ICEBERG TABLE ... REFRESH をご参照ください。
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE ICEBERG TABLE |
スキーマ |
|
CREATE EXTERNAL VOLUME |
アカウント |
新しい外部ボリュームを作成するために必要です。 |
USAGE |
外部ボリューム |
既存の外部ボリュームを参照するために必要です。 |
CREATE INTEGRATION |
アカウント |
新しいカタログ統合を作成するために必要です。 |
USAGE |
カタログ統合 |
既存のカタログ統合を参照するために必要です。 |
スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
スキーマに同じ名前のテーブルやビューを含めることはできません。テーブルを作成する場合:
同じ名前のビューがスキーマにすでに存在する場合は、エラーが返され、テーブルは作成されません。
同じ名前のテーブルがスキーマに既に存在する場合、オプションの
OR REPLACE
キーワードがコマンドに含まれていない限り、エラーが返され、テーブルは作成されません。
CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
これは、 CREATE OR REPLACE ICEBERG TABLE 操作と同時に実行されるクエリが、古いテーブルバージョンまたは新しいテーブルバージョンのいずれかを使用することを意味します。
予約キーワード と同様に、 ANSI 予約関数名(CURRENT_DATE、 CURRENT_TIMESTAMP など)は列名として使用できません。
テーブルを再作成すると(オプションの
OR REPLACE
キーワードを使用)、その履歴が削除され、テーブル上のストリームが古くなります。古いストリームは読み取れません。SnowflakeをIcebergカタログとして使用する場合、クロスクラウドおよびクロスリージョンのIcebergテーブルは現在サポートされていません。CREATE ICEBERG TABLE が
"External volume <ボリューム名 > must have a STORAGE_LOCATION defined in the local region ..."
などのエラーメッセージを返す場合、外部ボリュームがSnowflakeアカウントと同じリージョンにあるアクティブなストレージの場所を使用していることを確認してください。二重引用符で囲まれた識別子を使用して外部ボリュームまたはカタログ統合を作成した場合は、 CREATE ICEBERG TABLE ステートメントで作成した識別子と(二重引用符を含めて) まったく同じ 識別子を指定する必要があります。引用符を含めないと、
Object does not exist
エラー(または同様のタイプのエラー)が発生する可能性があります。例については、 例 (このトピックの)セクションをご参照ください。
Snowflakeのバージョン7.34以降では、オブジェクトストレージのIcebergファイルからテーブルを作成する際に
BASE_LOCATION
を指定 しません。バージョン7.34より前では、オブジェクトストレージ内のIcebergファイルからテーブルを作成するには
BASE_LOCATION
(以前のバージョンではFILE_PATH
とも呼ばれていました)というパラメーターが必要でした。パラメーターは、EXTERNAL_VOLUME
の場所からの相対パスを指定しました。従来の構文を使用するスクリプトやステートメントを引き続き実行できます。その場合、以下の注意事項が適用されます。
テーブルのParquetデータファイルとIcebergメタデータファイルは、
BASE_LOCATION
内にある必要があります。テーブルをリフレッシュするには、
BASE_LOCATION
と 相対的 なパスを指定する必要があります。例えば、メタデータファイルのフルパスがs3://mybucket_us_east_1/my_base_location/metadata/v1.metadata.json
の場合、metadata/v1.metadata.json
をmetadata-file-relative-path
として指定します。詳細については、 ALTER ICEBERG TABLE ... REFRESH をご参照ください。
CREATE TABLE ... LIKE:
ソーステーブルにクラスタリングキーがある場合は、新しいテーブルにもクラスタリングキーがあります。デフォルトでは、ソーステーブルに対して自動クラスタリングが中断されていても、新しいテーブルに対して自動クラスタリングは中断されません。
CREATE TABLE ... AS SELECT (CTAS):
クラスタリングキーが CTAS ステートメントで指定されている場合、
列定義は必須であり、ステートメントで明示的に指定する必要があります。
デフォルトでは、ソーステーブルに対して自動クラスタリングが中断されていたとしても、新しいテーブルに対して自動クラスタリングは中断されません。
CREATE TABLE ステートメントの ORDER BY サブ句は、そのテーブルの将来の SELECT ステートメントによって返される行の順序には影響しません。将来の SELECT ステートメントで行の順序を指定するには、それらのステートメントで ORDER BY サブ句を使用します。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
SnowflakeをカタログとしてIcebergテーブルを作成する
この例では、SnowflakeをIcebergカタログとしてIcebergテーブルを作成します。出来上がったテーブルはSnowflakeによって管理され、読み取りと書き込みアクセスをサポートします。ステートメントでは、 BASE_LOCATION
パラメーターの値を指定します。これは、外部ボリューム上のテーブルデータとメタデータの書き込み場所をSnowflakeに指示します。
CREATE ICEBERG TABLE my_iceberg_table (amount int)
CATALOG='SNOWFLAKE'
EXTERNAL_VOLUME='my_external_volume'
BASE_LOCATION='my/relative/path/from/extvol';
AWS GlueをカタログとしてIcebergテーブルを作成する
この例では AWS Glue Data Catalogを使用するIcebergテーブルを作成します。デフォルトのカタログ名前空間を上書きし、テーブルにカタログ名前空間を設定するために、ステートメントでオプションの CATALOG_NAMESPACE
パラメーターを使用します。
CREATE ICEBERG TABLE glue_iceberg_table
EXTERNAL_VOLUME='glue_catalog_volume'
CATALOG='glue_catalog_integration'
CATALOG_TABLE_NAME='my_glue_catalog_table'
CATALOG_NAMESPACE='icebergcatalogdb2';
オブジェクトストレージのIcebergメタデータからIcebergテーブルを作成する
この例では、外部クラウドストレージに保存されたIcebergメタデータからIcebergテーブルを作成します。また、外部ボリューム上のテーブルメタデータへの相対パスも指定します。
CREATE ICEBERG TABLE my_iceberg_table
EXTERNAL_VOLUME='my_external_volume'
CATALOG='my_catalog_integration'
METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
二重引用符で囲まれた識別子で外部ボリュームまたはカタログ統合を指定する
この例では、識別子が二重引用符を含む外部ボリュームとカタログ統合でIcebergテーブルを作成します。二重引用符で囲まれた識別子は、大文字と小文字が区別され、多くの場合特殊文字が含まれています。
識別子 "exvol_lower"
と "catint_lower"
は、作成された通りに指定されます(二重引用符も含まれます)。引用符を含めないと、 Object does not exist
エラー(または同様のタイプのエラー)が発生する可能性があります。
詳細については、 二重引用符で囲まれた識別子 をご参照ください。
CREATE OR REPLACE ICEBERG TABLE itable_with_quoted_catalog
EXTERNAL_VOLUME = '"exvol_lower"'
CATALOG = '"catint_lower"'
METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';