我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

可以发现分成了四个区

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分区表和分桶表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

目录1.创建分区表2.增删改查操作2.1 yWiKVprfOU插入数据2.2 操作数据3. 二级分区表3.1 创建分区表3.2 插入数据4.动态分区5.分桶表5.1 新建分桶表5.2 插入数据5.3 既分区有分桶6 分区与分桶的区别1.创建
2023-05-12

hive分区表和分桶表有什么区别

Hive分区表和分桶表是两种数据存储和管理的方式,有以下区别:分区表:在Hive中,分区表是按照指定的列值进行分区存储数据的表,可以根据分区列的值来快速检索和查询数据。分区表的数据存储在不同的目录中,方便管理和维护。分区表可以提高查询性能,
hive分区表和分桶表有什么区别
2024-03-01

详解MySQL分区表

前言: 分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲,分区的表和没有分区的表是一样的。换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整理。本篇文章给大家带来的内容是关于MyS
2022-05-27

Mysql临时表及分区表区别详解

临时表与内存表 内存表,指的是使用Memory引擎的表,建表语法是create table … engine=memory。这种 表的数据都保存在内存,系统重启的时候会被清空,但是表结构还在。除这两个特性看 上去比较“奇怪”外,从其他的特征
2022-05-26

MySQL:分库分表与分区的区别和思考

一.分分合合 说过很多次,不要拘泥于某一个技术的一点,技术是相通的。重要的是编程思想,思想是最重要的。当数据量大的时候,需要具有分的思想去细化粒度。当数据量太碎片的时候,需要具有合的思想来粗化粒度。 1.1 分 很多技术都运用了分的编程思想,这里来举几个例子,
MySQL:分库分表与分区的区别和思考
2017-07-09

mysql死锁和分库分表问题详解

记录生产mysql的问题点。 业务场景与问题描述请求一个外部接口时,每天的请求量在900万左右。 分为请求项目和回执这两个项目。请求是用来调用外部接口,回执是接收发送的接口。 在发送请求前会先插入数据库。 在请求后,如果接口返回调用失败,会
2022-06-01

PostgreSQL12.5中分区表的一些操作实例

目录1、创建一个有DEFAULT的分区表1、先创建主表2、如果没有创建分区就直接插入数据会报错3、创建分区4、查看分区情况2、有default 分区,再加分区解决办法:3、没有default的分区4、给分区表ddl4.1、在原来没有主键的分
2022-08-12

编程热搜

目录