V3.0 以降、Hologres は REFRESH DYNAMIC TABLE 文を使用して、動的テーブルのデータを手動または自動でリフレッシュすることをサポートしています。
REFRESH DYNAMIC TABLE を使用すると、次回のスケジュールされた自動リフレッシュを待たずに、オンデマンドで動的テーブルを最新のデータに更新できます。これは、1 回限りの更新や、テーブルの更新間隔が長く、すぐにデータが必要な場合に便利です。
Hologres は 2 つのリフレッシュモードをサポートしています:
-
手動リフレッシュ:
REFRESH DYNAMIC TABLEを一度実行します。 -
自動リフレッシュ:
CREATE DYNAMIC TABLE文のリフレッシュポリシーで設定します。スケジュールに従って実行されます。
構文
-- すべてのバージョンでサポート
REFRESH DYNAMIC TABLE [<schema_name>.]<table_name>;
-- V3.1 からサポート
REFRESH [OVERWRITE] DYNAMIC TABLE [<schema_name>.]<table_name>
[PARTITION (<partition_key> = '<partition_value>')]
[WITH (
refresh_mode = '{full|incremental}',
cascading = {true|false}
)];
パラメーター
| パラメーター | 説明 |
|---|---|
schema_name |
テーブルを含むスキーマの名前。 |
table_name |
リフレッシュする非パーティション化テーブルまたはパーティション子テーブルの名前。 |
OVERWRITE |
リフレッシュを実行する前に現在の状態をクリアします。増分更新モードの場合、これにより以前の状態を保持せずに増分更新が最初から再実行されます。V3.1 からサポートされています。 |
PARTITION (<partition_key> = '<partition_value>') |
リフレッシュするパーティションを指定します。partition_key はパーティションキー、partition_value はターゲットのパーティション値です。パーティションテーブルでは必須です。1 つの文でリフレッシュできるパーティションは 1 つだけです。 |
refresh_mode = '{full|incremental}' |
この操作のリフレッシュモードを上書きします。V3.1 からサポートされています。 |
cascading = {true|false} |
この動的テーブルをリフレッシュすると、そのダウンストリームの動的テーブルのリフレッシュもトリガーされるかどうかを指定します。V5.0 からサポートされています。有効な値:
REFRESH DYNAMIC TABLE 文は、このテーブルがリフレッシュされるとすぐに返され、ダウンストリームのリフレッシュを待ちません。このパラメーターは、ダウンストリームの依存関係が freshness = 'upstream' によって確立されている場合にのみ有効です。詳細については、「動的テーブルの作成」をご参照ください。 |
computing_resource = '{serverless|local|<warehouse_name>}' |
リフレッシュ用の計算リソースを指定します。 デフォルト: serverless。 詳細については、「動的テーブルのリフレッシュ用に計算リソースを設定する」をご参照ください。 |
`computing_resource` の値:
| 値 | 説明 |
|---|---|
serverless |
サーバーレスリソースを使用します。デフォルト。 |
local |
インスタンスリソースを使用します。 |
<warehouse_name> |
指定された仮想ウェアハウスを使用します。V4.0.7 からサポートされています。手動リフレッシュの場合、指定しないと現在接続されている仮想ウェアハウスがデフォルトになります。自動リフレッシュの場合、動的テーブルの作成時に接続されていた仮想ウェアハウスが使用されます。 |
文ごとのリフレッシュ動作
動的テーブルにリフレッシュモード (増分または完全) が設定されている場合、各手動リフレッシュ文の効果は、テーブルの現在のモードによって異なります。
増分更新テーブルで完全更新をリクエストしたり、完全更新テーブルで増分更新をリクエストしたりするなど、一致しない組み合わせはエラーを返します。これは、2 つのモードが根本的に互換性のない方法でデータの変更を処理するためです。
| 文 | 増分更新モードのテーブル | 完全更新モードのテーブル |
|---|---|---|
REFRESH |
増分更新を実行します。 | 完全更新を実行します。 |
REFRESH OVERWRITE |
以前の状態を保持せずに増分更新を再実行します。 | 完全更新を実行します。 |
REFRESH WITH (refresh_mode = 'full') |
エラーを返します。 | 完全更新を実行します。 |
REFRESH WITH (refresh_mode = 'incremental') |
増分更新を実行します。 | エラーを返します。 |
REFRESH OVERWRITE WITH (refresh_mode = 'incremental') |
以前の状態を保持せずに増分更新を再実行します。 | エラーを返します。 |
REFRESH OVERWRITE WITH (refresh_mode = 'full') |
完全更新を実行し、増分更新を停止します。 | 完全更新を実行します。 |
制限事項
通常のパーティションテーブル
-
基本的な
REFRESH DYNAMIC TABLE構文のみがサポートされています。 -
親テーブルのリフレッシュはサポートされていません。各子テーブルを個別にリフレッシュしてください。
論理パーティションテーブル
-
手動リフレッシュで
refresh_modeが指定された場合、システムはそのパーティションのリフレッシュモードを指定されたモードに変更します。その後、そのパーティションでは自動リフレッシュは実行されなくなります。 -
OVERWRITEを実行すると、パーティションの状態がクリアされ、指定されたパーティションが完全にリフレッシュされます。
全般
-
パーティションテーブルの場合、パーティションを指定する必要があります。1 つの文でリフレッシュできるパーティションは 1 つだけです。