ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
Hive提供了一个严格模式,可以防止用户执行那些可能意想不到的不好的影响的查询。 ```xml <property> <name>hive.mapred.mode</name> <!-- 开启严格模式,默认是非严格模式nonstrict --> <value>strict</value> </property> ``` 开启严格模式可以禁止3种类型的查询。 **1. 对于分区表,除非`where`语句中含有分区字段过滤条件来限制范围,否则不允许执行。** 换句话说,就是用户不允许扫描所有分区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速。没有进行分区限制的查询可能会消耗令人不可接受的巨大资源来处理这个表。 <br/> **2.对于使用了`order by`语句的查询,要求必须使用`limit`语句。** 因为orderby为了执行排序过程会将所有的结果数据分发到同一个Reducer中进行处理,强制要求用户增加这个LIMIT语句可以防止Reducer额外执行很长一段时间。 <br/> **3.限制笛卡尔积的查询。** 对关系型数据库非常了解的用户可能期望在执行JOIN查询的时候不使用ON语句而是使用where语句,这样关系数据库的执行优化器就可以高效地将WHERE语句转化成那个ON语句。不幸的是,Hive并不会执行这种优化,因此,如果表足够大,那么这个查询就会出现不可控的情况。