摸鱼大数据——Hive表操作——分区表

1、介绍

特点: 分区表会在HDFS上产生目录。查询数据的时候使用分区字段筛选数据,可以避免全表扫描,从而提升查询效率

注意: 如果是分区表,在查询数据的时候,如果没有使用分区字段,它回去进行全表扫描,会降低效率

只需要记住一点,分区表是用来提升Hive的数据分析效率

2、一级分区
复制代码
创建分区表: create [external] table [if not exists] 表名称(字段名称1 字段数据类型,字段名称2 字段数据类型..) partitioned by (分区字段 字段数据类型);
​
自动生成分区目录并插入数据: load data [local] inpath '文件路径' into table 表名称 partition (分区字段=值);
​
注意: 如果使用load导入数据,没有写local,文件路径就是HDFS上的路径。否则就是linux的路径

示例:

复制代码
use day06;
​
-- 1- 创建分区表
create table one_part_tb(
    id int,
    name string,
    price double,
    num int
) partitioned by (year int)
row format delimited fields terminated by ' ';
​
​
-- 2- 通过load将HDFS中的文件导入到Hive表中
load data inpath '/source/order202251.txt' into table one_part_tb partition (year=2022);
load data inpath '/source/order202351.txt' into table one_part_tb partition (year=2023);
load data inpath '/source/order202352.txt' into table one_part_tb partition (year=2023);
load data inpath '/source/order2023415.txt' into table one_part_tb partition (year=2023);
​
-- 3- 数据验证
select * from one_part_tb;
​
-- 4- 使用分区
select * from one_part_tb where year=2022;
​
-- 5- 如果没有指定分区,那么会进行全表扫描,拖慢了效率
select * from one_part_tb where price>=20;
3、多级分区
复制代码
创建分区表: create [external] table [if not exists] 表名称(字段名称1 字段数据类型,字段名称2 字段数据类型..) partitioned by (分区字段1 字段数据类型,分区字段2 字段数据类型...);
​
自动生成分区目录并插入数据: load data [local] inpath '文件路径' into table 表名称 partition (分区字段1=值,分区字段2=值....);
​
注意: 如果使用load导入数据,没有写local,文件路径就是HDFS上的路径。否则就是linux的路径

示例:

复制代码
use day06;
​
-- 1- 创建多级分区表
create external table multi_pat_tb(
    id int,
    name string,
    price double,
    num int
) partitioned by (year string,month string,day string)
row format delimited fields terminated by ' ';
​
-- 2- 加载HDFS数据到Hive表中
load data inpath '/source/order202251.txt' into table multi_pat_tb partition (year="2022",month="5",day="1");
load data inpath '/source/order202351.txt' into table multi_pat_tb partition (year="2023",month="5",day="1");
load data inpath '/source/order202352.txt' into table multi_pat_tb partition (year="2023",month="5",day="2");
load data inpath '/source/order2023415.txt' into table multi_pat_tb partition (year="2023",month="4",day="15");
​
-- 3- 数据验证
select * from multi_pat_tb;
​
-- 4- 使用分区
-- 注意: 如果是多分区,使用分区来提升效率的时候,需要根据需求来决定到底使用几个分区。并不需要所有的分区都用到
-- 需求:要对2023全年的销售情况进行分析
select * from multi_pat_tb where year="2023";
-- 需求:要对2023年5月整个月的销售情况进行分析
select * from multi_pat_tb where year="2023" and month="5";
select * from multi_pat_tb where year="2023" and month="5" and day="2";
​
-- 5- 不使用分区
select * from multi_pat_tb where price>=20;
4、分区操作
复制代码
添加分区: alter table 分区表名 add partition (分区字段1=值,分区字段2=值..);
​
删除分区: alter table 分区表名 drop partition (分区字段1=值,分区字段2=值..);
​
修改分区名: alter table 分区表名 partition (分区字段1=旧分区值,分区字段2=旧分区值..) rename to partition (分区字段1=新分区值,分区字段2=新分区值..);
​
查看所有分区: show partitions 分区表名;
​
同步/修复分区: msck repair table 分区表名;
​
注意: 如果删除内部表的分区,那么对应的HDFS分区目录也被删除了;如果删除外部表的分区,那么对应的HDFS分区目录还保留着

示例:

复制代码
use day06;
​
-- 查询表的分区信息
show partitions one_part_tb;
show partitions multi_pat_tb;
​
-- 添加分区
alter table one_part_tb add partition (year=2024);
-- 如果是多级分区,那么添加分区的时候,需要将所有的分区都添加上
alter table multi_pat_tb add partition (year="2024");
alter table multi_pat_tb add partition (year="2024",month="1",day="1");
​
-- 修改分区
alter table one_part_tb partition (year=2024) rename to partition (year=2000024);
​
-- 删除分区
-- 注意:如果删除内部表的分区,那么对应的分区目录也被删除了;如果删除外部表的分区,那么对应的HDFS分区目录还保留着
alter table one_part_tb drop partition (year=2000024);
alter table multi_pat_tb drop partition (year="2024",month="1",day="1");
​
-- 修复分区
-- 在执行下面的语句之前,需要手动去/user/hive/warehouse/day06.db/one_part_tb路径下创建一个year=2025分区目录
msck repair table one_part_tb;

给多级分区表添加分区遇到的错误:

原因: 如果是多级分区,那么添加分区的时候,需要将所有的分区都添加上

修改分区效果:

相关推荐
ItKevin爱java2 小时前
JDBC中如何处理数据库连接超时和SQL超时?
数据库·sql
白菜!!!2 小时前
SQL INSERT批量插入方式
数据库·sql·mysql·mybatis
天才的白鸟2 小时前
电商数据仓库
数据仓库
屿小夏.2 小时前
【SQL】已解决:SQL错误(15048): 数据兼容级别有效值为100、110或120
数据库·sql·oracle
小的~~2 小时前
大数据面试题之数据库(2)
大数据·数据库
迅腾文化2 小时前
品牌推广的深层逻辑:自我提升与市场认同的和谐共生
大数据·人工智能·物联网·信息可视化·媒体
迅狐源码工厂4 小时前
视频号矩阵管理系统:短视频内容营销的智能助手
大数据·人工智能·矩阵
寰宇视讯4 小时前
新疆水博会将举办多场高端论坛探析水利科技创新发展
大数据·科技
qq_361760285 小时前
大数据处理引擎选型之 Hadoop vs Spark vs Flink
hadoop·flink·spark
我非夏日5 小时前
基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务6:安装并配置Hadoop
大数据·hadoop·分布式