はじめに

センサーデータやログデータといったのストリームデータ(時系列データ)を使用してリアルタイムに監視等を行う際、データ1件1件を監視するのではなく、以下のように一定の時間間隔(ウィンドウ)の集計結果を利用したい場合があります。
例)
・センサーログ:2秒間毎のセンサーの値を合計し、20以上の場合は機械に異常が発生していると判断する
・アクセスログ:5秒間毎のにログイン失敗回数を集計し、1000回以上の場合は不正アクセスの疑いがあると判断する

センサーの値を2秒間毎のウィンドウで集計するイメージ図

Windows処理イメージ

このような場合、VerticaではTIME_SLICE関数を利用することで一定時間間隔でデータをスライスできます。

TIME_SLICE

コマンド構文

パラメータ内容
expressionスライス処理をする対象のTIMESTAMP列
slice-length スライスする時間の間隔
time-‑unitslice-lengthの時間の単位
・HOUR
・MINUTE
・SECOND (デフォルト)
・MILLISECOND
・MICROSECOND
'start‑or‑end' slice-lengthの時間の先頭(START)か終端(END)どちらを起点とするか

・START (デフォルト)
・END

利用例

センサーデータがロードされるsensor_logテーブルを例にします。
ts列がログの発生時間、val列がセンサーの値です。

センサーデータの格納テーブル


TIME_SLICE関数とSUM関数を使用して2秒間隔毎のval列の合計値を求めます。


このように、TIME_SLICE関数を使用することで、ストリームデータ(時系列データ)を簡単に一定の時間間隔に区切って処理することができます。

検証バージョンについて

この記事の内容はVertica 9.1で確認しています。