このトピックでは、Realtime Compute のタンブリングウィンドウ関数の使用方法について説明します。

タンブリングウィンドウとは

タンブリングウィンドウを使用して、指定したサイズのウィンドウに各要素を割り当てます。 一般に、タンブリングウィンドウはサイズが固定されており、互いに重複しません。 たとえば、5 分間のタンブリングウィンドウが定義されている場合、無限のデータストリームは、期間ごとに [0:00, 0:05)[0:05, 0:10)[0:10, 0:15) のようなウィンドウに分割されます。 次の図は、30 秒のタンブリングウィンドウを示しています。

構文

TUMBLE 関数は、GROUP BY 句でタンブリングウィンドウを定義するために使用されます。

TUMBLE(<time-attr>, <size-interval>)
<size-interval>: INTERVAL 'string' timeUnit
			

<time-attr data-spm-anchor-id = "a2762.11472859.0.i151.7ca4203bEk6mXa"><time-attr> パラメーターは、時間が処理時間であるかイベント時間であるかを指定するために、ストリーム内の有効な時間属性である必要があります。 </time-attr> 時間属性透かしを定義する方法の詳細については、「ウィンドウ関数の概要」をご参照ください。

ウィンドウ識別子関数

ウィンドウ識別子関数は、ウィンドウの開始時刻または終了時刻、または下位レベルのウィンドウを集計するためのウィンドウ時刻属性を指定します。

ウィンドウ識別子関数 戻り値の型 説明
TUMBLE_START(time-attr, size-interval) TIMESTAMP ウィンドウの開始時刻 (境界値) を返します。 たとえば、ウィンドウが [00:10, 00:15) の場合、00:10 が返されます。
TUMBLE_END(time-attr, size-interval) TIMESTAMP ウィンドウの終了時刻 (境界値) を返します。 たとえば、ウィンドウが [00:00, 00:15] の場合、00:15 が返されます。
TUMBLE_ROWTIME(time-attr, size-interval) TIMESTAMP (rowtime-attr) ウィンドウの (境界値ではなく) 終了時刻を返します。 たとえば、ウィンドウが [00:00, 00:15] の場合、00:14:59.999 が返されます。 戻り値は rowtime 属性であり、ウィンドウカスケードなどの時間タイプの操作を実行することができます。

以下は、指定された Web サイトでのユーザーごとの 1 分あたりのクリック数を計算する方法を示しています。

  • テストデータ
    username (VARCHAR) click_url (VARCHAR) ts (TIMESTAMP)
    Jark http://taobao.com/xxx 2017-10-10 10:00:00.0
    Jark http://taobao.com/xxx 2017-10-10 10:00:10.0
    Jark http://taobao.com/xxx 2017-10-10 10:00:49.0
    Jark http://taobao.com/xxx 2017-10-10 10:01:05.0
    Jark http://taobao.com/xxx 2017-10-10 10:01:58.0
    Timo http://taobao.com/xxx 2017-10-10 10:02:10.0
  • テスト文
    CREATE TABLE user_clicks(
    username varchar,
    click_url varchar,
    ts timeStamp,
    WATERMARK wk FOR ts as withOffset(ts, 2000) -- Define a watermark for rowtime.
    ) with (
    type='datahub',
    ...
    );
    
    CREATE TABLE tumble_output(
    window_start TIMESTAMP,
    window_end TIMESTAMP,
    username VARCHAR,
    clicks BIGINT
    ) with (
    type='RDS'
    );
    
    INSERT INTO tumble_output
    SELECT
    TUMBLE_START(ts, INTERVAL '1' MINUTE),
    TUMBLE_END(ts, INTERVAL '1' MINUTE),
    username,
    COUNT(click_url)
    FROM user_clicks
    GROUP BY TUMBLE(ts, INTERVAL '1' MINUTE), username
    					
  • テスト結果
    window_start (TIMESTAMP) window_end (TIMESTAMP) username (VARCHAR) clicks (BIGINT)
    2017-10-10 10:00:00.0 2017-10-10 10:01:00.0 Jark 3
    2017-10-10 10:01:00.0 2017-10-10 10:02:00.0 Jark 2
    2017-10-10 10:02:00.0 2017-10-10 10:03:00.0 Timo 1