CREATE ICEBERG TABLE (オブジェクトストレージ内のDeltaファイル)¶
オブジェクトストレージ(外部クラウドストレージ)内のIcebergファイルを使用して、現行/指定スキーマの Apache Icebergテーブル を作成または置換します。この型のIcebergテーブルには、 カタログ統合 が必要です。
このトピックでは、 Iceberg tables と指定することで混乱を避ける場合を除き、Icebergテーブルを単に「テーブル」と呼びます。
注釈
テーブルを作成する前に、Icebergメタデータとデータファイルを格納する 外部ボリューム を作成する必要があります。手順については、 外部ボリュームの構成 をご参照ください。
また、テーブルのカタログ統合も必要です。詳細については、 オブジェクトストレージ内のファイルに対してカタログ統合を構成する をご参照ください。
- こちらもご参照ください。
ALTER ICEBERG TABLE、 DROP ICEBERG TABLE、 SHOW ICEBERG TABLES、 DESCRIBE ICEBERG TABLE、 UNDROP ICEBERG TABLE
構文¶
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = '<catalog_integration_name>' ]
BASE_LOCATION = '<relative_path_from_external_volume>'
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
必須パラメーター¶
table_name
テーブルの識別子(名前)を指定します。テーブルが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
BASE_LOCATION = 'relative_path_from_external_volume'
テーブルの
EXTERNAL_VOLUME
の場所から、SnowflakeがDeltaテーブルデータとメタデータにアクセスできるディレクトリへの相対パスを指定します。ベースロケーションはディレクトリを指す必要があり、1つのファイルを指すことはできません。Delta・トランザクション・ログのサブフォルダ(例えば、
my/base/location/_delta_log/
)が含まれている必要があります。
オプションのパラメーター¶
EXTERNAL_VOLUME = 'external_volume_name'
IcebergテーブルがメタデータファイルとデータをParquet形式で保存する外部ボリュームの識別子(名前)を指定します。Icebergのメタデータとマニフェストファイルには、テーブルスキーマ、パーティション、スナップショット、その他のメタデータが格納されています。
このパラメーターを指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントの外部ボリュームになります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
CATALOG = 'catalog_integration_name'
このテーブルのカタログ統合の識別子(名前)を指定します。
指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントのカタログ統合になります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }
クエリ結果で、無効な UTF -8文字をUnicode置換文字(�)で置き換えるかどうかを指定します。このパラメーターを設定できるのは、外部Icebergカタログを使用するテーブルのみです。
TRUE
の場合は、無効な UTF -8文字がUnicode置換文字に置き換えられます。FALSE
の場合は、無効な UTF -8 文字は変更されません。Parquetデータファイルで無効な UTF -8 文字が検出された場合、Snowflakeはユーザーエラーメッセージを返します。
指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントのパラメーター値になります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
デフォルト:
FALSE
COMMENT = 'string_literal'
テーブルのコメントを指定します。
デフォルト: 値なし
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE ICEBERG TABLE |
スキーマ |
|
CREATE EXTERNAL VOLUME |
アカウント |
新しい外部ボリュームを作成するために必要です。 |
USAGE |
外部ボリューム |
既存の外部ボリュームを参照するために必要です。 |
CREATE INTEGRATION |
アカウント |
新しいカタログ統合を作成するために必要です。 |
USAGE |
カタログ統合 |
既存のカタログ統合を参照するために必要です。 |
スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
このコマンドを実行する際の注意事項:
二重引用符で囲まれた識別子を使用して外部ボリュームまたはカタログ統合を作成した場合は、 CREATE ICEBERG TABLE ステートメントで作成した識別子と(二重引用符を含めて) まったく同じ 識別子を指定する必要があります。引用符を含めないと、
Object does not exist
エラー(または同様のタイプのエラー)が発生する可能性があります。
Delta・テーブル・ファイルから作成されたIceberg・テーブルに関する考慮事項:
Time Travel を使用して、Delta テーブルファイルから作成されたIcebergテーブルをクエリできます。テーブルのバージョンは、個々のDelta ログ コミットファイルに対応しています。
Iceberg・テーブルは、Delta Lake・バージョン3.1以前で生成されたデータと互換性があります。
Snowflake ストリームは、パーティション列を持つ Delta テーブル・ファイルから作成された Iceberg テーブルではサポートされません。ただし、パーティション列の ない Delta・ファイルから作成されたテーブルの挿入専用ストリームはサポートされています。
Delta・テーブル・ファイルから作成されたIceberg・テーブルでは、動的テーブルはサポートされていません。
Snowflakeは、 AWS Glue Data CatalogのDeltaテーブル定義からIcebergテーブルを作成することをサポートしていません。
以下の機能やデータタイプを使用したParquetファイル(Delta テーブルのデータファイル)はサポートされていません。
フィールド IDs
INTERVAL データ型。
38以上の精度を持つ DECIMAL データ型。
LIST または MAP で、1レベルまたは2レベルの表現を持つタイプ。
符号なし整数型 (INT(signed = false))。
FLOAT16 データ型。
Deltaデータ型とIcebergテーブルの詳細については、 デルタデータ型 をご参照ください。
CREATE と ALTER ... REFRESH の間のリフレッシュ操作は、1回の操作につき最大1,000個のDelta コミット・ファイルを処理することができます。
注釈
SnowflakeはIcebergテーブルを作成する際にDeltaチェックポイントファイルを使用します。1,000コミットファイルの制限は、最新のチェックポイント以降のコミットにのみ適用されます。
SYSTEM$GET_ICEBERG_TABLE_INFORMATION 関数を使用したIcebergメタデータの生成はサポートされていません。
以下のDalta Lakeフィーチャーは現在サポートされていません。行追跡、削除ベクターファイル、変更データファイル、変更メタデータ、 DataChange 、 CDC 、プロトコル進化。
テーブルの作成に関する考慮事項:
スキーマに同じ名前のテーブルやビューを含めることはできません。テーブルを作成する場合:
同じ名前のビューがスキーマにすでに存在する場合は、エラーが返され、テーブルは作成されません。
同じ名前のテーブルがスキーマに既に存在する場合、オプションの
OR REPLACE
キーワードがコマンドに含まれていない限り、エラーが返され、テーブルは作成されません。
CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
これは、 CREATE OR REPLACE ICEBERG TABLE 操作と同時に実行されるクエリが、古いテーブルバージョンまたは新しいテーブルバージョンのいずれかを使用することを意味します。
予約キーワード と同様に、 ANSI 予約関数名(CURRENT_DATE、 CURRENT_TIMESTAMP など)は列名として使用できません。
テーブルを再作成すると(オプションの
OR REPLACE
キーワードを使用)、その履歴が削除され、テーブル上のストリームが古くなります。古いストリームは読み取れません。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
以下のコマンド例では、オブジェクト・ストレージ内のDelta・テーブル・ファイルからIceberg・テーブルを作成しています。
この例では、Delta・テーブル・ファイルのクラウド・ロケーションに関連する外部ボリューム、 Delta用に構成されたカタログ統合、および必須パラメーター BASE_LOCATION
の値を指定しています。
CREATE ICEBERG TABLE my_delta_iceberg_table
CATALOG = delta_catalog_integration
EXTERNAL_VOLUME = delta_external_volume
BASE_LOCATION = 'relative/path/from/ext/vol/';
Deltaテーブルがパーティショニングスキームを使用している場合、Snowflakeは自動的にDeltaログからスキームを解釈します。