.Hive的严格模式 Hive提供了一个严格模式,可以防止用户执行那些产生意想不到的不好的影响的查询。 想想看在那么大的数据量的前提下,如果我们在分区上表上使用查找所有,或是使用了笛卡尔积查询数据等等不良情况,那得花费我们多少时间和资源成本,Hive在默认情况下会开启一种模式,叫做严格模式,来限制我们这些不良操作。 其中在hive-site.xml的配置文件中,设置了属性来进行全局的配置 对于全局的配置,我们可以修改这些属性,也可以采用临时会话的形式,使用set 属性=值的形式来进行修改,只不过只在当前会话有效。 使用了严格模式之后主要对以下3种不良操作进行控制: 1.分区表必须指定分区进行查询。 2.order by时必须使用limit子句。 3.不允许笛卡尔积。 2.Hive的动态分区 之前我们介绍过了分区表,并且查看了分区表的存储结构(分区表是目录),并且像分区表里面存储了数据。我们在进行存储数据的时候,都是明确的指定了分区。在这个过程中Hive也提供了一种比较任性化的操作,就是动态分区,不需要我们指定分区目录,Hive能够把数据进行动态的分发,例如2018年的数据,就让他进入2018年分区目录下,2017年的数据,就让他进入2017的目录下。使用动态分区的时候,我们需要将当前的严格模式设置成非严格模式,否则不允许使用动态分区 $hive>set hive.exec.dynamic.partition.mode=nonstrict//设置非严格模式 //设置动态分区的语法如下所示: $hive>insert into t5 partition(country,province) select (包含分区的字段信息就可以) from orders; //用到的相关的表 hive> CREATE TABLE t5(id int,price int) PARTITIONED BY (country string, province string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ; |