MySQL分区表和分桶表的操作详解

 更新时间:2023年05月11日 11:59:26   作者:菠萝橡皮刀  
这篇文章主要介绍了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分区表和分桶表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql Sql 语句练习题(50道)

    Mysql Sql 语句练习题(50道)

    mysql一直作为比较热门的数据库存储,搭配php使用简直是绝配,mysql的sql语句也是很重要的一门课,这里为大家分享一下sql语句,大家可以试试
    2020-12-12
  • mysql 5.7.12 winx64安装配置方法图文教程

    mysql 5.7.12 winx64安装配置方法图文教程

    这篇文章主要为大家分享了mysql 5.7.12winx64安装配置方法图文教程,感兴趣的朋友可以参考一下
    2016-05-05
  • MySQL中interactive_timeout和wait_timeout的区别

    MySQL中interactive_timeout和wait_timeout的区别

    这篇文章主要介绍了MySQL中interactive_timeout和wait_timeout的区别,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • MySQL 8.0数据字典的初始化与启动流程

    MySQL 8.0数据字典的初始化与启动流程

    数据字典(Data Dictionary, DD)用来存储数据库内部对象的信息,这些信息也被称为元数据(Metadata),包括schema名称、表结构、存储过程的定义等,本文主要介绍MySQL 8.0数据字典的基本概念和数据字典的初始化与启动加载的主要流程,需要的朋友可以参考下
    2024-06-06
  • mysql8.0无法使用group by的问题及解决

    mysql8.0无法使用group by的问题及解决

    这篇文章主要介绍了mysql8.0无法使用group by的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • mysql中一个普通ERROR 1135 (HY000)错误引发的血案

    mysql中一个普通ERROR 1135 (HY000)错误引发的血案

    ERROR 1135 (HY000): Can’t create a new thread (errno 11);if you are not out of available memory,you can consult the manual for a possible OS-dependent bug
    2015-08-08
  • MySQL如何解决幻读问题

    MySQL如何解决幻读问题

    在高并发数据库系统中,需要保证事务与事务之间的隔离性,还有事务本身的一致性。所以需要解决幻读问题,本文就来介绍一下,感兴趣的可以了解一下
    2021-08-08
  • MySQL server has gone away错误提示解决方法

    MySQL server has gone away错误提示解决方法

    今天遇到类似的情景,MySQL只是冷冷的说:MySQL server has gone away。
    2008-11-11
  • mysql常用命令大全 mysql常用命令总结

    mysql常用命令大全 mysql常用命令总结

    本文介绍下,mysql中常用的一些命令,包括创建与修改数据库、数据库中的表,mysql的权限管理命令grant、revoke等的用法。有需要的朋友参考下
    2014-01-01
  • MySql explain命令返回结果详细介绍

    MySql explain命令返回结果详细介绍

    explain 是MySql提供的SQL语句查询性能的工具,是我们优化SQL的重要指标手段,要看懂explain返回的结果集就尤为重要,这篇文章主要介绍了MySql explain命令返回结果解读,需要的朋友可以参考下
    2023-09-09

最新评论