Hive - 在where子句中使用date_add

时间:2018-05-16 14:39:37

标签: performance hive hiveql

我有一个按日期分区的表。要查询过去10天的数据,我通常会写一些类似的内容:

SELECT * FROM table WHERE date = date_add(current_date, -10);

一位同事说,这使得查询使用简单日期字符串的效率降低。是这样的吗?有人可以向我解释一下吗?有没有办法将动态日期写入有效的where子句?

1 个答案:

答案 0 :(得分:0)

这里唯一的问题可能是分区修剪。在某些Hive版本中,分区修剪可能无法使用功能。您可以通过执行EXPLAIN EXTENDED <your select query>命令轻松自行检查。它将打印要查询的所有分区路径。

在这种情况下,使用在shell值中预先计算并将其作为参数传递:

date_var=$(date +'%Y_%m_%d' --date "-10 day")

#call your script
hive -hivevar date_var="$date_var" -f your_script.hql

在脚本中使用变量:

SELECT * FROM table WHERE date = '${hivevar:date_var}';

如果分区修剪工作正常,则根本不需要打扰。