我有一个问题,如果可能,我会在Hive中解决。 数据如下:
action timestamp
a 2014-01-01 10:00:00
b 2014-01-01 10:05:00
started 2014-01-01 10:06:00
c 2014-01-01 10:06:10
d 2014-01-01 10:56:00
paused 2014-01-01 11:15:00
e 2014-01-01 12:00:00
我们现在可以使用LAG()计算每个时间戳之间的持续时间,但是我们想要添加列来计算"开始"之前的那些操作的持续时间,以及"开始后的操作& #34;,但如果暂停则为0。 决赛桌应如下所示:
action timestamp duration_before_started play_duration_after_started
a 2014-01-01 10:00:00 00:05:00 00:00:00
b 2014-01-01 10:05:00 00:01:00 00:00:00
started 2014-01-01 10:06:00 00:00:00 00:00:10
c 2014-01-01 10:06:10 00:00:00 00:39:50
d 2014-01-01 10:56:00 00:00:00 00:19:00
paused 2014-01-01 11:15:00 00:00:00 00:00:00
e 2014-01-01 12:00:00 00:00:00 00:00:00
Hive在合理的计算时间内是否可以实现?
祝你好运
彼得
答案 0 :(得分:0)
不确定HDFS的并行处理功能将如何及时排除操作,但可以完成。
听起来你只需要使用case语句来确定何时“启动”操作以确定输出是否需要转到duration_before_started或play_duration_after_started。然后就像使用一些unix_timestamp,from_unixtime和第二个函数一样简单来进行计算。
有关这些日期函数的一些文档位于此处:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF