获取星期几的 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。
我从 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。