ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hive的分区和分桶

2021-04-13 19:30:15  阅读:164  来源: 互联网

标签:string 分桶 students 分区 Hive 分区表 table 数据


1.Hive的分区

分区的概念和分区表: 分区表指的是在创建表时指定分区空间,实际上就是在hdfs上表的目录下再创建子目录。 在使用数据时如果指定了需要访问的分区名称,则只会读取相应的分区,避免全表扫描,提高查询效率。Hive的分区分为静态分区和动态分区两种方式:

1)静态分区

首先创建分区表

create table students_pt
(
id bigint,
name string,
age int,
gender string,
clazz string
)
PARTITIONED BY(pt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

创建数据源有一张原始数据表 

create table  students (
    id bigint,
    name string,
    age int,
    sex string,
    clazz string
)
row format delimited fields terminated by ',';

向students中导入数据:

采用load data 的方式导入数据

load data local inpath'/usr/local/soft/datapackage/students.txt' into table students;

得到一个有数据的students表

开始导入分区数据

insert into table students_pt partition(pt='20210413') select * from students;

得到一个分区表

最后一栏会新增一个pt 的分区数据,在数据查询的过程中,用于过滤筛选,避免全局扫描.同时,在UI界面中可以看出,Hive分区会在原来的表中新建一个子目录里面存着分区的数据

2)动态分区

开启动态分区需要手动开启支持

set hive.exec.dynamic.partition=true;  //打开动态分区

set hive.exec.dynamic.partition.mode=nostrict; //设置分区的模式为不严格模式

set hive.exec.max.dynamic.partitions.pernode=1000; //设置分区的最大个数为1000个

需要创建一个原始表,并载入数据

create table  students (
    id bigint,
    name string,
    age int,
    gender string,
    clazz string,
    pt string
)
row format delimited fields terminated by ',';

建立动态分区表,

//建立分区并加载数据
create table students_dt_p
(
id bigint,
name string,
age int,
gender string,
clazz string
)
PARTITIONED BY(dt string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

向动态分区表中插入数据

insert into table students_dt_p partition(dt) select id,name,age,gender,clazz,dt from students;

得到一个以相同dt为一个分区的分区表

完成自动分区.

2.Hive的分桶

在往分桶中插入数据的时候,会根据 clustered by 指定的字段 进行hash分组 对指定的buckets 个数进行取余进而可以将数据分割成buckets个数文件,以达到是数据均匀分布,方便我们对数据抽取样数据,提高join 效率,合理的分桶会有效降低数据的倾斜问题,指定一个数值的bucket,会根据指定的数值划分出相应的桶.

set hive.enforce.bucketing=true; //开启数据分桶

创建分桶表

create table students_buks
(
id bigint,
name string,
gender string,
age int,
clazz string
)
clustered by (clazz) into 12 buckets
row format delimited fields terminated by ',';

向分桶表中导入数据

insert into  students_buks select  *  from students;

 

 

 

 

 

 

 

标签:string,分桶,students,分区,Hive,分区表,table,数据
来源: https://blog.csdn.net/qq_42155078/article/details/115674989

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有