ALTER ICEBERG TABLE¶
既存の Apache Iceberg™テーブル のクラスタリングオプションやタグなどのプロパティを変更します。
また、 ALTER ICEBERG TABLE ステートメントを使用して、テーブルをリフレッシュしたり、テーブルを変換したり、構造化タイプの列を変更したりすることもできます。これらの操作の構文はかなり異なります。Icebergテーブルのリフレッシュまたは変換の構文、パラメーターの説明、使用上の注意、および例を表示するには、以下のページをご参照ください。
このトピックでは、 Iceberg tables と指定することで混乱を避ける場合を除き、Icebergテーブルを単に「テーブル」と呼びます。
構文¶
ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> { clusteringAction | tableColumnAction }
ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> SET
[ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
[ CATALOG_SYNC = '<snowflake_open_catalog_integration_name>']
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> UNSET
[ REPLACE_INVALID_CHARACTERS ]
[ CONTACT <purpose> ]
ALTER ICEBERG TABLE [ IF EXISTS ] dataGovnPolicyTagAction
ALTER ICEBERG TABLE [ IF EXISTS ] <table_name> searchOptimizationAction
条件:
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) /* { SUSPEND | RESUME } RECLUSTER is valid action */ | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }tableColumnAction ::= { ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ inlineConstraint ] [ COLLATE '<collation_specification>' ] | RENAME COLUMN <col_name> TO <new_col_name> | ALTER | MODIFY [ ( ] , [ COLUMN ] <col1_name> { [ SET ] NOT NULL | DROP NOT NULL } , [ COLUMN ] <col1_name> [ [ SET DATA ] TYPE ] <type> , [ COLUMN ] <col1_name> COMMENT '<string>' , [ COLUMN ] <col1_name> UNSET COMMENT [ , [ COLUMN ] <col2_name> ... ] [ , ... ] [ ) ] | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ] } inlineConstraint ::= [ NOT NULL ] [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } } [ <constraint_properties> ]dataGovnPolicyTagAction ::= { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] } | { ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ROW ACCESS POLICY <policy_name> | DROP ROW ACCESS POLICY <policy_name> , ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ALL ROW ACCESS POLICIES } | { SET AGGREGATION POLICY <policy_name> [ ENTITY KEY ( <col_name> [, ... ] ) ] [ FORCE ] | UNSET AGGREGATION POLICY } | { SET JOIN POLICY <policy_name> [ FORCE ] | UNSET JOIN POLICY } | ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] ] [ [ WITH ] PROJECTION POLICY <policy_name> ] [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ] | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ] | UNSET MASKING POLICY } | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET PROJECTION POLICY <policy_name> [ FORCE ] | UNSET PROJECTION POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]searchOptimizationAction ::= { ADD SEARCH OPTIMIZATION [ ON <search_method_with_target> [ , <search_method_with_target> ... ] ] | DROP SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] }詳細については、 検索最適化アクション(searchOptimizationAction) をご参照ください。
パラメーター¶
table_name
変更するテーブルの識別子。
識別子にスペースまたは特殊文字が含まれる場合は、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。
詳細については、 識別子の要件 をご参照ください。
SET ...
外部テーブルのために設定する1つ以上のプロパティ/パラメーターを指定します(空白、コンマ、または改行で区切り)。
REPLACE_INVALID_CHARACTERS = { TRUE | FALSE }
クエリ結果で、無効な UTF -8文字をUnicode置換文字(�)で置き換えるかどうかを指定します。このパラメーターを設定できるのは、外部Icebergカタログを使用するテーブルのみです。
TRUE
の場合は、無効な UTF -8文字がUnicode置換文字に置き換えられます。FALSE
の場合は、無効な UTF -8 文字は変更されません。Parquetデータファイルで無効な UTF -8 文字が検出された場合、Snowflakeはユーザーエラーメッセージを返します。
指定しない場合、Icebergテーブルのデフォルトはスキーマ、データベース、またはアカウントのパラメーター値になります。スキーマはデータベースより優先され、データベースはアカウントより優先されます。
デフォルト:
FALSE
CATALOG_SYNC = 'snowflake_open_catalog_integration_name'
Snowflake Open Catalog 用に構成されたカタログ統合の名前を指定します。Snowflakeは、 Snowflake Open Catalog アカウントの外部カタログとテーブルを同期します。Snowflake管理のIcebergテーブルとOpen Catalogの同期に関する情報については、 Snowflakeで管理されたテーブルを Snowflake Open Catalog と同期する をご参照ください。
このパラメーターの詳細については、 CATALOG_SYNC をご参照ください。
DATA_RETENTION_TIME_IN_DAYS = integer
Snowflake管理テーブルの履歴データに対してTime Travelアクション(SELECT、 CLONE、 UNDROP)を実行できるように、テーブルの保持期間を指定します。詳細については、 Time Travelの理解と使用 をご参照ください。
このオブジェクトレベルパラメーターの詳細な説明、およびオブジェクトパラメーターの詳細については、 パラメーター をご参照ください。
値:
Standard Edition:
0
または1
Enterprise Edition: 永続テーブルの場合は
0
~90
デフォルト:
Standard Edition:
1
Enterprise Edition(またはそれ以上):
1
(スキーマ、データベースまたはアカウントレベルで別のデフォルト値が指定されていない場合)
注釈
0
の値は、テーブルのTime Travelを効果的に無効化します。
AUTO_REFRESH = { TRUE | FALSE }
自動リフレッシュ を使用する場合に、メタデータの更新のために、Snowflake がテーブルに関連付けられた外部 Iceberg カタログを自動的にポーリングするかどうかを指定します。
Deltaベースのテーブルの場合、Snowflakeは外部クラウドストレージをポーリングして更新を確認します。
カタログ統合の
REFRESH_INTERVAL_SECONDS
パラメータに値が指定されていない場合、Snowflake はデフォルトの更新間隔 30 秒を使用します。デフォルト: FALSE
CONTACT ( purpose = contact [ , purpose = contact ... ] )
既存のオブジェクトを、1つ以上の 連絡先 に関連付けます。
UNSET
現在、このコマンドで解除できるのは以下のパラメーターのみです。
REPLACE_INVALID_CHARACTERS
CATALOG_SYNC
CONTACT purpose
クラスタリングアクション(clusteringAction
)¶
注釈
クラスタリングをサポートしているのは、SnowflakeをIcebergカタログとして使用するテーブルのみです。
CLUSTER BY ( expr [ , expr , ... ] )
1つ以上のテーブル列または列式をテーブルのクラスタリングキーとして指定(または変更)します。これらは 自動クラスタリング によってクラスタリングが維持される列/式です。
クラスタリングの詳細については クラスタリングキーとクラスタ化されたテーブル をご参照ください。
SUSPEND | RESUME RECLUSTER
テーブルの 自動クラスタリング を有効または無効にします。
DROP CLUSTERING KEY
テーブルのクラスタリングキーをドロップします。
クラスタリングキーと再クラスタリングの詳細については、 Snowflakeテーブル構造について をご参照ください。
テーブル列アクション(tableColumnAction
)¶
ADD [ COLUMN ] [ IF NOT EXISTS ] col_name col_data_type
.[ inlineConstraint ]
[ COLLATE 'collation_specification' ] [ , ... ]
新しい列を追加します。インライン制約または 照合順序仕様 を指定できます。
テーブル列アクションの詳細については、次をご参照ください。
同じコマンドで複数の列に対して ADD COLUMN 操作を実行できます。
列が既に存在するかどうかわからない場合、列を追加する際に IF NOT EXISTS を指定できます。列が既に存在する場合、 ADD COLUMN は既存の列に影響を与えず、エラーにもなりません。
注釈
新しい列に以下のいずれかを指定している場合は、 IF NOT EXISTS を指定できません。
AUTOINCREMENT、または IDENTITY
UNIQUE、 PRIMARY KEY、または FOREIGN KEY
RENAME COLUMN col_name to new_col_name
指定された列の名前を、テーブル内の他の列で現在使用されていない新しい名前に変更します。
クラスタリングキーの一部である列の名前を変更することはできません。
オブジェクト(テーブル、列など)の名前を変更した場合、そのオブジェクトをリファレンスしている他のオブジェクトを新しい名前で更新する必要があります。
DROP COLUMN [ IF EXISTS ] col_name [ CASCADE | RESTRICT ]
指定した列をテーブルから削除します。
列が既に存在するかどうかわからない場合は、列を削除する際に IF EXISTS を指定できます。列が存在しない場合、 DROP COLUMN は何の効果もなく、エラーにもなりません。
列のドロップは、メタデータのみの操作です。マイクロパーティションを即時に書き換えるわけではないため、列が使っていたスペースが即時に解放されるわけではありません。通常、個々のマイクロパーティション内のスペースは、次にマイクロパーティションが再書き込みされるときに解放されます。これは通常、 DML (INSERT、 UPDATE、 DELETE)または再クラスタリングによって書き込みが完了した時点です。
データガバナンス方針とタグアクション(dataGovnPolicyTagAction
)¶
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントでのタグの指定に関する情報については、 オブジェクトのタグクォータ をご参照ください。
policy_name
ポリシーの識別子。スキーマに対して一意である必要があります。
以下の句は、テーブル、ビュー、イベントテーブルなど、行アクセスポリシーをサポートするすべての種類のテーブルに適用されます。簡略化するために、句は単に「テーブル」を指しています。
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
行アクセスポリシーをテーブルに追加します。
少なくとも1つの列名を指定する必要があります。追加の列は、各列名をコンマで区切って指定できます。この式を使用して、イベントテーブルと外部テーブルの両方に行アクセスポリシーを追加します。
DROP ROW ACCESS POLICY policy_name
テーブルから行アクセスポリシーをドロップします。
テーブルからポリシーをドロップするには、この句を使用します。
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
テーブルに設定されている行アクセスポリシーをドロップし、1つの SQL ステートメントで同じテーブルに行アクセスポリシーを追加します。
DROP ALL ROW ACCESS POLICIES
テーブルから すべて の行アクセスポリシーの関連付けをドロップします。
この式は、イベントテーブルからポリシーをドロップする 前に、スキーマから行アクセスポリシーをドロップするときに役立ちます。この式を使用して、テーブルから行アクセスポリシーの関連付けをドロップします。
SET AGGREGATION POLICY policy_name
[ ENTITY KEY (col_name [ , ... ]) ] [ FORCE ]
テーブルに 集計ポリシー を割り当てます。
オプションの ENTITY KEY パラメーターを使用して、テーブル内でエンティティを一意に識別する列を定義します。詳細については、 集計ポリシーによるエンティティレベルのプライバシーの実装 をご参照ください。
既存の集計ポリシーを新しい集計ポリシーにアトミックに置き換えるには、オプションの FORCE パラメーターを使用します。
UNSET AGGREGATION POLICY
テーブルから集計ポリシーをデタッチします。
SET JOIN POLICY policy_name
[ FORCE ]
結合ポリシー をテーブルに割り当てます。
オプションの FORCE パラメーターを使用して、既存の結合ポリシーを新しい結合ポリシーにアトミックに置き換えます。
UNSET JOIN POLICY
テーブルから結合ポリシーを削除します。
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
条件付きマスキングポリシー SQL 式に渡す引数を指定します。
リストの最初の列は、データをマスクまたはトークン化するポリシー条件の列を指定し、マスキングポリシーが設定されている列と一致する 必要 があります。
追加の列は、最初の列でクエリが実行されたときに、クエリ結果の各行のデータをマスクするかトークン化するかを決定するために評価する列を指定します。
USING 句が省略されている場合、Snowflakeは条件付きマスキングポリシーを通常の マスキングポリシー として扱います。
FORCE
単一のステートメント内で、列に現在設定されているマスキングまたは投影ポリシーを別のポリシーに置き換えます。
マスキングポリシーで
FORCE
キーワードを使用するには、 ALTER TABLE ステートメント(つまり STRING)内のポリシーの データ型 が、列に現在設定されているマスキングポリシーのデータ型(つまり STRING)と一致している必要があります。現在列にマスキングポリシーが設定されていない場合は、このキーワードを指定しても効果はありません。
詳細については、 列のマスキングポリシーを置き換える または 投影ポリシーの置き換え をご参照ください。
検索最適化アクション(searchOptimizationAction
)¶
ADD SEARCH OPTIMIZATION
テーブル全体の、またはオプションの ON 句を指定した場合は特定の列の 検索最適化 を追加します。
注釈
特にテーブル内のデータが頻繁に変更される場合、検索最適化は維持にコストがかかる可能性があります。詳細については、 検索最適化のコスト見積もりおよび管理 をご参照ください。
ON search_method_with_target [, search_method_with_target ... ]
(テーブル全体ではなく)特定の列に対して検索最適化を構成したいことを指定します。
search_method_with_target
には、次の構文の式を使用します。<search_method>( <target> [ , <target> , ... ] [ , ANALYZER => '<analyzer_name>' ] )
条件:
search_method
は、特定の型の述語に対するクエリを最適化する次の方法のいずれかを指定します。検索方法
説明
FULL_TEXT
VARCHAR (テキスト)タイプを使用する述語。
EQUALITY
等価および IN 述語。
SUBSTRING
部分文字列と正規表現に一致する述語(例えば、 [ NOT ] LIKE、 [ NOT ] ILIKE、 [ NOT ] RLIKE、および REGEXP_LIKE)。
target
は列またはアスタリスク(*)を指定します。search_method
の値によっては、以下のタイプのいずれかの列を指定できます。検索方法
サポートされるターゲット
FULL_TEXT
VARCHAR (テキスト)データ型の列。
EQUALITY
数値、文字列、バイナリデータ型の列。
SUBSTRING
VARCHAR (テキスト)データ型の列。
テーブル内の該当するすべての列をターゲットとして指定するには、アスタリスク(
*
)を使用します。特定の検索方法に対して、アスタリスクと特定の列名の 両方 を指定することはできません。ただし、さまざまな検索方法でアスタリスクを指定できます。
たとえば、次の式を指定できます。
-- Allowed ON SUBSTRING(*) ON EQUALITY(*), SUBSTRING(*)
以下の式は指定できません。
-- Not allowed ON EQUALITY(*, c1) ON EQUALITY(c1, *) ON EQUALITY(v1:path, *) ON EQUALITY(c1), EQUALITY(*)
search_method
がFULL_TEXT
の場合、ANALYZER => 'analyzer_name'
がテキスト解析器の名前を指定します。検索最適化アナライザーの詳細情報については、 ALTER TABLE をご参照ください。
ターゲットに複数の検索方法を指定するには、コンマを使用して後続の各メソッドとターゲットを区切ります。
ALTER ICEBERG TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
同じテーブルに対して ALTER ICEBERG TABLE ... ADD SEARCH OPTIMIZATION ON ... コマンドを複数回実行すると、後続の各コマンドがテーブルの既存の構成に追加されます。たとえば、次のコマンドを実行するとします。
ALTER ICEBERG TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2); ALTER ICEBERG TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
これにより、列c1、c2、c3、およびc4の等価述語がテーブルの構成に追加されます。これは、次のコマンドを実行するのと同じです。
ALTER ICEBERG TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
例については、 特定の列に対する検索最適化の有効化 をご参照ください。
DROP SEARCH OPTIMIZATION
テーブル全体の、またはオプションの ON 句を指定した場合は特定の列から 検索最適化 を削除します。
注釈
テーブルに検索最適化プロパティがある場合、テーブルをドロップしてからドロップを解除すると、検索最適化プロパティが保持されます。
テーブルから検索最適化プロパティを削除した後に再度追加すると、最初に追加したときと同じコストがかかります。
ON search_method_with_target | column_name | expression_id [ , ... ]
(テーブル全体の検索最適化を削除するのではなく)特定の列の検索最適化構成を削除することを指定します。
ドロップする列構成を識別するには、次のいずれかを指定します。
search_method_with_target
では、1つ以上の特定の列に対するクエリを最適化する方法を指定します。 前に説明されている構文 を使用します。column_name
には、検索最適化用に構成された列の名前を指定します。列名を指定すると、その列の式はすべて削除されます。expression_id
には、 DESCRIBE SEARCH OPTIMIZATION コマンドの出力にリストされた式の ID を指定します。
これらを複数指定するには、項目間にコンマを使用します。
ターゲット、列名、および式 IDs を使用して、検索方法を自由に組み合わせて指定できます。
例については、 特定の列に対する検索最適化のドロップ をご参照ください。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
注意 |
---|---|---|
OWNERSHIP |
Icebergテーブル |
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). |
USAGE |
外部ボリューム |
|
USAGE |
カタログ統合 |
テーブルがカタログ統合を使用する場合は必要です。 |
スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
このコマンドを実行できるのは、テーブルの所有者(つまり、テーブルに対する OWNERSHIP 権限を持つロール)以上のみです。
クラスタリングをサポートしているのは、SnowflakeをIcebergカタログとして使用するテーブルのみです。Icebergテーブルにクラスタリングを追加するには、テーブルを含むスキーマとデータベースに対する USAGE または OWNERSHIP 権限も必要です。
ALTER TABLE コマンドを実行すると、Iceberg テーブルでデータ メトリック関数を使用できます。詳細については、 データ測定関数を使用してデータ品質チェックを実行します。 をご参照ください。
制限など、Icebergテーブルでの検索最適化の使用については、検索最適化ドキュメントの Apache Iceberg™ テーブルのサポート をご参照ください。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
CATALOG_SYNC パラメーターの変更に関するトラブルシューティングについては、 CATALOG_SYNC パラメーターを指定した際、Icebergテーブルを変更することができない をご参照ください。
例¶
次の例では、Icebergテーブルに値 customer
のタグ(my_tag
)を設定します。
ALTER ICEBERG TABLE my_iceberg_table SET TAG my_tag = 'customer';
以下の例では、既存の外部管理テーブルに対して 自動リフレッシュ を有効にしています。
ALTER ICEBERG TABLE my_iceberg_table SET AUTO_REFRESH = TRUE;
次の例は、Icebergテーブルの検索最適化を追加および削除します。
ALTER ICEBERG TABLE my_iceberg_table ADD SEARCH OPTIMIZATION ON SUBSTRING(C6);
ALTER ICEBERG TABLE my_iceberg_table DROP SEARCH OPTIMIZATION ON EQUALITY(C7, C8);