HiveQL查询,每天一小时都有输出

时间:2018-04-23 12:10:23

标签: hive hiveql

我想编写一个HiveQL查询,每次发生事件/live//activate时返回一些设备,并且每天一小时返回一次。这是我的表格的样子:

enter image description here

问题是我必须根据每个小时的间隔24次更改和重写我的查询。

例如,如果我想要在4:00 AM到5:00 AM之间的设备数量,我写的查询是:

SELECT count(equipement) FROM parcours_fin WHERE event=' /live//activate' AND `date` BETWEEN ' 2018-01-26 04:00:00' AND ' 2018-01-26 05:00:00';

如果您对查询有任何了解,可以让我获得当天每个小时的设备数量,而不是重写我的查询24次,我将非常感谢。

4 个答案:

答案 0 :(得分:0)

试试这个:

SELECT count(equipement) FROM parcours_fin WHERE event=' /live//activate' AND `date` BETWEEN from_unixtime(unix_timestamp('',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd hh:00:00.000') AND from_unixtime(unix_timestamp('',"yyyy-MM-dd hh:mm:ss.sss")+3600);

编辑:

SELECT count(equipement) FROM parcours_fin WHERE event=' /live//activate' AND `date` BETWEEN date_format(unix_timestamp(), 'YYYY-MM-DD hh:00:00.000') AND date_format(unix_timestamp()+3600, 'YYYY-MM-DD hh:00:00.000')

编辑2:

SELECT count(equipement) FROM parcours_fin WHERE event=' /live//activate' AND `date` BETWEEN from_unixtime(unix_timestamp(unix_timestamp(),"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd hh:00:00.000') AND from_unixtime(unix_timestamp(unix_timestamp(),"yyyy-MM-dd hh:mm:ss.sss")+3600);

编辑3(工作解决方案):

SELECT count(equipement), date_format(`date`, "yyyy-MM-dd hh:00:00.000 aa") 
FROM parcours_fin WHERE event=' /live//activate' 
group by date_format(`date`, "yyyy-MM-dd hh:00:00.000 aa") ;

答案 1 :(得分:0)

您可以使用group by执行此操作。我建议将日期信息添加到组中以便白天获取。以下查询获取每天每小时的计数,您可以在where条件中添加一个额外的子句以按天过滤

SELECT count(equipement), hour(`date`), date_format(date`, "yyyy-MM-dd")    
FROM parcours_fin WHERE event=' /live//activate' 
group by hour(`date`), date_format(date`, "yyyy-MM-dd") ;

答案 2 :(得分:0)

以下是我得到的输出:

enter image description here

答案 3 :(得分:0)

全天24小时使用完全加入以获取每小时的记录。

演示:

select count(equipement) cnt, h.hr hour
from

(--replace with your query
select 1 as equipement, hour('2018-01-26 04:00:00' ) as hr --calculate each record hour for the join
) your_table
full join --join with all 24 hours
        (select stack(24,
                      0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
                     ) as hr
        )h on your_table.hr=h.hr  
group by h.hr; 

输出:

OK
cnt      hour
    0       0
    0       1
    0       2
    0       3
    1       4
    0       5
    0       6
    0       7
    0       8
    0       9
    0       10
    0       11
    0       12
    0       13
    0       14
    0       15
    0       16
    0       17
    0       18
    0       19
    0       20
    0       21
    0       22
    0       23
    Time taken: 83.921 seconds, Fetched: 24 row(s) 

计算每小时的数据。这是我的例子中唯一记录数据的记录,小时= 4,它显示在结果中。