最近有些同事些sql进行查询时,sql语句里不指定partition字段,这样直接造成hive生成Hadoop的MapReduce任务时查询的数据量巨大,从而影响整个集群的性能。经研究可以通过配置Hive参数来预防此类错误,从而达到优化的目的。
在hive-site.xml中添加以下配置:
<property>
<name>hive.mapred.mode</name>
<value>strict</value>
</property>
这样,在提交类似一下SQL(where中不指定partition条件)时,将会抛出错误而不执行该sql:
hive> select *from access_raw limit 10;
FAILED: Error in semantic analysis: No partition predicate found for Alias "access_raw" Table "access_raw"
而正确书写SQL的方法为:
hive> select *from access_raw where log_date='2012-08-10' limit 10;
这样,就对sql语句进行了过滤。