- 分区表
- 动态分区
- 基础配置
- 写法
- 多级分区表
-- 删库,建库 DROp DATAbase IF EXISTS school; CREATE DATAbase school LOCATION '/school';分区表
- 分区是对应一个HDFS上的独立文件夹
- WHERe分区字段,查询效率更高
1、创建分区表
DROP TABLE IF EXISTS school.student; CREATE TABLE school.student (s_id INT) PARTITIonED BY (grade STRING) -- 分区表语法 LOCATION '/school/student';
2、插入数据
INSERT INTO TABLE school.student PARTITION(grade='a') VALUES (1),(2); INSERT INTO TABLE school.student PARTITION(grade='b') VALUES (3);
3、查询分区
SHOW PARTITIONS school.student;
Hue界面结果显示
4、查询时WHERe分区
SELECT * FROM school.student WHERe grade='a';
Hue界面结果显示
动态分区5、查看HDFS
Dynamic Partition:根据分区字段的值,自动将数据插入到相应的分区
基础配置-- 开启动态分区功能 SET hive.exec.dynamic.partition=true; -- 设置动态分区为非严格模式 SET hive.exec.dynamic.partition.mode=nonstrict; -- 全部节点上,最多可创建多少个动态分区 SET hive.exec.max.dynamic.partitions=1000; -- 单个节点上,最多可创建多少个动态分区 SET hive.exec.max.dynamic.partitions.pernode=100; -- 整个MR Job中,最大可以创建多少个HDFS文件 SET hive.exec.max.created.files=100000; -- 当有空分区生成时,是否抛出异常 SET hive.error.on.empty.partition=false;写法
分区字段写最尾
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
INSERT INTO TABLE school.student PARTITION(grade)
SELECt
s_id,
grade
FROM school.student;
多级分区表SELECt * FROM school.student WHERe grade='b';Hue结果显示(数据续上)
实际对应HDFS的层级文件夹
DROP TABLE IF EXISTS school.student2; CREATE TABLE school.student2 (name STRING,age INT) PARTITIonED BY (s_id INT,grade STRING) -- 二级分区 LOCATION '/school/student2';
INSERT INTO TABLE school.student2 PARTITION(s_id=5,grade='c') VALUES ('小黄',13);



