0

Hadoopで実装する方法は?

ハイブには、多くの列を持つテーブルがあり、そのうちの 2 つは begin_time、end_time です。

毎回数を数える必要があります

テーブルの一部はこれです:

begin_time                  end_time
2011.04.26 10:19:06^A2011.04.26 10:20:22
2011.04.26 10:19:08^A2011.04.26 10:21:49
2011.04.26 10:19:08^A2011.04.26 11:18:46
2011.04.26 10:19:09^A2011.04.26 12:08:36
2011.04.26 10:19:09^A2011.04.26 11:00:16
2011.04.26 10:19:11^A2011.04.26 10:19:17
2011.04.26 10:19:12^A2011.04.26 10:46:21
2011.04.26 10:19:13^A2011.04.26 10:55:43
2011.04.26 10:19:17^A2011.04.26 10:19:41
2011.04.26 10:19:18^A2011.04.26 10:34:41

私が望む結果は、特定の時間に何人の人がいるかです。

たとえば、2011.04.26 10:19:08 の場合、19:06 に 1 人、19:08 に 2 人のコースに 3 人のビジターがいます。

そして 2011.04.26 10:19:18 は 9、コースは 10 ですが、2011.04.26 10:19:17 に 1 つの出発があります

piece の望ましい結果は

2011.04.26 10:19:06 1
2011.04.26 10:19:08 3
2011.04.26 10:19:09 5
2011.04.26 10:19:11 6
2011.04.26 10:19:12 7
2011.04.26 10:19:13 8
2011.04.26 10:19:17 9
2011.04.26 10:19:18 9

どんな助けでも大歓迎です。

4

1 に答える 1

0

ハイブでこれを試すことができます (テーブル名が test_log であると仮定します):

select /*+ MAPJOIN(driven) */ driven.time, count(*)    
from         
    (select time 
     from 
     (select begin_time time from test_log union all 
      select end_time time from test_log) u  
     group by time) driven
join test_log l on true
where
    driven.time between l.begin_time and l.end_time
group by driven.time

おそらく最善の解決策ではありませんが、少なくとも機能します。駆動サブクエリにフィルタを追加して、データ セットを減らすことができます。

于 2013-05-22T07:47:27.287 に答える