ROLLUP
ROLLUPは時間軸TAGの繰り返し集計を保存・参照する機能です。通常・条件付き・拡張ROLLUPは
公開のrollup()関数で参照し、Customはユーザーの出力先TAGを再集計して参照します。
作成
次は構文の表記です。角括弧や波括弧をそのまま実行しないでください。
CREATE ROLLUP [IF NOT EXISTS] name
ON source_tag [(column_name | json_path_expression)]
INTERVAL n { SEC | MIN | HOUR }
[WAKEUP INTERVAL m { SEC | MIN | HOUR }]
[EXTENSION [ORDER BY basetime_column [ASC | DESC], data_column [ASC | DESC] [, ...]]]
[WHERE predicate];
CREATE ROLLUP [IF NOT EXISTS] name
FROM source_rollup
INTERVAL n { SEC | MIN | HOUR }
[WAKEUP INTERVAL m { SEC | MIN | HOUR }]
[EXTENSION [ORDER BY basetime_column [ASC | DESC], data_column [ASC | DESC] [, ...]]]
[WHERE predicate];
CREATE ROLLUP [IF NOT EXISTS] name
INTO (destination_tag)
AS (SELECT ...)
INTERVAL n { SEC | MIN | HOUR }
[WAKEUP INTERVAL m { SEC | MIN | HOUR }];- EXTENSIONには任意でORDER BYソートキーを指定できます。extension_nameは付けません。
- CREATEの時間単位はSEC/MIN/HOURです。DAYなどのクエリ単位とは区別します。
- 通常の数値列はSUMMARIZEDなしで明示できます。JSONパス集計とドキュメント全体の集計は異なり、ドキュメント全体とWITH ROLLUPによる自動作成にはSUMMARIZED条件があります。
- FROMの間隔はソースより大きな整数倍であり、拡張属性と集計モードが一致する必要があります。
- WAKEUPは正数で、集計間隔以下であり、その間隔を割り切れる必要があります。
- CustomはStandard専用です。ソースTAGが1つと事前作成済みの出力先TAGが必要です。WHEREはSELECT内に記述し、BASETIMEの直接条件・JOIN・FROMサブクエリは許可しません。
- IF NOT EXISTSは既存名の場合に作成を省略する機能であり、定義の変更、比較、一致処理は行いません。構文とソースの検証をすべて省略するオプションでもありません。
削除
DROP ROLLUP rollup_name;参照元となる上位ROLLUPから削除します。Custom出力先TAGは、関連ジョブが残っているとDROPが拒否されます。 元のTAGのCASCADEは関連ROLLUPの削除範囲を確認してから使用し、ユーザーのCustom出力先テーブルは 別のライフサイクルで管理します。
制御
ALTER ROLLUP rollup_name STOP;
ALTER ROLLUP rollup_name START;
ALTER ROLLUP rollup_name WAKEUP;
ALTER ROLLUP rollup_name FORCE;
ALTER ROLLUP rollup_name SET WAKEUP INTERVAL 10 SEC;これらのコマンドは、既存ジョブと有効な間隔条件を前提とします。作成時に自動開始し、すでに開始・停止済みの 状態を繰り返し指定するとエラーになる場合があります。WAKEUPは完了を待たず、FORCEは対象がソースの 処理範囲に追いつくまで待機します。過去のソースの補正では、REBUILD固有のサポート範囲を確認します。
クエリと候補の選択
rollup(time_unit, period, basetime_column [, origin])戻り値の型はDATETIMEです。periodは正の整数リテラルです。通常のDATE_TRUNC + GROUP BYクエリは、
ROLLUPが存在するだけでは自動的に切り替わりません。ROLLUPの参照にはrollup()を明示し、適用可能な
候補がなければ別途ソースデータのクエリを使用します。
自動選択では、列・パス・モードとFIRST/LASTのソートキー・方向に一致する候補のうち、条件なしの候補を先に探します。
両方を使える通常の集約では、同じ条件区分で値カラムがNULLを許容する場合、ソート定義のない候補を
優先し、NOT NULLが確認できれば同等に扱います。COUNT(*)は値カラムのNOT NULLを推定しません。
その後、照会周期を割り切れる最大の有効間隔を選び、同じ間隔では登録順に従います。
特定のデータ集合に固定するにはROLLUP_TABLEヒントを使用します。
詳しい選択規則を確認してください。
SEC/MINの候補間隔はperiod秒/分を基準に確認します。HOUR・DAY・WEEK・MONTH・YEARは候補選択時に period時間を基準に確認します。これは結果バケットの暦計算とは別の規則です。 月・年のoriginでは、月の1日であるという条件を確認してください。
SELECTでnameを返すタグ別集計は、GROUP BYにもnameを含めます。時間範囲・origin・NULL処理・候補条件を そろえてから元データの結果と比較します。通常の数値ROLLUPはMIN/MAX/SUM/COUNT/AVG/SUMSQ、 拡張ROLLUPはFIRST/LASTもサポートします。元データに対するFIRST/LASTの使用と保存ROLLUPの拡張要件は 区別してください。JSONドキュメント全体のCOUNTとパス別の件数は別の規則です。
実行可能な作成・参照・エラーの例は、第6章 ROLLUPの利用と クエリ構文を参照してください。
ソート付きEXTENSIONの定義
複合キーFIRST/LASTとソート付きEXTENSION ROLLUPはMachbase 8.7.3から対応します。エディション別の制約は以下を確認してください。
CREATE ROLLUP [IF NOT EXISTS] name
ON source_tag (numeric_column)
INTERVAL n { SEC | MIN | HOUR }
[WAKEUP INTERVAL m { SEC | MIN | HOUR }]
EXTENSION ORDER BY basetime_column [ASC | DESC],
data_column [ASC | DESC] [, ...]
[WHERE predicate];ON定義のEXTENSIONの後にORDER BYを指定します。ORDER BYのないEXTENSIONも有効です。 FROM階層はORDER BY省略時に下位のキーと方向を継承します。 明示する場合は下位と同じキー・方向でなければなりません。 Custom INTO…ASではこの句を使わず、SELECT内に複合キーFIRST/LASTを指定します。