動的テーブルを使用すると、効率的で低コストの自動データフローと階層化を実装できます。このトピックでは、動的テーブルの範囲と制限について説明します。
増分更新
動的テーブルが増分更新モードに設定されている場合、次の機能がサポートされ、次の制限が適用されます。
制限
リソース使用量
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 は、ディメンションテーブルの等結合 (INNER JOIN または LEFT JOIN) のみをサポートし、
FOR SYSTEM_TIME AS OF PROCTIME()メソッドを使用する必要があります。複数テーブルのデュアルストリーム結合はサポートされていません。詳細については、「ディメンションテーブルの JOIN 文」をご参照ください。説明ディメンションテーブル JOIN のセマンティクスは次のとおりです。各データレコードは、処理時間におけるディメンションテーブルデータの最新バージョンとのみ結合されます。JOIN 操作は処理時にのみ発生します。JOIN 操作後にディメンションテーブルのデータが追加、更新、または削除されても、結合されたディメンションテーブルのデータは更新されません。
V3.0.26 以降、複数テーブルのデュアルストリーム結合がサポートされています。これらの結合は、オンライン分析処理 (OLAP) の通常の結合または Flink のデュアルストリーム結合であり、INNER JOIN、LEFT/RIGHT/FULL OUTER JOIN が含まれます。詳細については、「CREATE DYNAMIC TABLE」をご参照ください。
関数: COUNT、SUM、MIN/MAX、COUNT DISTINCT などの集約関数がサポートされています。次の表に、サポートされているその他の関数を示します。
関数名
構文
動的テーブルの例
サポートされているバージョン
RB_BUILD_AGG
RB_BUILD_AGG(<column>)説明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 ( -- Properties of the dynamic table 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 | はい |
Refresh |
|
DROP DYNAMIC TABLE | はい |
DROP DYNAMIC TABLE Column | いいえ |
TRUNCATE DYNAMIC TABLE | いいえ |
DYNAMIC TABLE に対する DML (INSERT/UPDATE/DELETE) | いいえ |
ADD Column | いいえ |
Resharding | いいえ 説明 ベーステーブルのリシャーディングはサポートされていません。 |
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 <動的テーブルで使用されていないベーステーブルの列名> |
|
動的テーブルで使用されているベーステーブルの列の名前を変更する |
|
DROP <basetable_name> |
|
DROP <basetable_name> CASCADE | 動的テーブルも削除され、タスクはキャンセルされます。 |
動的テーブルで使用されていないベーステーブルの列を削除する |
|
動的テーブルで使用されているベーステーブルの列を削除する | DROP 操作は失敗します。 |
TRUNCATE <basetable_name> |
|
INSERT、DELETE、UPDATE、または UPSERT <basetable_name> | データは、それに応じて動的テーブルに挿入、削除、更新、またはアップサートされます。 |