考虑我有 hive 表与列script_name,start_time,end_time,持续时间。开始时间,结束时间和持续时间的格式为hh:mm:ss。我的要求是找到最近7天这些列的平均时间并放入文件中。
最佳答案
转换为unix_timestamp,求和,除以3,转换为bigint,然后转换回HH:mm:ss:
with data as --Data example. Use your table instead
(select '12:10:30' start_time,'01:10:00' end_time, '02:10:00' duration)
select from_unixtime(cast((unix_timestamp(start_time,'HH:mm:ss')+ unix_timestamp(end_time,'HH:mm:ss')+unix_timestamp(duration,'HH:mm:ss'))/3 as bigint),'HH:mm:ss') from data;
结果:
05:10:10
在此处查看测试:http://demo.gethue.com/hue/editor?editor=285484&type=hive
对于单列:
转换为unix时间戳,以秒为单位计算平均值,转换为bigint(平均值为double,会有几分之一秒的精度损失),最后将其转换回字符串时间格式:
with data as --Data example. Use your table instead
(select stack(2,'12:10:30','01:10:00') as timeStr)
select from_unixtime(cast(avg(unix_timestamp(timeStr,'HH:mm:ss'))as bigint),'HH:mm:ss') from data;
结果:
06:40:15
在此处查看测试:http://demo.gethue.com/hue/editor?editor=285464&type=hive
关于sql - 如何在 hive 中找到hh:mm:ss的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55020821/