Hive中的持续时间计算

时间:2014-09-25 10:17:53

标签: hadoop hive hiveql

我有一个问题,如果可能,我会在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在合理的计算时间内是否可以实现?

祝你好运

彼得

1 个答案:

答案 0 :(得分:0)

不确定HDFS的并行处理功能将如何及时排除操作,但可以完成。

听起来你只需要使用case语句来确定何时“启动”操作以确定输出是否需要转到duration_before_started或play_duration_after_started。然后就像使用一些unix_timestamp,from_unixtime和第二个函数一样简单来进行计算。

有关这些日期函数的一些文档位于此处:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF