性能配置单元查询在where条件下使用变量时运行非常慢

bvk5enib  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(334)

这是我的配置单元查询:

set s=date_add(from_unixtime(UNIX_TIMESTAMP()),-200);
select * from a where dateString>=${hiveconf:s}

它跑得很慢。出于某种原因,它运行得更快:

select * from a where dateString>='2015-01-01'

所以对于相同的日期值,第一个要慢得多。为什么会这样?有什么想法吗?

j1dl9f46

j1dl9f461#

当指定这样的分区时,不会进行动态分区修剪(除非使用hive>=0.14)。在where子句中指定精确值时,配置单元知道要扫描哪些分区。当从配置变量或另一个查询的结果中指定时,配置单元不知道要扫描哪些分区。我建议使用hive>=0.14,或者用shell脚本代替hive conf来替换变量,从而指定分区的确切值。

相关问题