CREATE ICEBERG TABLE (Iceberg REST カタログ)¶
現行/指定スキーマで、Iceberg REST カタログ用の Apache Iceberg™ テーブル を作成または置換します。
このコマンドは以下のシナリオで使用します。
オープンソースの Apache Iceberg REST OpenAPI 仕様 に準拠したリモートの Iceberg カタログを使用したい場合。
Snowflake Open Catalog のテーブルをクエリしたい場合。詳細については、 Snowflakeを使用して Snowflake Open Catalog 内のテーブルをクエリする をご参照ください。
注釈
テーブルを作成する前に、Icebergメタデータとデータファイルを格納する 外部ボリューム を作成する必要があります。手順については、 外部ボリュームの構成 をご参照ください。
また、テーブルのカタログ統合も必要です。詳細については、 Apache Iceberg™ REST カタログのカタログ統合を構成する または Snowflake Open Catalog のカタログ統合を設定する をご参照ください。
- こちらもご参照ください。
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>' ]
CATALOG_TABLE_NAME = '<rest_catalog_table_name>'
[ CATALOG_NAMESPACE = '<catalog_namespace>' ]
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
必須パラメーター¶
table_name
Snowflakeのテーブルの識別子(名前)を指定します。テーブルが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
注釈
リモート・カタログのテーブルまたは名前空間のリストを取得するには、以下の関数を使用します。
CATALOG_TABLE_NAME = 'rest_catalog_table_name'
外部カタログで認識されるテーブル名を指定します。このパラメーターはテーブル作成後に変更することはできません。
オプションのパラメーター¶
EXTERNAL_VOLUME = 'external_volume_name'
IcebergテーブルがメタデータファイルとデータをParquet形式で保存する外部ボリュームの識別子(名前)を指定します。Icebergのメタデータとマニフェストファイルには、テーブルスキーマ、パーティション、スナップショット、その他のメタデータが格納されています。
このパラメーターを指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントの外部ボリュームになります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
CATALOG = 'catalog_integration_name'
このテーブルのカタログ統合の識別子(名前)を指定します。
このパラメーターを指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントの外部ボリュームになります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
CATALOG_NAMESPACE = 'catalog_namespace'
オプションで REST カタログソースの名前空間(
my_database
など)を指定し、カタログ統合で指定されたデフォルトのカタログ名前空間を上書きします。テーブルレベルで名前空間を指定することで、単一の REST カタログ統合を使用して、異なるデータベース間でIcebergテーブルを作成できます。指定されない場合、テーブルはカタログ統合に関連付けられたデフォルトのカタログ名前空間を使用します。
注釈
リモート・カタログのテーブルまたは名前空間のリストを取得するには、以下の関数を使用します。
REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }
クエリ結果で、無効な UTF -8文字をUnicode置換文字(�)で置き換えるかどうかを指定します。このパラメーターを設定できるのは、外部Icebergカタログを使用するテーブルのみです。
TRUE
の場合は、無効な UTF -8文字がUnicode置換文字に置き換えられます。FALSE
の場合は、無効な UTF -8 文字は変更されません。Parquetデータファイルで無効な UTF -8 文字が検出された場合、Snowflakeはユーザーエラーメッセージを返します。
指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントのパラメーター値になります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
デフォルト:
FALSE
AUTO_REFRESH = { TRUE | FALSE }
自動リフレッシュ を使用する場合に、メタデータの更新のために、Snowflake がテーブルに関連付けられた外部 Iceberg カタログを自動的にポーリングするかどうかを指定します。カタログ統合の
REFRESH_INTERVAL_SECONDS
パラメータに値が指定されていない場合、Snowflake はデフォルトの更新間隔 30 秒を使用します。デフォルト: 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
エラー(または同様のタイプのエラー)が発生する可能性があります。テーブルの作成に関する考慮事項:
スキーマに同じ名前のテーブルやビューを含めることはできません。テーブルを作成する場合:
同じ名前のビューがスキーマにすでに存在する場合は、エラーが返され、テーブルは作成されません。
同じ名前のテーブルがスキーマに既に存在する場合、オプションの
OR REPLACE
キーワードがコマンドに含まれていない限り、エラーが返され、テーブルは作成されません。
CREATE OR REPLACE <オブジェクト> ステートメントはアトミックです。つまり、オブジェクトが置き換えられると、単一のトランザクションで、古いオブジェクトが削除されて新しいオブジェクトが作成されます。
これは、 CREATE OR REPLACE ICEBERG TABLE 操作と同時に実行されるクエリが、古いテーブルバージョンまたは新しいテーブルバージョンのいずれかを使用することを意味します。
予約キーワード と同様に、 ANSI 予約関数名(CURRENT_DATE、 CURRENT_TIMESTAMP など)は列名として使用できません。
テーブルを再作成すると(オプションの
OR REPLACE
キーワードを使用)、その履歴が削除され、テーブル上のストリームが古くなります。古いストリームは読み取れません。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
リモートのIceberg REST カタログを使用するIcebergテーブルを作成する¶
CREATE OR REPLACE ICEBERG TABLE my_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'my_rest_catalog_integration'
CATALOG_TABLE_NAME = 'my_remote_table';
Snowflake Open Catalog のテーブルをクエリするためにIcebergテーブルを作成する¶
この例では、 Snowflakeを使用して Snowflake Open Catalog 内のテーブルをクエリする に使用できるIceberg テーブルを作成します。
CREATE ICEBERG TABLE open_catalog_iceberg_table
EXTERNAL_VOLUME = 'my_external_volume'
CATALOG = 'open_catalog_int'
CATALOG_TABLE_NAME = 'my_open_catalog_table';