2016-04-08 3 views
0

HIVEを使用してデータセットに「使用」がいくつあるかをカウントしようとしています。イベントの集計イベントの時間間隔が小さい場合にイベントが集まる

私は個々のユーザーID、Unixエポック時間のタイムスタンプ、イベント名、およびデータ内のイベントの長さ(秒)の列を持っています。

「使用」は、ユーザーがイベントをトリガーするといつでも考慮されます。問題は、ユーザーがイベントをトリガーして5分以内に別のイベントをトリガーした場合、私は同じ「使用」としてカウントすることです。

5分のウィンドウをどのように説明するのが苦労していますか?カウント。あまりにも多くのサブクエリを避けるためにSQLで厄介なことをやっているように、HIVEでたくさんの 'create tables'を作ることはできないようです。

これは標準的な問題のようですが、このようなアイテムを扱うにはスマートで明白なソリューションがありますか?

はハイブであなたに

+0

サンプルデータと希望の結果を提供すると、この問題が理解できるようになります。 –

+0

データを時間順に並べ、ユーザーが分割すると、タスクが簡単になります。ユーザーごとに、時間順に並べ替えられたイベントをスキャンし、最新のイベントの時刻を覚えておいてください。このイベントの時間が5分のウィンドウ内にある場合は、「最新のイベント」タイムスタンプを更新するだけです。ウィンドウの外にある場合は、イベントとしてカウントします。ユーザー別にストリームを分割することで、異なるユーザーを並行してカウントすることができます。 – 9000

答えて

1

をありがとう、あなたは5分与えられたレコードの前に別のレコードがあるかどうかを確認するためにlag()を使用することができます。存在しない場合は、フラグを1に設定し、それを数えます:

+0

これは私の問題を完全に解決していただきありがとうございます。この「分割」機能を明確に調査する必要があります。 –

関連する問題