動的テーブルは、効率的で費用対効果の高い自動データフローとレイヤー化に利用できます。このトピックでは、動的テーブルの範囲と制限事項について説明します。
増分更新
動的テーブルが増分更新モードに設定されている場合、サポートされる機能と制限事項は次のとおりです。
制限事項
リソース使用量
V3.1 以降、新しいテーブルはデフォルトでリフレッシュタスクにサーバーレスリソースを使用します。インスタンスでサーバーレスが有効になっていない場合、システムは自動的にローカルリソースに切り替わります。V3.0 で作成されたテーブルは、テーブル作成時に設定されたリフレッシュリソースを引き続き使用し、自動的にサーバーレスに切り替わりません。
ベーステーブルの制限
Hologres 内部テーブル、Paimon 外部テーブル、およびその他の動的テーブルのみがサポートされています。動的テーブルを作成するには、対応するベーステーブルに対するアクセス権限が必要です。
V3.1:デフォルトでは、ベーステーブルのデータはストリーム方式を使用して増分的に消費されます。バイナリロギング方式と比較して、ストリーム方式はより優れたパフォーマンスを提供し、追加のストレージコストは発生しません。V3.1 より前にベーステーブルでバイナリロギングを使用していた場合は、追加のストレージコストを回避するために、速やかにバイナリロギングを無効にしてください。バイナリロギングを無効にする方法の詳細については、「Hologres バイナリログの購読」をご参照ください。
V3.0:増分動的テーブルを作成する場合、ベーステーブルでバイナリロギングを有効にする必要があります。ディメンションテーブルでは有効にする必要はありません。バイナリロギングを有効にする方法の詳細については、「Hologres バイナリログの購読」をご参照ください。
クエリ制限
サポートされているシナリオ:
任意のスカラー式
WHERE 条件
サブクエリ
共通テーブル式 (CTE)
GROUP BY
CUBE
GROUPING SETS
HAVING ステートメント
Agg Filter
UNION ALL
UNNEST
サポートされていないシナリオ:
ウィンドウ関数
IN サブクエリ
EXISTS または NOT EXISTS
EXCEPT または INTERSECT
ORDER BY
LIMIT または OFFSET
複数テーブル JOIN:
V3.0 はディメンションテーブル等価 JOIN (INNER JOIN または LEFT JOIN) のみをサポートしており、
FOR SYSTEM_TIME AS OF PROCTIME()方式を使用する必要があります。複数テーブルデュアルストリーム JOIN はサポートされていません。詳細については、「ディメンションテーブル JOIN ステートメント」をご参照ください。説明ディメンションテーブル JOIN には次のセマンティクスがあります。各データレコードは、その時点でのディメンションテーブルデータの最新バージョンとのみ結合されます。これは、JOIN 操作が処理時にのみ発生することを意味します。JOIN 操作後にディメンションテーブルのデータが変更 (追加、更新、または削除) された場合、結合されたディメンションテーブルデータは更新されません。
V3.0.26 以降、複数テーブルデュアルストリーム JOIN がサポートされています。これらは、オンライン分析処理 (OLAP) における通常の JOIN、または Flink におけるデュアルストリーム JOIN であり、INNER JOIN、LEFT/RIGHT/FULL OUTER JOIN が含まれます。詳細については、「動的テーブルの作成」をご参照ください。
関数:COUNT、SUM、MIN/MAX、COUNT DISTINCT などの集計関数がサポートされています。並列クエリエンジン (PQE) によって実行される関数はサポートされていません。次の表に、その他のサポートされている関数を示します。
関数名
構文
動的テーブルの例
サポートされているバージョン
RB_BUILD_AGG
RB_BUILD_AGG(<column>)説明カラムパラメーターは int32 および int64 データの型をサポートしています。詳細については、「RoaringBitmap 関数」をご参照ください。
CREATE DYNAMIC TABLE daily_uv PARTITION BY list (day) WITH ( freshness = '5 minutes', refresh_mode = 'incremental') AS SELECT day, game_id, gameversion, RB_BUILD_AGG(user_id) AS user_rb FROM base_table GROUP BY day, game_id, gameversion;V3.1 以降。
STRING_AGG
STRING_AGG([DISTINCT] column_expr, const_expr)説明パラメーターの型:column_expr は TEXT、CHAR、または VARCHAR 型である必要があります。const_expr は TEXT 定数である必要があります。
ORDER BY 句はサポートされていません。
Hologres V3.1.10 以降、
STRING_AGG([DISTINCT]がサポートされています。
CREATE DYNAMIC TABLE string_agg_test_dt WITH ( freshness = '3 minutes', refresh_mode = 'incremental') AS SELECT day, STRING_AGG(gameversion, ',') AS gameversion_list FROM base_table GROUP BY day;V3.1 以降。
V3.1.10 以降、
STRING_AGG([DISTINCT]がサポートされています。
ARRAY_AGG
ARRAY_AGG([DISTINCT] expr)説明expr パラメーターの型:BOOL、すべての数値型、TEXT、および BYTEA がサポートされています。
ORDER BY 句はサポートされていません。
Hologres V3.1.10 以降、
ARRAY_AGG([DISTINCT]がサポートされています。
CREATE DYNAMIC TABLE array_agg_test_dt WITH ( freshness = '3 minutes', refresh_mode = 'incremental') AS SELECT day, ARRAY_AGG(gameversion) AS gameversion_list FROM base_table GROUP BY day;V3.1 以降。
V3.1.10 以降、
ARRAY_AGG([DISTINCT]がサポートされています。
ANY_VALUE
GROUP BYを含む集計クエリでは、この関数は各グループからランダムな値を返します。結果は非決定論的です。ANY_VALUE(expr)ANY_VALUEの入力パラメーターは INT および BINARY 型のみをサポートしています。CREATE DYNAMIC TABLE dt_t0 WITH ( -- Dynamic Table properties freshness = '1 minutes', auto_refresh_mode = 'auto' ) AS SELECT a,any_value(c),SUM(b) FROM t0 GROUP BY a;V3.1.5 以降。
V3.1 以降、動的テーブルを論理パーティションとして設定できます。パーティション関連プロパティとパーティション管理設定がサポートされています。
完全更新
動的テーブルが完全更新モードに設定されている場合、サポートされる機能と制限事項は次のとおりです。
サポートされている機能
ベーステーブルのサポート:これは通常の Hologres テーブルと同じです。Hologres 内部テーブルおよび外部テーブル (MaxCompute、DLF、Paimon など) は、動的テーブルのベーステーブルとしてサポートされています。動的テーブルを作成するには、対応するベーステーブルに対するアクセス権限が必要です。詳細については、「動的テーブル権限」をご参照ください。
クエリサポート:完全更新モードは、Hologres がサポートするすべての関数、SQL 式、およびデータの型をサポートしています。
リフレッシュリソースサポート:デフォルトでは、サーバーレスリソースがリフレッシュタスクの実行に使用されます。現在のインスタンスのリソースに切り替えることもできます。
制限事項
テーブルを完全更新モードから増分更新モードに変換することはできません。
一般的な制限事項
動的テーブルの制限
動的テーブルに対する DDL、DML、およびその他の操作の制限
操作 | サポート済み |
CREATE DYNAMIC TABLE | はい |
RENAME DYNAMIC TABLE | はい |
RENAME DYNAMIC TABLE Column | はい |
SELECT | はい |
リフレッシュ |
|
DROP DYNAMIC TABLE | はい |
DROP DYNAMIC TABLE Column | いいえ |
TRUNCATE DYNAMIC TABLE | いいえ |
DML (INSERT/UPDATE/DELETE) DYNAMIC TABLE | いいえ |
ADD Column | いいえ |
リシャーディング | いいえ 説明 ベーステーブルのリシャーディングはサポートされていません。 |
CREATE TABLE AS/LIKE | いいえ |
動的テーブルを使用するための権限要件
操作 | 権限要件 |
CREATE DYNAMIC TABLE |
|
ALTER DYNAMIC TABLE |
|
DROP DYNAMIC TABLE | 動的テーブルのテーブルオーナー。 |
SELECT DYNAMIC TABLE | 動的テーブルに対する SELECT 権限。 |
REFRESH DYNAMIC TABLE | 動的テーブルに対する DML 権限。 説明 親パーティションをリフレッシュすることはできません。 |
動的テーブルに権限を付与する方法の詳細については、「Hologres 権限モデル」をご参照ください。
ベーステーブルの操作が動的テーブルに与える影響
ベーステーブルの操作 | 動的テーブルの動作 |
RENAME <basetable_name> |
|
RENAME <column_name_not_used_by_dynamic_table> |
|
RENAME <column_name_used_by_dynamic_table> |
|
DROP <basetable_name> |
|
DROP <basetable_name> CASCADE | 動的テーブルも削除され、タスクはキャンセルされます。 |
DROP <column_not_used_by_dynamic_table> |
|
DROP <column_used_by_dynamic_table> | DROP 操作は失敗します。 |
TRUNCATE <basetable_name> |
|
INSERT/DELETE/UPDATE/UPSERT <basetable_name> | 動的テーブルに対して INSERT、DELETE、UPDATE、または UPSERT 操作を実行できます。 |