动态分区功能,可以基于查询参数推断出要创建的分区名称
手动分区灵活性太低,当分区数较多时一个个分区单独去加载数据工作量太大,这时候考虑动态分区。动态分区基于hive的源数据表将数据插入到分区表中,在数据插入的时候会根据分区字段自动将数据归类存入对应的分区路径,不需要手动指定分区
注意:系统默认以最后一个字段为分区名,因为分区表的分区字段默认也是该表中的字段,且依次排在表中字段的最后面。所以分区需要分区的字段只能放在后面,不能把顺序弄错。如果我们查询了四个字段的话,则会报错,因为该表加上分区字段也才三个。要注意系统是根据查询字段的位置推断分区名的,而不是字段名称
在select语句中使用分区值来动态指明分区[单个字段分区]
insert overwrite table stu_part1 partition(sex) select id,name,age,department,sex from student;
不需要指定数据要落到哪个分区 stu_part1以 sex作为分区
注意:使用,insert…select 往表中导入数据时,查询的字段个数必须和目标的字段个数相同,不能多,也不能少,否则会报错。但是如果字段的类型不一致的话,则会使用null值填充,不会报错。而使用load data形式往hive表中装载数据时,则不会检查。如果字段多了则会丢弃,少了则会null值填充。同样如果字段类型不一致,也是使用null值填充
1、混合使用静态分区和动态分区
在动静结合使用时需要注意静态分区值必须在动态分区值的前面。所以建议使用动态分区,且insert进行分区的使用建议使用OVERWRITE,避免数据重复
insert overwrite table stu_part2 par