トランスフォーメーション > 式トランスフォーメーション > 例: ウィンドウを使用したGPS pingのフラグ付け
  

例: ウィンドウを使用したGPS pingのフラグ付け

あなたの組織はトリップID、イベントID、およびタイムスタンプを含む車両からのGPS pingを受信します。各ping間の時間差を計算し、前の行との時間差が60秒未満である場合、行にスキップとのフラグを付けようとしています。
イベントを時系列で順序付け、イベントをトリップ別にパーティション化します。前の行のイベント時刻にアクセスするウィンドウ関数を定義し、ADD_TO_DATE関数を使用して、2つのイベント間の時間差を計算します。

ウィンドウプロパティ

プロパティ
説明
フレーム
指定されていません
ウィンドウ関数は、オフセット引数に基づいて行にアクセスし、フレームを無視します。
パーティションキー
trip_id
行をトリップID別にグループ化し、計算が同じトリップからのイベントに基づくようにします。
オーダーキー
_event_id昇順
イベントIDの昇順で、データを時系列に配置します。

ウィンドウ関数

前の行からイベント時刻を取得する次のLAG関数を定義します。
LAG ( _event_time, 1, NULL )
LAG関数の詳細については、『関数リファレンス』を参照してください。
2つの日付間の時間を計算する次のDATE_DIFF関数を定義します。
DATE_DIFF ( _event_time, LAG ( _event_time, 1, NULL ), 'ss' )
DATE_DIFFが60秒未満の場合、または_event_timeがNULLの場合、行にスキップとのフラグを付けます。
IIF ( DATE_DIFF < 60 or ISNULL ( _event_time ), 'Skip', 'Valid' )

出力

トランスフォーメーションは、次の出力を生成します。
Trip ID
Event ID
Event Time
Time Difference
Flag
101
1
2017-05-03 12:00:00
NULL*
Skip
101
2
2017-05-03 12:00:34
34
Skip
101
3
2017-05-03 12:02:00
86
Valid
101
4
2017-05-03 12:02:23
23
Skip
102
1
2017-05-03 12:00:00
NULL*
Skip
102
2
2017-05-03 12:01:56
116
Valid
102
3
2017-05-03 12:02:00
4
Skip
102
4
2017-05-03 13:00:00
3480
Valid
103
1
2017-05-03 12:00:00
NULL*
Skip
103
2
2017-05-03 12:00:12
12
Skip
103
3
2017-05-03 12:01:12
60
Valid
*これらの行の前の行は、パーティションの境界外であるため、LAG関数はNULL値を生成します。