什么是HiveQL获取星期几?

时间:2015-07-06 10:52:19

标签: hive hiveql

我从我的表“tweets”中选择日期为

select to_date(created_at) from tweets;

给了我日期,

2011-09-28
2011-09-25
2011-09-25
2011-09-24

但是,我需要将日期转换为星期几格式, 周一为1,周二为2,依此类推。

我如何实现这一目标?

编辑: 我想我可以获得样品日期的日期,

select from_unixtime(unix_timestamp('2014-01-12','yyyyMMdd'),'u');

如何在原始查询中加入此内容?

2 个答案:

答案 0 :(得分:9)

对于类似日期的字符串/类型,

date_format(..., 'u')给出星期一= 1,依此类推。

另一个答案使用' w'这给出了一年中的一周,这不是你想要的。

原始查询变为:

SELECT date_format(created_at, 'u') from tweets;

有关所有选项,请参阅java docs

答案 1 :(得分:3)

如果你有hive 1.2这应该有用。它在语言手册中。我正在运行配置单元0.13所以我无法测试date_format函数,但它应该给你一个1 - 7的整数;

select cast(date_format('2015-04-06'),'w' as int) as DOW from table;

我在hive 0.13上测试了这个:

select from_unixtime(unix_timestamp('2015-07-06','yy-MM-dd'),'u') as 
   DOW from table;

这导致1,所以它似乎有效。

如果上述失败,可以使用的其他选项:

select from_unixtime(unix_timestamp('2015-07-06','yy-MM-dd'),'EEEE') as 
   DOW from table;

这将返回'Monday'

此外

select from_unixtime(unix_timestamp('2015-07-06','yy-MM-dd'),'EEE') as 
   DOW from table;

将返回'Mon'

然后你可以简单地做一个何时改为整数的情况。

case when DOW = 'Mon' then 1 
     when DOW = 'Tue' then 2
     -- ...
     when DOW = 'Sat' then 6
    else 7
end as day_of_week

不要使用它:

select pmod(datediff('2015-07-06','1970-01-04'),7) + 1 as DOW from table;

这返回2,这是不正确的,并已被其他人建议。