コンテンツにスキップ

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を指定します。

完全なデータとソート付きROLLUPの例.

最終更新日