Performance 为什么选择不同的分区列非常慢?

Performance 为什么选择不同的分区列非常慢?,performance,hive,query-optimization,hive-partitions,Performance,Hive,Query Optimization,Hive Partitions,我有一个表zhihu\u answer\u increment,它被列ym划分。当我执行query时,选择distinct(ym)from zhihu.zhihu\u answer\u increment,花了1分钟才完成。在此过程中,hive启动了map reduce作业。以下是日志: INFO : MapReduce Jobs Launched: INFO : Stage-Stage-1: Map: 1 Reduce: 1 Cumulative CPU: 3.59 sec H

我有一个表
zhihu\u answer\u increment
,它被列
ym
划分。当我执行query
时,选择distinct(ym)from zhihu.zhihu\u answer\u increment,花了1分钟才完成。在此过程中,hive启动了map reduce作业。以下是日志:

INFO  : MapReduce Jobs Launched: 
INFO  : Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 3.59 sec   HDFS Read: 14969 HDFS Write: 106 HDFS EC Read: 0 SUCCESS
INFO  : Total MapReduce CPU Time Spent: 3 seconds 590 msec
INFO  : Completed executing command(queryId=hive_20191015113300_a6f58bad-f35b-4243-890a-a0d9ba9a5210); Time taken: 95.048 seconds
INFO  : OK
相比之下,
显示分区的智狐答案增量返回结果的速度要快得多(只需几秒钟)。但是我需要从zhihu中选择distinct(ym)。zhihu\u answer\u increment
作为子查询


那么我如何优化这个查询呢?我不明白为什么它启动了mapreduce作业,就我而言,只检查分区目录就足够了。或者我的考虑可能太简单了。

如果您可以使用shell,那么使用SHOW PARTITIONS(工作速度很快)将分区列表转换为变量,并使用AWK将其转换为逗号分隔的列表。然后使用带有分区列表的变量参数化配置单元脚本:

大概是这样的:

partition_list=$(hive -S -e "show partitions your_table;"  |  awk -vq="'" -F "=" 'f&&!NF{exit}{f=1}f{printf c q $2 q}{c=","}')


hive -e "select 1 from your_table where partition_column in (${partition_list}) limit 1"

非常感谢你的回答。有SQL模式的解决方案吗?在我的场景中,在shell中运行是不方便的。@DennisLi我遇到了同样的问题,无法找到SQL解决方案。在使用Hive1.2时,我尝试使用仅获取任务,但它不适用于distinct FortunatureAllright,我将尝试一下。谢谢@leftjoin。