1 hive.in.test true 5 ,修改配置文件后,重新启动 : nohup hiveserver2 1>/dev/null 2>&1 & beeline -u jdbc:hive2://node01:10000 -n root 6 ,严格模式 : 默认 :严格模式严格模式 : 防止用户执行那些可能产生意想不到的不好的效果的查询。 可以禁止 3 种类型的查询。设置严格模式 : set hive.mapred.mode=strict;禁止的三种类型 : 1 ,分区表不能扫描全表 : 查询时,必须加分区字段,也就是不能查询所有数据。 2 ,order by 必须与 limit 连用 :全表排序将会是一项巨大的工程,因此必须加以限制。 3 ,限制笛卡尔积的查询 :必须 join on 连用,不可以 join - where 连用。7 ,非严格模式 : 设置 : set hive.mapred.mode=nostrict;效果 : 解除限制,啥都可以查。8 ,静态分区 : 默认 :静态分区。设置静态分区 : 设置 :set hive.exec.dynamic.partition=false; 查看设置 :set hive.exec.dynamic.partition;分区的列 : 伪列,是不存在的字段。不方便之处,在于 : 使用动态插入的时候不方便。具体怎么不方便 : 一个表有分区,另一个表也有分区,那么,不可以直接插入数据。为什么不能 : 因为,我们查询出来的分区值是一个字段,而另一个表中没有这个字段,所以插入不进去。举个例子 :1 ,a 表 : create table a(id int,name string) partitioned by(dt string) row format delimited fields terminated by ','; 2 ,b 表 :( 两表字段一致,分区名字也一致 ) create table b(id int,name string) partitioned by(dt string) row format delimited fields terminated by ','; 3 ,a 表导入数据 : vim a.info 1,a 2,aa 3,aaa 4,aaaa 3 ,a 表导入数据 : vim b.info 5,b 6,bb 7,bbb 8,bbbb 3 ,a 表导入数据 : load data local inpath '/root/hivetest/a.info' into table a partition(dt='1111'); load data local inpath '/root/hivetest/b.info' into table a partition(dt='2222'); 4 ,查询 a 表数据 : +-------+---------+-------+--+ | a.id | a.name | a.dt | +-------+---------+-------+--+ | 1 | a | 1111 | | 2 | aa | 1111 | | 3 | aaa | 1111 | | 4 | aaaa | 1111 | | 5 | b | 2222 | | 6 | bb | 2222 | | 7 | bbb | 2222 | | 8 | bbbb | 2222 | +-------+---------+-------+--+ 5 ,把 a 表数据导入 b 表 : 报错 insert into b select * from a; 9 ,动态分区 : 剩下一个字段,那他就是分区字段 开启动态分区 : set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict;sqlinsert into b partition(dt) select * from a; 成功的标志 : b 表确实分区了含义 : 用 dt 分区,你不是剩下一个字段,没有填充进来吗,那你就是分区字段。10 ,多个字段的,全自动态分区 : insert overwrite table ds_parttion partition(state,ct) select id ,country,city from mytest_tmp2_p; 11 ,多个字段的,半自动分区 : 含义 :某些字段手动指定分区,某些字段,自动分区。sql :create table ds_parttion(id int) partitioned by (state string ,ct string ); insert overwrite table ds_parttion partition(state='china',ct) #state分区为静态,ct