获取星期几的 HiveQL 是什么?

What is the HiveQL for obtaining day of week?

我从 table "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');

如何将其合并到我的原始查询中?

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

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

我在配置单元 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;

这将return'Monday'

另外

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

会return'Mon'

那你可以简单的做个case什么时候改成整数。

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;

此 returned 2,这是不正确的,已被其他人建议。

date_format(..., 'u') 对于类似日期的 string/type 给出星期一=1 依此类推。

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

您的原始查询变为:

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

查看所有选项的java docs