CREATE ICEBERG TABLE (Icebergカタログとしての AWS Glue)¶
AWS Glue Data Catalogに登録されているIcebergテーブルを使用して、現行/指定スキーマの Apache Icebergテーブル を作成または置換します。この型のIcebergテーブルには、Snowflakeを AWS Glueに接続するための カタログ統合 が必要です。
このトピックでは、 Iceberg tables と指定することで混乱を避ける場合を除き、Icebergテーブルを単に「テーブル」と呼びます。
注釈
テーブルを作成する前に、Icebergメタデータとデータファイルを格納する 外部ボリューム を作成する必要があります。手順については、 外部ボリュームの構成 をご参照ください。
また、テーブルのカタログ統合も必要です。詳細については、 AWS Glueのカタログ統合を設定する をご参照ください。
- こちらもご参照ください。
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 = '<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
テーブルの識別子(名前)を指定します。テーブルが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
CATALOG_TABLE_NAME = 'catalog_table_name'
AWS Glue Data Catalogで認識されるテーブル名を指定します。Icebergテーブルを作成する際に
CATALOG_TABLE_NAME
を使用する例については、 例 (このトピック内)をご参照ください。このパラメーターはテーブル作成後に変更することはできません。
オプションのパラメーター¶
EXTERNAL_VOLUME = 'external_volume_name'
IcebergテーブルがメタデータファイルとデータをParquet形式で保存する外部ボリュームの識別子(名前)を指定します。Icebergのメタデータとマニフェストファイルには、テーブルスキーマ、パーティション、スナップショット、その他のメタデータが格納されています。
このパラメーターを指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントの外部ボリュームになります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
CATALOG = 'catalog_integration_name'
このテーブルのカタログ統合の識別子(名前)を指定します。AWS Glue用に構成したカタログ統合を指定する必要があります。詳細については、 AWS Glueのカタログ統合を設定する をご参照ください。
指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントのカタログ統合になります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
CATALOG_NAMESPACE = 'catalog_namespace'
オプションで AWS Glue Data Catalogソースの名前空間(
my_glue_database
など)を指定し、カタログ統合で指定されたデフォルトのカタログ名前空間を上書きします。テーブルレベルで名前空間を指定することで、 AWS Glueの単一のカタログ統合を使用して、異なるデータベース間で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のメタデータフィールド をご参照ください。
例¶
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テーブルを作成します。二重引用符で囲まれた識別子は、大文字と小文字が区別され、多くの場合特殊文字が含まれています。
識別子 "glue_volume_1"
と "glue_catalog_integration_1"
は、作成された通りに指定されます(二重引用符も含まれます)。引用符を含めないと、 Object does not exist
エラー(または同様のタイプのエラー)が発生する可能性があります。
詳細については、 二重引用符で囲まれた識別子 をご参照ください。
CREATE OR REPLACE ICEBERG TABLE itable_with_quoted_catalog
EXTERNAL_VOLUME = '"glue_volume_1"'
CATALOG = '"glue_catalog_integration_1"'
CATALOG_TABLE_NAME='my_glue_catalog_table'
CATALOG_NAMESPACE='icebergcatalogdb2';