ALTER DYNAMIC TABLE¶
動的テーブル のプロパティを変更します。
このトピックの内容:
構文¶
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { SUSPEND | RESUME }
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SWAP WITH <target_dynamic_table_name>
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> REFRESH [ COPY SESSION ]
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { clusteringAction }
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> { tableColumnCommentAction }
ALTER DYNAMIC TABLE <name> { SET | UNSET } COMMENT = '<string_literal>'
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> dataGovnPolicyTagAction
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> searchOptimizationAction
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> SET
[ TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM } ]
[ WAREHOUSE = <warehouse_name> ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ LOG_LEVEL = '<log_level>' ]
[ CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]
ALTER DYNAMIC TABLE [ IF EXISTS ] <name> UNSET
[ DATA_RETENTION_TIME_IN_DAYS ],
[ MAX_DATA_EXTENSION_TIME_IN_DAYS ],
[ DEFAULT_DDL_COLLATION ]
[ LOG_LEVEL ]
[ CONTACT <purpose> ]
条件:
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }詳細については、 クラスタリングキーとクラスタ化されたテーブル をご参照ください。
tableCommentAction ::= { ALTER | MODIFY [ ( ] [ COLUMN ] <col1_name> COMMENT '<string>' , [ COLUMN ] <col1_name> UNSET COMMENT [ , ... ] [ ) ] }dataGovnPolicyTagAction ::= { 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 } | { { 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 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> SET PROJECTION POLICY <policy_name> [ FORCE ] | UNSET PROJECTION POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ] } | { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] }searchOptimizationAction ::= { ADD SEARCH OPTIMIZATION [ ON <search_method_with_target> [ , <search_method_with_target> ... ] [ EQUALITY ] ] | DROP SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ EQUALITY ] [ , ... ] ] | SUSPEND SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] | RESUME SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] }詳細については、 検索最適化アクション(searchOptimizationAction) をご参照ください。
パラメーター¶
name
変更する動的テーブルの識別子。
識別子にスペースまたは特殊文字が含まれる場合は、文字列全体を二重引用符で囲む必要があります。二重引用符で囲まれた識別子も大文字と小文字が区別されます。
詳細については、 識別子の要件 をご参照ください。
SUSPEND | RESUME
動的テーブルで実行するアクションを指定します。
SUSPEND
は、動的テーブルのリフレッシュを中断します。動的テーブルが他の動的テーブルで使用されている場合は、それらも中断されます。RESUME
は、動的テーブルのリフレッシュを再開します。再開操作は、手動で中断されていない、下流にあるすべての動的テーブルにカスケードします。
RENAME TO new_name
指定された動的テーブルの名前を、スキーマ内の他の動的テーブルで現在使用されていない新しい識別子に変更します。
動的テーブルの名前の変更には、その動的テーブルのスキーマに対する CREATE DYNAMIC TABLE 権限が必要です。
また、動的テーブルを別のデータベースやスキーマに移動し、動的テーブルの名前を変更することもできます。これを実行するには、新しいデータベース名やスキーマ名をそれぞれ
db_name.schema_name.new_name
またはschema_name.new_name
の形式で含む、修飾されたnew_name
値を指定します。次の制限が適用されます。
宛先データベースやスキーマはすでに存在している必要があります。また、同じ名前のオブジェクトが宛先データベースにすでに存在することはできません。存在する場合、ステートメントはエラーを返します。
オブジェクトの所有者(つまり、オブジェクトに対して OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き、オブジェクトを管理アクセススキーマに移動することはできません。
オブジェクト(テーブル、列など)の名前が変更されると、それを参照する他のオブジェクトも新しい名前で更新する必要があります。
SWAP WITH target_dynamic_table_name
1つのトランザクションで2つの動的テーブルを入れ替えます。この操作を実行するために使用されるロールには、動的テーブルに対する OWNERSHIP 権限が必要です。
次の制限が適用されます。
動的テーブルを別の動的テーブルと入れ替えることはできます。
REFRESH [ COPY SESSION ]
動的テーブルを手動でリフレッシュすることを指定します。
ユーザーが中断した動的テーブルも自動中断した動的テーブルも手動でリフレッシュできます。手動でリフレッシュされた動的テーブルは、 DYNAMIC_TABLE_REFRESH_HISTORY 関数の
refresh_trigger
の出力として MANUAL を返します。動的テーブルをリフレッシュすると、同じデータ・タイムスタンプの上流の動的テーブルもすべてリフレッシュされることに注意してください。詳細については、 動的テーブルのウェアハウスまたはターゲット・ラグの変更 をご参照ください。
動的テーブルのリフレッシュステータスについては、 DYNAMIC_TABLE_REFRESH_HISTORY をご参照ください。
COPY SESSION
現在のセッションのコピーで、現在のユーザーとウェアハウスを使用してリフレッシュ操作を実行します。
これは1回の手動更新にのみ適用され、動的テーブルの認証情報をに永久に更新しません。 GRANT OWNERSHIP コマンドを使用して、スケジュールの更新の所有権を譲渡します。詳細については、 所有権の譲渡 をご参照ください。
プライマリロールは動的テーブルを所有するロールであり、セカンダリロールはユーザーの DEFAULT_SECONDARY_ROLES プロパティと一致します。
SET ...
テーブルに設定する1つ以上のプロパティ/パラメーターを指定します(空白、コンマ、または改行で区切られます)。
TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }
動的テーブルのターゲットラグを指定します。
'num seconds | minutes | hours | days'
動的テーブルのコンテンツがベーステーブルの更新から遅れる最大時間を指定します。
例:
動的テーブルのデータが5分以上遅れないようにするには、
5 minutes
を指定します。動的テーブルのデータが5時間以上遅れないようにするには、
5 hours
を指定します。
最小値は1分です。動的テーブルAが別の動的テーブルBに依存している場合、Aの最小ラグはBのラグ以上にする必要があります。
DOWNSTREAM
動的テーブルの下流の動的テーブルがリフレッシュされた場合に、その動的テーブルもリフレッシュされるように指定します。
WAREHOUSE = warehouse_name
動的テーブルをリフレッシュするためのコンピューティングリソースを提供するウェアハウスの名前を指定します。
動的テーブルの所有者ロールは、このウェアハウスで USAGE 権限を持っている必要があります。
DATA_RETENTION_TIME_IN_DAYS = integer
Time Travel のテーブルの保持期間を変更するオブジェクトレベルのパラメーター。詳細については、 Time Travelの理解と使用 および 仮テーブルと一時テーブルの使用 をご参照ください。
このパラメーターの詳細な説明、およびオブジェクトパラメーターの詳細については、 パラメーター をご参照ください。
値:
Standard Edition:
0
または1
Enterprise Edition:
永続イベントテーブルの場合は
0
~90
一時データベースの場合は
0
または1
注釈
0
の値は、テーブルの Time Travel を効果的に無効化します。MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
Snowflake が動的テーブルのデータ保持期間を延長して、動的テーブル上のストリームが古くなるのを防ぐことができる最大日数を指定するオブジェクトパラメーター。
このパラメーターの詳細については、 MAX_DATA_EXTENSION_TIME_IN_DAYS をご参照ください。
DEFAULT_DDL_COLLATION = 'collation_specification'
テーブルに追加された新しい列のデフォルトの 照合順序仕様 を指定します。
パラメーターを設定しても、既存の列の照合順序仕様は変更され ません 。
詳細については、 DEFAULT_DDL_COLLATION をご参照ください。
LOG_LEVEL = 'log_level'
アクティブなイベントテーブルでインジェストされ利用可能になる この動的テーブルのイベント の重大度レベルを指定します。指定されたレベルのイベント(およびより厳しいレベルのイベント)がインジェストされます。
レベルの詳細については、 LOG_LEVEL をご参照ください。ログレベルの設定については、 ロギング、メトリクス、トレースのレベル設定 をご参照ください。
CONTACT ( purpose = contact [ , purpose = contact ... ] )
既存のオブジェクトを、1つ以上の 連絡先 に関連付けます。
UNSET ...
動的テーブルの設定を解除する1つ以上のプロパティ/パラメーターを指定し、それらをデフォルトにリセットします。
DATA_RETENTION_TIME_IN_DAYS
MAX_DATA_EXTENSION_TIME_IN_DAYS
DEFAULT_DDL_COLLATION
LOG_LEVEL
CONTACT purposes
クラスタリングアクション(clusteringAction
)¶
CLUSTER BY ( expr [ , expr , ... ] )
1つ以上のテーブル列または列式を動的テーブルのクラスタリングキーとして指定(または変更)します。これらは、自動クラスタリングによってクラスタリングが維持される列/式です。動的テーブルのクラスタリングキーを指定する前に、マイクロパーティションについて理解する必要があります。詳細については、 Snowflakeテーブル構造について をご参照ください。
クラスタリングキーを動的テーブルで使用する場合は、以下の点に注意してください。
列定義は必須であり、ステートメントで明示的に指定する必要があります。
クラスタリングキーは、すべてのテーブルに対して意図または推奨されているわけでは ありません。通常、非常に大きな(例: マルチテラバイト)テーブルに役立ちます。
SUSPEND | RESUME RECLUSTER
動的テーブルの 自動クラスタリング を有効または無効にします。
DROP CLUSTERING KEY
動的テーブルのクラスタリングキーをドロップします。
クラスタリングキーと再クラスタリングの詳細については、 Snowflakeテーブル構造について をご参照ください。
テーブルコメントアクション(tableCommentAction
)¶
ALTER | MODIFY [ ( ]
` .[ COLUMN ] <col1_name> COMMENT '<string>'
., [ COLUMN ] <col1_name> UNSET COMMENT
.[ , ... ]
.[ ) ]
動的テーブルの列のコメントを変更、または既存のコメントを上書きします。
SET | UNSET COMMENT = '<string_literal>'
動的テーブルにコメントを追加するか、既存のコメントを上書きします。
データガバナンス方針とタグアクション(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
動的テーブルから すべて の行アクセスポリシーの関連付けをドロップします。
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
条件付きマスキングポリシーに渡す引数を指定します。
リストの最初の列は、ポリシーの条件に基づいてマスクまたはトークン化されるデータを指定します。それは、マスキング・ポリシーが適用される列と一致 しなければなりません 。
追加の列は、最初の列から選択する際に、クエリ結果の各行でマスキングやトークン化のために評価するデータを指定します。
USING 句が省略されている場合、Snowflakeは条件付きマスキングポリシーを通常の マスキングポリシー として扱います。
SET AGGREGATION POLICY {policy_name}
[ ENTITY KEY ({col_name} [ , ... ]) ] [ FORCE ]
集計ポリシー を動的テーブルに割り当てます。
オプションの ENTITY KEY パラメーターを使用して、動的テーブル内でエンティティを一意に識別する列を定義します。詳細については、 集計ポリシーによるエンティティレベルのプライバシーの実装 をご参照ください。
既存の集計ポリシーを新しい集計ポリシーにアトミックに置き換えるには、オプションの FORCE パラメーターを使用します。
UNSET AGGREGATION POLICY
動的テーブルから集計ポリシーをデタッチします。
FORCE
単一のステートメント内で、列に現在設定されているマスキングまたは投影ポリシーを別のポリシーに置き換えます。
マスキングポリシーで
FORCE
キーワードを使用するには、 ALTER DYNAMICTABLE ステートメント(つまり STRING)内のポリシーの データ型 が、列に現在設定されているマスキングポリシーのデータ型(つまり STRING)と一致している必要があります。現在列にマスキングポリシーが設定されていない場合は、このキーワードを指定しても効果はありません。
詳細については、 列のマスキングポリシーを置き換える または 投影ポリシーの置き換え をご参照ください。
検索最適化アクション(searchOptimizationAction
)¶
ADD SEARCH OPTIMIZATION
テーブル全体の、またはオプションの
ON
句を指定した場合は特定の列の 検索最適化 を追加します。特にテーブル内のデータが頻繁に変更される場合、検索最適化は維持にコストがかかる可能性があります。詳細については、 検索最適化のコスト見積もりおよび管理 をご参照ください。
ON search_method_with_target [, search_method_with_target ... ]
特定の列または VARIANT フィールド(動的テーブル全体ではなく)に対して検索最適化を構成することを指定します。
search_method_with_target
には、次の構文の式を使用します。<search_method>(<target> [, ...])
条件:
search_method
は、特定の型の述語に対するクエリを最適化する次の方法のいずれかを指定します。GEO
: GEOGRAPHY 型を使用する述語。SUBSTRING
: 部分文字列と正規表現に一致する述語(例: [ NOT ] LIKE、 [ NOT ] ILIKE、 [ NOT ] RLIKE、 REGEXP_LIKE など)EQUALITY
: 等価および IN 述語。
target
は、列、 VARIANT フィールド、またはアスタリスク(*)を指定します。search_method
の値に応じて、次に挙げる型の列または VARIANT フィールドを指定できます。GEO
: GEOGRAPHY データ型の列。SUBSTRING
: VARIANTs のフィールドへのパスを含む、文字列または VARIANT データ型の列。EQUALITY
で説明したように、フィールドへのパスを指定します。ネストされたフィールドの検索も同様に改善されます。EQUALITY
: VARIANT 内のフィールドへのパスを含む、数値、文字列、バイナリ、および VARIANT データ型の列。VARIANT フィールドを指定するには、 ドットまたはブラケット表記 を使用します。例:
my_column:my_field_name.my_nested_field_name
my_column['my_field_name']['my_nested_field_name']
フィールドへのコロン区切りのパスを使用することもできます。例:
my_column:my_field_name:my_nested_field_name
VARIANT フィールドを指定すると、そのフィールドの下にネストされたすべてのフィールドに構成が適用されます。
たとえば、
ON EQUALITY(src:a.b)
を指定したとします。この構成により、クエリ
on src:a.b
およびネストされたフィールド(例:src:a.b.c
、src:a.b.c.d
など)を改善できます。この設定は、
src:a.b
接頭辞を使用するクエリ(例えば、src:a
、src:z
など)にのみ影響します。
テーブル内の該当するすべての列をターゲットとして指定するには、アスタリスク(
*
)を使用します。特定の検索方法に対して、アスタリスクと特定の列名の 両方 を指定することはできません。ただし、さまざまな検索方法でアスタリスクを指定できます。
たとえば、次の式を指定できます。
ON SUBSTRING(*) ON EQUALITY(*), SUBSTRING(*), GEO(*)
以下の式は指定できません。
ON EQUALITY(*, c1) ON EQUALITY(c1, *) ON EQUALITY(v1:path, *) ON EQUALITY(c1), EQUALITY(*)
ターゲットに複数の検索方法を指定するには、コンマを使用して後続の各メソッドとターゲットを区切ります。
ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
同じテーブルに対して ALTER DYNAMIC TABLE ... ADD SEARCH OPTIMIZATION ON ... コマンドを複数回実行すると、後続の各コマンドがテーブルの既存の構成に追加されます。例えば、次のコマンドを実行するとします。
ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2); ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
これにより、列
c1
、c2
、c3
、およびc4
の等価述語がテーブルの構成に追加されます。これは、次のコマンドを実行するのと同じです。ALTER DYNAMIC TABLE product ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
例については、 特定の列に対する検索最適化の有効化 をご参照ください。
DROP SEARCH OPTIMIZATION
動的テーブル全体の、またはオプションの
ON
句を指定した場合は特定の列から 検索最適化 を削除します。次の制限が適用されます。
動的テーブルに検索最適化プロパティがある場合、動的テーブルをドロップしてからドロップを解除すると、検索最適化プロパティが保持されます。
動的テーブルから検索最適化プロパティを削除した後に再度追加すると、最初に追加したときと同じコストがかかります。
ON search_method_with_target | column_name | expression_id [, ... ]
特定の列または VARIANT フィールド(テーブル全体の検索最適化をドロップするのではなく)の検索最適化構成をドロップすることを指定します。
ドロップする列構成を識別するには、次のいずれかを指定します。
search_method_with_target
には、1つ以上の特定のターゲット(列または VARIANT フィールド)のクエリを最適化する方法を指定します。 前に説明されている構文 を使用します。column_name
には、検索最適化用に構成された列の名前を指定します。列名を指定すると、その列の VARIANT フィールドを使用する式を含む、その列のすべての式がドロップされます。expression_id
には、 DESCRIBE SEARCH OPTIMIZATION コマンドの出力にリストされた式の ID を指定します。
ターゲット、列名、および式 IDs を使用して、検索方法を自由に組み合わせて指定できます。
例については、 特定の列に対する検索最適化のドロップ をご参照ください。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
注意 |
---|---|---|
OWNERSHIP または OPERATE |
変更したい動的テーブル。 |
いくつかのアクションは OWNERSHIP 権限でのみサポートされます。詳細については、 動的テーブルを変更する権限 をご参照ください。 |
スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
動的テーブルを変更するには、その動的テーブルに対する OPERATE 権限を持つロールを使用する必要があります。一般的な情報については、 動的テーブルのメタデータを表示する権限 をご参照ください。
You cannot make changes to the masking policy after you've created the dynamic table.
既存の動的テーブルを更新し、現在の定義を確認する必要がある場合は、 GET_DDL 関数を呼び出します。
ALTER TABLE コマンドを実行することで、動的テーブルでデータ測定関数を使用することができます。詳細については、 データ測定関数を使用してデータ品質チェックを実行します。 をご参照ください。
IDENTIFIER()、変更する動的テーブルの名前を指定することはできません。例えば、次のステートメントは失敗します。
ALTER DYNAMIC TABLE IDENTIFIER(product) SUSPEND;
再初期化または完全更新の後、動的テーブルに検索インデックスが再構築されます。このプロセスでは、既存のインデックスを削除し、ゼロからインデックスを再構築されるため、コストが高くなる可能性があります。詳細については、 検索最適化のコスト見積もりおよび管理 をご参照ください。
メタデータについて、
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
Change the target lag time of a dynamic table named product
to 1 hour:
ALTER DYNAMIC TABLE product SET
TARGET_LAG = '1 hour';
Specify downstream target lag for a dynamic table for a dynamic table named product
:
ALTER DYNAMIC TABLE product SET TARGET_LAG = DOWNSTREAM;
Suspend the product
dynamic table:
ALTER DYNAMIC TABLE product SUSPEND;
Resume the product
dynamic table:
ALTER DYNAMIC TABLE product RESUME;
Rename the product
dynamic table:
ALTER DYNAMIC TABLE product RENAME TO updated_product;
Swap the product
dynamic table with new-product
:
ALTER DYNAMIC TABLE product SWAP WITH new_product;
Change the clustering key for a table:
ALTER DYNAMIC TABLE product CLUSTER BY (date);
Remove clustering from a table:
ALTER DYNAMIC TABLE product DROP CLUSTERING KEY;
Perform a manual refresh of product
using the user, secondary roles, and warehouse settings
from the current session. This ensures that the refresh operation runs with the exact context
of the user session.
ALTER DYNAMIC TABLE product REFRESH COPY SESSION