在 Hive 中获取系统日期 -1

2024-01-07

有什么办法可以得到current date -1在 Hive 中的意思是yesterdays date总是? 并且以这种格式-20120805?

我可以像这样运行查询来获取数据yesterday's date就像今天一样Aug 6th-

select * from table1 where dt = '20120805';

但是当我尝试这样做时date_sub function获取昨天的日期,因为下表按日期(dt)列进行分区。

select * from table1 where dt = date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP(),
'yyyyMMdd')) , 1)     limit 10;

它正在寻找所有分区中的数据吗?为什么?我在查询中做错了什么?

如何使评估发生在子查询中以避免扫描整个表?


尝试类似的方法:

select * from table1 
where dt >= from_unixtime(unix_timestamp()-1*60*60*24, 'yyyyMMdd');

如果您不介意配置单元扫描整个表,则此方法有效。from_unixtime不是确定性的,因此 Hive 中的查询规划器不会为您进行优化。对于许多情况(例如日志文件),不指定确定性分区键可能会导致启动非常大的 hadoop 作业,因为它将扫描整个表,而不仅仅是具有给定分区键的行。

如果这对您很重要,您可以使用附加选项启动 hive

$ hive -hiveconf date_yesterday=20150331

并在脚本或 hive 终端中使用

select * from table1
where dt >= ${hiveconf:date_yesterday};

变量的名称并不重要,值也不重要,在这种情况下您可以设置它们以使用 unix 命令获取先前的日期。在OP的具体情况下

$ hive -hiveconf date_yesterday=$(date --date yesterday "+%Y%m%d")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Hive 中获取系统日期 -1 的相关文章

随机推荐