我有一个名为' timestamp '的列。我想在一个查询中仅过滤工作日数据,在 Hive
中的另一个查询中过滤周末数据TIME_STAMP
2018-03-12 15:30:00.0 --Monday
2018-03-13 15:30:00.0 --Tuesday
2018-03-14 15:30:00.0 --Wednesday
2018-03-15 15:30:00.0 --Thursday
2018-03-16 15:30:00.0 --Friday
2018-03-17 15:30:00.0 --Saturday
2018-03-18 15:30:00.0 --Sunday
2018-03-19 15:30:00.0 --Monday
我正在寻找的结果是
2018-03-12 15:30:00.0 --Monday
2018-03-13 15:30:00.0 --Tuesday
2018-03-14 15:30:00.0 --Wednesday
2018-03-15 15:30:00.0 --Thursday
2018-03-16 15:30:00.0 --Friday
2018-03-19 15:30:00.0 --Monday
这不是我的强项。
谢谢!
答案 0 :(得分:0)
您可以使用from_unixtime
和unix_timestamp
这将返回星期几:
select from_unixtime(unix_timestamp('2018-03-12 15:30:00.0'), 'E')
,您的完整查询将如下所示:
select * from mytable where from_unixtime(unix_timestamp(time_stamp), 'E') in ('Mon', 'Tue', ...) ;
以下是配置单元中日期函数的完整说明:link
答案 1 :(得分:0)
在配置单元中,您可以使用unix_timestamp
和from_unixtime
UDF的组合来获取天数。
所以首先你必须得到天的名字
from_unixtime(unix_timestamp(col), 'EEE') as days
如果您想要全天候名称,可以使用EEEE
然后你可以过滤周末使用
where days != "Sat" or days != "Sun"
答案 2 :(得分:-1)
desc datetoday;
OK
date1 timestamp
select * from datetoday;
OK
2018-03-12 15:30:00
2018-03-13 15:30:00
2018-03-14 15:30:00
2018-03-15 15:30:00
2018-03-16 15:30:00
2018-03-17 15:30:00
2018-03-18 15:30:00
2018-03-19 15:30:00
Time taken: 0.101 seconds, Fetched: 8 row(s)
hive> select date1,from_unixtime(unix_timestamp(date1,'yyyy-mm-dd'),'E') from datetoday;
OK
2018-03-12 15:30:00 Mon
2018-03-13 15:30:00 Tue
2018-03-14 15:30:00 Wed
2018-03-15 15:30:00 Thu
2018-03-16 15:30:00 Fri
2018-03-17 15:30:00 Sat
2018-03-18 15:30:00 Sun
2018-03-19 15:30:00 Mon
Time taken: 0.095 seconds, Fetched: 8 row(s)