我有一个按日期分区的表。要查询过去10天的数据,我通常会写一些类似的内容:
SELECT * FROM table WHERE date = date_add(current_date, -10);
一位同事说,这使得查询使用简单日期字符串的效率降低。是这样的吗?有人可以向我解释一下吗?有没有办法将动态日期写入有效的where子句?
答案 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}';
如果分区修剪工作正常,则根本不需要打扰。