如何在hive中将品种自定义时间戳转换为秒
Posted
技术标签:
【中文标题】如何在hive中将品种自定义时间戳转换为秒【英文标题】:how to convert the variety customized time stamp to second in hive 【发布时间】:2019-10-11 03:38:39 【问题描述】:我正在为我的问题寻找解决方案。我的问题是我想将我的数据转换为秒。我的 HIVE 表中的数据如下所示:
我的意见:
1 Day 8 Hours 48 Minutes
1 Hour 1 Minutes
3 Hours
20 Minutes
20 Minutes 4 Seconds
50 Seconds
我的预期输出(秒)
118080
3660
10800
1200
1204
50
【问题讨论】:
【参考方案1】:使用正则表达式,您可以在 case 语句中解析所有可能的模板。也许这可以优化,我希望你明白了。添加更多模板并像这样进行测试:
with mytable as(
select stack(6,
'1 Day 8 Hours 48 Minutes',
'1 Hour 1 Minutes',
'3 Hours',
'20 Minutes',
'20 Minutes 4 Seconds',
'50 Seconds'
) as mytimestamp
)
select mytimestamp, ts[0]*86400 --days
+ts[1]*3600 --hours
+ts[2]*60 --minutes
+ts[3] --seconds
as seconds
from
(
select mytimestamp,
split(
case when mytimestamp rlike '^(\\d1,2)\\s(?:Days?)\\s(\\d1,2)\\s(?:Hours?)\\s(\\d1,2)\\s(?:Minutes?)$' --Days Hours Minutes
then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Days?)\\s(\\d1,2)\\s(?:Hours?)\\s(\\d1,2)\\s(?:Minutes?)$','$1:$2:$3:0')
when mytimestamp rlike '^(\\d1,2)\\s(?:Hours?)\\s(\\d1,2)\\s(?:Minutes?)$' --Hours Minutes
then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Hours?)\\s(\\d1,2)\\s(?:Minutes?)$','0:$1:$2:0')
when mytimestamp rlike '^(\\d1,2)\\s(?:Hours?)$' --Hours
then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Hours?)$','0:$1:0:0')
when mytimestamp rlike '^(\\d1,2)\\s(?:Minutes?)$' --Minutes
then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Minutes?)$','0:0:$1:0')
when mytimestamp rlike '^(\\d1,2)\\s(?:Minutes?)\\s(\\d1,2)\\s(?:Seconds?)$' --Minutes Seconds
then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Minutes?)\\s(\\d1,2)\\s(?:Seconds?)$','0:0:$1:$2')
when mytimestamp rlike '^(\\d1,2)\\s(?:Seconds?)$' --Seconds
then regexp_replace(mytimestamp,'^(\\d1,2)\\s(?:Seconds?)$','0:0:0:$1')
end,':') as ts
from mytable
)s
返回:
mytimestamp seconds
1 Day 8 Hours 48 Minutes 118080
1 Hour 1 Minutes 3660
3 Hours 10800
20 Minutes 1200
20 Minutes 4 Seconds 1204
50 Seconds 50
【讨论】:
以上是关于如何在hive中将品种自定义时间戳转换为秒的主要内容,如果未能解决你的问题,请参考以下文章