从蜂巢中的TIMESTAMP获得工作日

时间:2014-05-14 04:54:41

标签: date timestamp hive

我需要计算周日的平均销售额。 salesdate列(时间戳)的值为:

2012-01-01 09:00:00
2012-01-01 09:00:00
2012-01-01 09:00:00
...........

我使用to_date()提取了日期部分。现在如何从hive中的这个日期获得工作日(比如星期日)? 请指导。

5 个答案:

答案 0 :(得分:7)

您可以结合使用unix_timestamp和from_unixtime UDF。

from_unixtime(unix_timestamp(col), 'EEEE')

如果您查看from_unixtime使用的SimpleDateFormat文档,则可以看到“EEEE”是一周中某一天全名的代码。 “EEE”为您提供缩写版本,即“Sun”或“Mon”。

答案 1 :(得分:1)

目前没有OOTB功能可以实现这一目标。 ticket 虽然是开放的。

您需要为此编写UDF。或者,您也可以尝试使用上述票证提供的补丁。

HTH

答案 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)中的星期几);