以下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
替换为quarter
或week
,我会收到错误。
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个季度或第一周但不确定。请帮忙。感谢。
答案 0 :(得分:0)
文档说month
和week
函数需要“字符串日期”,而不是实际的日期或时间戳类型作为输入。您可能需要使用date_format
函数将时间戳转换为字符串,然后使用函数,例如
month(date_format(timestamp, 'yyyy-MM-dd'))
但这并不能解释为什么这些函数的第一个例子作为where子句的一部分似乎有效。