ダイナミックテーブルを使用して、効率的でコスト効率の高い、自動化されたデータパイプラインと階層を構築できます。このトピックでは、ダイナミックテーブルのサポートと制限について説明します。
増分リフレッシュ
増分リフレッシュモードのダイナミックテーブルには、以下の機能と制限があります。
制限事項
-
リソース使用量
Hologres V3.1 以降、新しいテーブルはデフォルトでサーバーレスリソースを使用してリフレッシュタスクを実行します。インスタンスでサーバーレスリソースが有効になっていない場合、自動的にローカルリソースに切り替わります。Hologres V3.0 で作成されたテーブルは、元々指定されていたリソースを引き続き使用し、自動的にサーバーレスリソースに切り替わることはありません。
-
ベーステーブルの制限
-
ベーステーブルとしてサポートされているのは、Hologres 内部テーブル、Paimon 外部テーブル、および他のダイナミックテーブルのみです。ダイナミックテーブルを作成するには、ベーステーブルに対する SELECT 権限が必要です。
-
デフォルトでは、Hologres V3.1 はストリームメソッドを使用してベーステーブルのデータを増分的に消費します。Binlog メソッドと比較して、ストリームメソッドはパフォーマンスが向上し、追加のストレージコストは発生しません。V3.1 より前にベーステーブルで Binlog メソッドを使用していた場合は、追加のストレージ消費を防ぐために、速やかに Binlog を無効にすることを推奨します。Binlog を無効にする方法については、「Hologres Binlogのサブスクライブ」をご参照ください。
-
Hologres V3.0 では、増分リフレッシュモードでダイナミックテーブルを作成する場合、ベーステーブルで Binlog を有効にする必要があります。ただし、ディメンションテーブルには必要ありません。Binlog の有効化に関する詳細については、「Hologres Binlogのサブスクライブ」をご参照ください。
-
-
クエリの制限
-
サポートされているシナリオ
-
任意のスカラー式
-
WHERE 条件
-
サブクエリ
-
共通テーブル式 (CTE)
-
GROUP BY
-
CUBE
-
GROUPING SETS
-
HAVING 句
-
集計フィルター
-
UNION ALL
-
UNNEST
-
-
ウィンドウ関数:以下の関数のみがサポートされています。dense_rank、first_value、last_value、および SUM や COUNT などの集計ウィンドウ関数など、他のすべてのウィンドウ関数はサポートされていません。
-
row_number と rank:Hologres V4.2 以降でサポートされています。クエリでは、外部クエリに TopN フィルター (
WHERE rownum <= N) を含め、PARTITION BY と ORDER BY の両方を指定する必要があります。 -
lead と lag:Hologres V5.0 以降でサポートされています。PARTITION BY と ORDER BY の両方を指定する必要があり、単一引数形式の
lead(expr)とlag(expr)のみがサポートされています。 -
通常、1 つのウィンドウ定義では 1 つのウィンドウ関数しかサポートされません。lead と lag は例外で、両方を同じウィンドウ定義内で使用できます。
-
詳細な構文と制限については、「増分リフレッシュでサポートされる関数」をご参照ください。
-
-
サポートされていないシナリオ
-
IN サブクエリ
-
EXISTS または NOT EXISTS
-
EXCEPT または INTERSECT
-
ORDER BY
-
LIMIT または OFFSET
-
-
複数テーブル結合:
-
Hologres V3.0 は、ディメンションテーブルでの等価結合 (INNER JOIN または LEFT JOIN) のみをサポートしており、これらの結合では
FOR SYSTEM_TIME AS OF PROCTIME()構文を使用する必要があります。複数テーブルのダブルストリーム結合はサポートされていません。詳細については、「ルックアップ結合ステートメント」をご参照ください。説明ルックアップ結合は、各レコードを処理時間時点のディメンションテーブルデータの最新バージョンに関連付けます。結合後にディメンションテーブルのデータが変更されても、以前に結合されたデータは更新されません。
-
Hologres V3.0.26 以降、複数テーブルのダブルストリーム結合がサポートされています。これらは、標準の OLAP 結合や Flink のダブルストリーム結合に相当し、INNER JOIN および LEFT/RIGHT/FULL OUTER JOIN が含まれます。詳細については、「CREATE DYNAMIC TABLE」をご参照ください。
-
-
関数:COUNT、SUM、MIN/MAX、COUNT DISTINCT などの集計関数はサポートされています。パラレルクエリエンジン (PQE) で実行される関数はサポートされていません。以下の表に、サポートされているその他の関数を示します。
関数
構文
例
サポートバージョン
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 ( -- ダイナミックテーブルのプロパティ freshness = '1 minutes', auto_refresh_mode = 'auto' ) AS SELECT a, any_value(c), SUM(b) FROM t0 GROUP BY a;V3.1.5 以降
-
-
Hologres V3.1 以降、ダイナミックテーブルを論理パーティションとして設定できます。関連するパーティションのプロパティと管理設定もサポートされています。
-
フルリフレッシュ
フルリフレッシュモードのダイナミックテーブルには、以下の機能と制限があります。
サポートされている機能
-
ベーステーブル:機能は標準の Hologres テーブルと同じです。MaxCompute、Data Lake Formation (DLF)、Paimon などの Hologres 内部テーブルや外部テーブルをベーステーブルとして使用できます。ダイナミックテーブルを作成するには、ベーステーブルに対する必要な権限が必要です。詳細については、「ダイナミックテーブルの権限」をご参照ください。
-
クエリ:Hologres で現在サポートされているすべての関数、SQL 式、データ型は、フルリフレッシュモードでもサポートされています。
-
リフレッシュリソース:デフォルトでは、リフレッシュタスクはサーバーレスリソースを使用します。現在のインスタンスのリソースを使用するようにタスクを設定することもできます。
制限事項
-
リフレッシュモードをフルリフレッシュから増分リフレッシュに変更することはできません。
-
Hologres V3.0 では、フルリフレッシュモードのダイナミックテーブル上にビューを作成すると、ダイナミックテーブルのリフレッシュプロセスが失敗します。この問題は V3.1 以降のバージョンで解決されています。インスタンスをアップグレードすることを推奨します。
一般的な制限
ダイナミックテーブルの制限
-
Hologres インスタンスは V3.0 以降である必要があります。
-
テーブルプロパティの制限:プライマリキーやデフォルトのフィールド値を設定することはできません。エンジンはテーブルのインデックスを自動的に推測しますが、ビジネス要件に基づいて手動で設定することもできます。
-
フルリフレッシュモードと増分リフレッシュモードのみがサポートされています。サポートされている機能と制限はモードによって異なります。詳細については、「フルリフレッシュ」と「増分リフレッシュ」をご参照ください。
-
カスケードリフレッシュ (
freshness = 'upstream') には以下の制限があり、これはフルリフレッシュと増分リフレッシュの両方に適用されます:-
Hologres V5.0 以降でのみサポートされています。
-
freshness = 'upstream'を設定する場合、ベーステーブルの少なくとも 1 つはダイナミックテーブルである必要があります。 -
カスケード依存関係はサイクルを構成できません。
-
アップストリームのリフレッシュが失敗した場合、ダウンストリームのリフレッシュはトリガーされません。失敗はダウンストリームに伝播せず、ダウンストリームテーブルは最後に成功したリフレッシュのデータを保持します。
-
ダイナミックテーブルにダウンストリームの依存関係がある場合、そのテーブルに対する DROP は拒否されます。まずダウンストリームテーブルをドロップするか、依存関係を削除する必要があります。
-
特定のダウンストリームテーブルに対して、一度に実行されるカスケードリフレッシュは 1 つだけです。アップストリームのトリガーが頻繁すぎる場合、中間のラウンドはスキップされ、ダウンストリームテーブルの実質的な更新間隔は、自身の 1 回のリフレッシュ期間とアップストリームのトリガー間隔のいずれか大きい方の値と等しくなります。
-
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 |
ダイナミックテーブルに対する |
|
REFRESH DYNAMIC TABLE |
ダイナミックテーブルに対する 説明
親パーティションテーブルのリフレッシュはサポートされていません。 |
ダイナミックテーブルに対する権限付与に関する詳細については、「Hologres権限モデル」をご参照ください。
ベーステーブル操作の影響
|
ベーステーブル操作 |
影響 |
|
RENAME <basetable_name> |
|
|
RENAME <column not used by the Dynamic Table> |
|
|
RENAME <column used by the Dynamic Table> |
|
|
DROP <basetable_name> |
|
|
DROP <basetable_name> CASCADE |
ダイナミックテーブルもドロップされ、そのリフレッシュタスクはキャンセルされます。 |
|
DROP <column not used by the Dynamic Table> |
|
|
DROP <column used by the Dynamic Table> |
|
|
TRUNCATE <basetable_name> |
|
|
INSERT/DELETE/UPDATE/UPSERT <basetable_name> |
変更は、次のリフレッシュ後にダイナミックテーブルに反映されます。 |