hive:在hive中的两个日期之间每隔一分钟将一行拆分为多行

3phpmpom  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(622)

我有一个配置单元表'driver\u time\u stats',包含列slot\u id,number\u of\u drivers,slot\u start\u time和slot\u end\u time。

-----------------------------------------------------------------------
slot_id | number_of_drivers | slot_start_time     | slot_end_time
-----------------------------------------------------------------------
1       | 5                 | 2018-01-01 09:30:00 | 2018-01-01 10:00:00
2       | 8                 | 2018-01-01 10:30:00 | 2018-01-01 11:00:00
-----------------------------------------------------------------------

所需的输出:每一行应该被分割成多行,间隔1分钟,在插槽开始时间和插槽结束时间之间。

-----------------------------------------------------------------------
slot_id | number_of_drivers | slot_start_time     | slot_end_time
-----------------------------------------------------------------------
1       | 5                 | 2018-01-01 09:30:00 | 2018-01-01 09:31:00
1       | 5                 | 2018-01-01 09:31:00 | 2018-01-01 09:32:00
.
.
.
1       | 5                 | 2018-01-01 09:59:00 | 2018-01-01 10:00:00

2       | 8                 | 2018-01-01 10:30:00 | 2018-01-01 10:31:00
2       | 8                 | 2018-01-01 10:31:00 | 2018-01-01 10:32:00
.
.
.
2       | 8                 | 2018-01-01 10:59:00 | 2018-01-01 11:00:00

-----------------------------------------------------------------------

我用的是侧视图,posexplode e.t.c函数,但做不到。有人能帮我吗?另一方面,我试图在Hive中以一分钟的间隔将一个记录分割成多个记录。我可以使用unnest在presto中实现它,但是我只希望解决方案在hive中作为构建在hive上的out etl。
-纳什

qyyhg6bp

qyyhg6bp1#

嗯,我可以在我朋友亨利的帮助下找到答案,他把答案贴在这里,这样就可以帮助其他人寻找解决类似问题的方法。下面的代码截取给你一个指导。你可以根据需要调整它。

select from_unixtime(unix_timestamp(st) + pe.i*60) FROM (
  select '2018-01-12 09:00:00' as st, '2018-01-12 11:30:00' as en) t
  lateral VIEW
  posexplode(split(
  space(cast(floor((unix_timestamp(t.en)-unix_timestamp(t.st))/60) as INT)), ' ')) pe as i, x

相关问题