gpt4 book ai didi

hadoop - Hive中相同记录组合的时间戳记增量

转载 作者:行者123 更新时间:2023-12-02 20:50:41 26 4
gpt4 key购买 nike

我在 hive 表中有一个数据集

input1,input2,input_time
key1,val1,2017-02-03 00:00:00
key1,val1,2017-02-03 00:00:00
key1,val2,2017-02-03 00:00:00
key1,val2,2017-02-03 00:00:00
key2,val1,2017-02-03 00:00:00

列(input1,input2)将形成唯一的组合记录。对于相同的唯一组合,我想用几秒增加input_time列,即“2017-02-03 00:00:01”。

对于相同的组合,说我有65条记录,每秒达到59秒,则应该递增(分钟+秒),即“2017-02-03 00:01:01”

我们如何增加相同记录组合的时间,是否可以在 hive 中进行?
Expected output:
input1,input2,input_time
key1,val1,2017-02-03 00:00:01
key1,val1,2017-02-03 00:00:02
key1,val2,2017-02-03 00:00:01
key1,val2,2017-02-03 00:00:02
key2,val1,2017-02-03 00:00:01

最佳答案

您可以使用窗口函数为要添加的每一行生成一个临时索引。

select 
k, v , unix_timestamp(ts) as ts,
row_number() over ( partition by k,v ) as rn
from ts_test

这将产生:
+----+----+----------+---+
| k| v| ts| rn|
+----+----+----------+---+
|key1|val1|1486101600| 1|
|key1|val1|1486101600| 2|
|key1|val2|1486101600| 1|
|key1|val2|1486101600| 2|
|key2|val1|1486101600| 1|
+----+----+----------+---+

现在,您可以将其添加到您的时间字符串中,因为它已经是ISO格式。
SELECT a.k, a.v, from_unixtime(ts+rn) as newts from 
( select k, v , unix_timestamp(ts) as ts, row_number() over ( partition by k,v ) as rn
from ts_test )a

+----+----+-------------------+
| k| v| newts|
+----+----+-------------------+
|key1|val1|2017-02-03 00:00:01|
|key1|val1|2017-02-03 00:00:02|
|key1|val2|2017-02-03 00:00:01|
|key1|val2|2017-02-03 00:00:02|
|key2|val1|2017-02-03 00:00:01|
+----+----+-------------------+

这也可以通过@DuduMarkovitz所述的单一选择来实现:
select 
k, v ,
from_unixtime(unix_timestamp(ts) + row_number() over ( partition by k,v order by v asc ) )
from ts_test

关于hadoop - Hive中相同记录组合的时间戳记增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45996558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com