考虑我有 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/

10-12 19:05