在Hive / Spark / SQL中计算每小时的进程计数

时间:2018-08-23 17:55:07

标签: sql apache-spark hive

我正在尝试计算每个小时时段内运行的进程数。我的输入数据集看起来像这样。

process_id      start_time              end_time
PID10001        2018-08-01 00:00:00     2018-08-01 00:10:00
PID10002        2018-08-01 01:00:00     2018-08-01 00:20:00
PID10003        2018-08-01 00:00:00     2018-08-01 02:30:00
PID10004        2018-08-01 02:00:00     2018-08-01 04:00:00

这是我试图从上述输入数据集中获取的输出。根据start_time和end_time值将每个进程标记为适当的小时时隙。

process_id      start_time              end_time                hour_slots
PID10001        2018-08-01 00:00:00     2018-08-01 00:10:00     00-01
PID10002        2018-08-01 01:00:00     2018-08-01 00:20:00     01-02
PID10003        2018-08-01 00:00:00     2018-08-01 02:30:00     00-01
PID10003        2018-08-01 00:00:00     2018-08-01 02:30:00     00-01
PID10003        2018-08-01 00:00:00     2018-08-01 02:30:00     02-03
PID10004        2018-08-01 02:00:00     2018-08-01 04:00:00     02-03
PID10004        2018-08-01 02:00:00     2018-08-01 04:00:00     03-04
NULL            NULL                    NULL                    05-06
NULL            NULL                    NULL                    06-07
NULL            NULL                    NULL                    07-08
NULL            NULL                    NULL                    08-09
NULL            NULL                    NULL                    09-10
NULL            NULL                    NULL                    10-11
NULL            NULL                    NULL                    11-12
NULL            NULL                    NULL                    12-13
NULL            NULL                    NULL                    13-14
NULL            NULL                    NULL                    14-15
NULL            NULL                    NULL                    15-16
NULL            NULL                    NULL                    16-17
NULL            NULL                    NULL                    17-18
NULL            NULL                    NULL                    18-19
NULL            NULL                    NULL                    19-20
NULL            NULL                    NULL                    20-21
NULL            NULL                    NULL                    21-22
NULL            NULL                    NULL                    22-23
NULL            NULL                    NULL                    23-00

我们如何在Hive中获得此结果?我一直坚持根据start_time和end_time为每个process_id复制行。如果结束时间在多个小时窗口中重叠,则应使用相应的hour_slots生成每个新行。任何帮助或建议,表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

我认为您想要的是hour_slots中的开始时间和结束时间。 hour_slots是通过从开始时间和结束时间中提取小时,然后将它们串联在一起来计算的。

hive> select pid,start_time,end_time,concat((split((split(start_time,' ')[1]),':')[0]),'-',(split((split(end_time,' ')[1]),':')[0])) hour_slots from test;
OK
PID10001        2018-08-01 00:00:00     2018-08-01 00:10:00     00-00
PID10002        2018-08-01 01:00:00     2018-08-01 00:20:00     01-00