在Hive中从时间戳获取星期几

4

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

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

我已经使用to_date()提取了日期部分。现在如何从这个日期中获取星期几(例如星期日)在Hive中?请指导。
5个回答

8

您可以使用unix_timestamp和from_unixtime UDF的组合。

from_unixtime(unix_timestamp(col), 'EEEE')

如果您查看SimpleDateFormat的文档,您可以看到"EEEE"代表星期几的全名。"EEE"则表示缩写版,例如 "Sun" 或 "Mon"。


1

目前还没有OOTB功能可以实现这一点。不过已经有一个ticket

您需要编写UDF来实现此功能。或者,您也可以尝试使用上述提到的票据中提供的补丁。

希望对您有所帮助。


1
在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

我希望它能够达到您的目的。


0

仅供参考..您可以选择一个低于数据中最小日期的日期(例如星期日),格式为'yyyy-mm-dd'。使用DATEDIFF()函数来计算数据中日期值(格式为'yyyy-mm-dd')与该低日期之间的差异。计算DATEDIFF输出的模7。这将是星期日为0,星期一为1,以此类推..


0

选择 extract(dayofweek from from_unixtime(unix_timestamp));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接