首页 > 解决方案 > Hive - 在 where 子句中使用 date_add

问题描述

我有一个按日期分区的表。要查询最近 10 天的数据,我通常会编写如下内容:

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

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

标签: performancehivehiveql

解决方案


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

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

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}';

如果分区修剪效果很好,你根本不需要费心。


推荐阅读