在hive里面可以通过严格模式防止用户执行那些可能产生意想不到的不好的效果的查询,从而保护hive的集群。
用户可以通过 set hive.mapred.mode=strict 来设置严格模式,改成unstrict则为飞严格模式。 在严格模式下,用户在运行如下query的时候会报错。
1. 分区表的查询没有使用分区字段来限制。
select * from mart_catering.dim_shopca_reduction_ss limit 1000;
2. 使用了笛卡尔积
当用户写代码将表的别名写错的时候会引起笛卡尔积,例如
SELECT * FROM origindb.promotion__campaign c JOIN origindb.promotion__campaignex ce ON c.id = c.id limit 1000
3. order by 的时候没有使用limit
SELECT * FROM origindb.promotion__campaign order by id
当使用的limit的时候错误消除。
总之:
hive的严格模式可以保护hive的集群不收损害。
在创建动态分区的时候,是要将hive的严格模式设置为非严格模式的。