【问题标题】:Hive: How to calculate difference indat time?Hive:如何计算时间差?
【发布时间】:2014-10-14 15:56:07
【问题描述】:

我正在使用 Hive 0.12,

数据: customer_name 验证时间 cust1 1 2014-05-19 05:12:43 cust1 2 2014-05-19 05:12:50 cust1 3 2014-05-19 05:13:27 cust1 4 2014-05-19 05:14:14 cust2 1 2014-05-19 05:16:27 cust2 2 2014-05-19 05:17:01 cust2 3 2014-05-19 05:17:05

我想要每个客户从 val =1 到 val=n 的时间差。 预期输出:

cust1 00:01:31 cust2 00:00:39

对于客户,日期也可能更改为第二天。例如 cust3 1 2014-05-19 23:59:00 cust3 1 2014-05-20 00:02:25

预期输出: cust3 00:02:26

第一个问题。可以不用UDF吗? 第二个问题。如果不?使用UDF怎么做??

【问题讨论】:

  • 能否请您正确格式化输入和输出,这个问题很难理解

标签: mapreduce hive hiveql


【解决方案1】:

在我回答这个问题之前,我做了两个假设(根据您的需要纠正我,如果这些是错误的),首先是时间戳是按值排序的,即对于 cust1,值 1 的时间戳小于时间戳值为 2 等等。

其次,输出以秒为单位。请在此基础上使用任何功能转换为您想要的格式。

以下是正确格式的数据:

cust(string),val(string),ts(timestamp)
cust1,1,2014-05-19 05:12:43 
cust1,2,2014-05-19 05:12:50 
cust1,3,2014-05-19 05:13:27 
cust1,4,2014-05-19 05:14:14 
cust2,1,2014-05-19 05:16:27 
cust2,2,2014-05-19 05:17:01 
cust2,3,2014-05-19 05:17:05

查询:

选择 cust, unix_timestamp(max(ts)) - unix_timestamp(min(ts)) from temp_txns 按客户分组

输出:

cust1   91
cust2   38

希望这对你有用。

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多