最大分区列的配置单元计数元素

nx7onnlm  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(297)

我正在为一个看似简单但却给我带来很多麻烦的问题而挣扎。

SELECT COUNT(*) FROM mytable where partition_column IN (SELECT MAX(partition_column) FROM mytable )

mytable是一个2to-hive外部表,由列partition\u列进行分区。运行此查询需要10分钟。。
当我进行两个单独的查询时:

SELECT MAX(partition_column) FROM mytable
> 2020-06-29
SELECT COUNT(*) FROM mytable where partition_column = '2020-06-29'

它工作的超精细和超快速。
我错过什么了吗?谢谢您
我使用的是Hive1.2.1和Hadoop2.7.3

gev0vcfq

gev0vcfq1#

子查询的处理时间似乎很长。由于您在与子查询相同的列和表上进行筛选,因此reducer步骤需要很长时间来处理。因此导致查询运行缓慢。
您可以通过引入cte来改进查询,cte将创建一个临时结果集。如下所示:

WITH MY_CTE_SUBQUERY AS (
      SELECT MAX(partition_column) as max_pc FROM mytable
 )
 SELECT COUNT(*) 
 FROM mytable 
 where partition_column IN (Select max_pc from MY_CTE_SUBQUERY);

更多关于Hivecte的官方文件。

相关问题