配置单元中的持续时间计算



如果可能的话,我会在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()计算每个时间戳之间的持续时间,但我们希望添加列,用于计算"开始"之前的操作和"开始"之后的操作的持续时间。但如果暂停,则为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中可能吗?

向致以最良好的问候

Peter

不确定它的及时性,因为HDFS的许多并行处理功能将被行操作否定,但它是可以做到的。

听起来您只需要使用case语句来确定何时"启动"操作,以确定输出是否需要转到duration_before_started或play_duration_after_started。然后,只需使用一些unix_timestamp、from_unixtime和second函数进行计算即可。

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

最新更新