MySQL分区表和分桶表的操作详解
1.创建分区表
create table dept_partition(
deptno int,
dname string,
loc int
)
partitioned by (dt string) // 分区字段(date)
row format delimited fields terminated by '\t';2.增删改查操作
2.1 插入数据
1)导入本地数据
-- 创建一个名字为dt='2022-06-14'的文件夹,在其中导入数据 load data local inpath '/opt/module/hive/datas/dept.txt' into table dept_partition partition(dt='2022-06-14');
分区表就是先创建文件夹,然后在文件夹中写入数据
换句话说,分区表就是将一张大表分成若干个文件夹进行管理
2)插入数据
insert overwrite table dept_partition partition(dt='2022-06-17') select deptno, dname, loc from dept;
insert overwrite table dept_partition select deptno, dname, loc, '2022-06-18' from dept;
2.2 操作数据
1)查看分区数
show partitions dept_partition;
2)查询指定分区
select * from dept_partition where dt='2022-06-14';
3)增加/删除分区
alter table dept_partition add partition(dt='2022-06-19'); alter table dept_partition drop partition(dt='2022-06-19');
ps.也可以直接在liunx端输入命令增加分区
-- 将18号分区复制一份,命名为13号分区
hadoop fs -cp /user/hive/warehouse/dept_partition/dt=2022-06-18
/user/hive/warehouse/dept_partition/dt=2022-06-13
ps..如果直接在网页端新建文件夹,终端不会显示新建的分区,必须修复
msck repair table dept_partition;
3. 二级分区表
就是大文件夹套小文件夹
3.1 创建分区表
create table dept_partition2(
deptno int,
dname string,
loc int
)
partitioned by (month string, day string) // month为父目录,day为子目录
row format delimited fields terminated by '\t';3.2 插入数据
load data local inpath '/opt/module/hive/datas/dept.txt' into table dept_partition2 partition(month='2022-06', day='15');
insert into dept_partition2 partition(month='2022-06',day='15') select deptno, dname, loc from dept;
4.动态分区
普通数据无法直接转化为分区表,只能先新建新的分区表,再将旧数据插入这个新的分区表
1)创建分区表
create table emp_par(
empno int,
ename string,
job string,
salary decimal(16,2)
) partitioned by (deptno int)
row format delimited fields terminated by '\t';2)然后将数据插入这张分区表
方式一:一个分区一个分区的插入
insert into emp_par partition(deptno=10) select empno,ename,job,sal from emp where deptno=10; //然后是11,12...
方式二:动态分区一次搞定
insert overwrite table emp_par // 不用指定分区 select empno,ename,job,sal,deptno from emp; //直接把deptno写到这里
5.分桶表
核心语句:
clustered by (a) sorted by (b) into 4 buckets //按照a分了4个桶,桶内按照b排序
5.1 新建分桶表
create table stu_buck(
id int,
name string
)
clustered by (id) sorted by (id) into 4 buckets //根据id的hash值按4取模
row format delimited fields terminated by '\t';查看
select * from stu_buk

可以发现分成了四个区
ps.分桶的意义:在取数的时候可以直接数据定位所在的桶,然后方便遍历,查询更高效
5.2 插入数据
load data inpath '/datas/student.txt' into table stu_buck;
ps.不能用本地模式,必须用hdfs模式
insert overwrite table stu_buck select id,name from stu_ex;
5.3 既分区有分桶
create table stu_par_buck(
id int,
name string
)
partitioned by (dt string) // 先创建文件夹
clustered by (id) sorted by (id desc) into 4 buckets //然后内部分桶
row format delimited fields terminated by '\t';插入数据:
与普通的一样
insert into stu_par_buck select id, name, '2022-06-14' from stu_ex;
6 分区与分桶的区别
主键适合拿来分桶,而普通的列适合拿来分区(一般为日期)
分桶是文件,分区是文件夹
到此这篇关于MySQL分区表和分桶表的操作详解的文章就介绍到这了,更多相关MySQL分区表和分桶表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
java实现插入mysql二进制文件,blob类型,遇到问题及解决办法
mysql插入二进制文件,blob类型,遇到问题及解决办法2009-06-06
mysql日志文件General_log和Binlog开启及详解
MySQL中的数据变化会体现在上面日志中,下面这篇文章主要给大家介绍了关于mysql日志文件General_log和Binlog开启及详解的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下2022-07-07
Prometheus 插件mysql_exporter安装过程
mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的,mysql_exporter需要连接到数据库并有相关权限,这篇文章主要介绍了Prometheus插件安装(mysql_exporter),需要的朋友可以参考下2023-06-06
Linux上安装Mysql、Redis、Nginx的详细步骤记录
这篇文章主要介绍了Linux上安装Mysql、Redis、Nginx的详细步骤,包括下载、安装、配置和设置开机自启等过程,文中通过代码介绍的非常详细,需要的朋友可以参考下2025-04-04
MySQL 使用 ORDER BY 排序和 DELETE 删
这篇文章主要介绍了MySQL 使用 ORDER BY 排序和 DELETE 删除记录的操作过程,即数据库查询与数据操作,本文通过示例代码给大家介绍的非常详细,需要的朋友参考下吧2023-11-11
Windows下修改mysql的data文件夹存放位置的方法
这篇文章主要介绍了在Windows下修改mysql的data文件夹存放位置的方法,需要的朋友可以参考下2014-03-03
MySQL 5.6.51 解压版(zip版)安装配置图文方法
这两天刚试用了一下MySQL5.6.51,感觉还不错,有兄弟戏称是一个高富帅版本。现将MySQL5.6.51 zip解压版本的安装配置过程记录如下,希望能给需要安装该版本的朋友一点参考作用2015-08-08


最新评论