我需要计算周日的平均销售额。 salesdate列(时间戳)的值为:
2012-01-01 09:00:00
2012-01-01 09:00:00
2012-01-01 09:00:00
...........
我使用to_date()提取了日期部分。现在如何从hive中的这个日期获得工作日(比如星期日)? 请指导。
答案 0 :(得分:7)
您可以结合使用unix_timestamp和from_unixtime UDF。
from_unixtime(unix_timestamp(col), 'EEEE')
如果您查看from_unixtime使用的SimpleDateFormat文档,则可以看到“EEEE”是一周中某一天全名的代码。 “EEE”为您提供缩写版本,即“Sun”或“Mon”。
答案 1 :(得分:1)
答案 2 :(得分:0)
只是一个建议..你可以采取一个较低的日期(低于你的数据中的最短日期),这是一个星期天,在' yyyy-mm-dd'格式。使用DATEDIFF()函数查找数据中的日期值(以' yyyy-mm-dd'格式)与此低日期之间的差异。计算dateiff输出的模7。星期日为0,星期一为1,依此类推......
答案 3 :(得分:0)
在Hive中,您还可以使用以下方法以非常优雅的方式解决此问题,并且其性能非常好。
from_unixtime
接受int格式的第一个参数:
date_format(from_unixtime(col(timestampinseconds),'yyyy-MM-dd'),'EEEE')
您也可以像这样测试它:
select date_format(from_unixtime(1531372789,'yyyy-MM-dd'),'EEEE');
输出:
Thursday
我希望它能达到您的目的。
答案 4 :(得分:0)
选择摘录(from_unixtime(unix_timestamp)中的星期几);