每周和每季度数据的Hive TimeStamp

时间:2016-06-23 20:29:48

标签: hive

以下hive命令,

select * from my_new_table
  where month(time_stamp)= '03'
    and year(time_stamp) = '2016'
    and age = '1'
    and gender = '0'
    and income = '4'
    and ethnicity = '3'
    and marital_status = '1';

为2016年3月(03)月的所有数据(31天)生成以下结果:

time_stamp              age gender  income  ethnicity   marital_status
2016-03-14@17:42:47.000 1   0       4       3           1
2016-03-14@16:10:51.000 1   0       4       3           1
2016-03-20@15:16:44.000 1   0       4       3           1
2016-03-14@17:13:51.000 1   0       4       3           1
2016-03-14@17:12:51.000 1   0       4       3           1
2016-03-14@18:24:51.000 1   0       4       3           1
2016-03-03@13:02:06.000 1   0       4       3           1

同样,我想获得2016年第二季度(或第n季度,数据应该是3个月,从本季度开始的3月1日至5月31日)和第12周(或第n周,数据应该是2016年这个特定周的7天)。对此有什么正确的Hive命令?

如果我在Hive命令中将month替换为quarterweek,我会收到错误。

select * from my_new_table 
where quarter(time_stamp)='03' 
and year(time_stamp) = '2016'; 

返回

FAILED: SemanticException [Error 10011]: Line 1:71 Invalid function 'quarter'

select * from my_new_table 
where week(time_stamp)='12' 
and year(time_stamp) = '2016'; 

返回

FAILED: SemanticException [Error 10011]: Line 1:71 Invalid function 'week'

看起来需要计算才能获得第n个季度或第一周但不确定。请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

文档说monthweek函数需要“字符串日期”,而不是实际的日期或时间戳类型作为输入。您可能需要使用date_format函数将时间戳转换为字符串,然后使用函数,例如

month(date_format(timestamp, 'yyyy-MM-dd'))

但这并不能解释为什么这些函数的第一个例子作为where子句的一部分似乎有效。