有什么办法可以得到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(使用前将#替换为@)