hive 学习笔记(二)分桶操作

create table dept01 (deptno int , dname string,loc string)
row format delimited fields terminated by '\t';

load data local inpath '/home/hadoop/data/dept.txt' overwrite into table default.dept01;
上传文件
dfs -put /home/hadoop/data/dept.txt /user/hive/warehouse;
加载
load data  inpath '/user/hive/warehouse/dept.txt'  into table default.dept01;

加载数据覆盖表中已有数据:
上传文件到HDFS
dfs -put /home/hadoop/data/student01.txt /user/hive/warehouse;
加载数据覆盖表中已有数据:
load data  inpath '/user/hive/warehouse/student01.txt'  overwrite into table default.dept01;

数据导出:
insert overwrite local directory '/home/hadoop/data/export/dept01'
select * from dept01;

insert overwrite local directory '/home/hadoop/data/export/dept02'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '\n'
select * from dept01;格式化数据

导出到HDFS:
insert overwrite directory '/user/hive/warehouse/student2'
row format delimited fields terminated by '\t' collection items terminated by '\n'
select * from student;

分桶表数据存储
创建分桶表
create table stu_buck(id int,name string) clustered by(id) into 4 buckets row format delimited fields terminated by '\t';
desc formatted stu_buck;

load data local inpath '/home/hadoop/data/03.txt'  into table stu_buck;
load data local inpath '/home/hadoop/data/03.txt'  into table stu_buck;

创建分桶表,数据通过子查询的方式导入
先创建普通表stu
create table stu(id int ,name string) row format delimited fields terminated by '\t';
普通表导数据
load data local inpath '/home/hadoop/data/student03.txt'  into table stu;
清空分桶表中的数据
truncate table stu_buck;
导入数据到分桶中:
insert into table stu_buck select id ,name from stu cluster by(id);
为什么还是只有一个分区,我们需要设置属性
set hive.enforce.bucketing=true;
set mapreduce.job.reduces=-1;
清空分桶表中的数据
truncate table stu_buck;
导入数据到分桶中:
insert into table stu_buck select id ,name from stu cluster by(id);

数据最终存在不同的文件中,注意:分区是建立文件夹存储数据,分桶是建立文件
分桶抽样查询:
对于非常大的数据集,用户有时需要一个具有代表性的查询结果而不是全部,可以同桶进行抽样查询满足
select * from stu_buck TABLESAMPLE(bucket 1 out of 4 on id);
1,4 x,y 根据y大小决定抽样比例,总共4份数据,当y=2抽取(4/2)2个桶的数据
注意:x必须小于y
否则报错:FAILED: SemanticException [Error 10061]: Numerator should not be bigger than denominator in sample clause for table stu_buck

按百分比抽样:
基于行数,按照输入路径下的数据的百分比进行抽样
select * from stu_buck tablesample (0.1 percent);

扫描二维码关注公众号,回复: 2774808 查看本文章

猜你喜欢

转载自blog.csdn.net/WJWFighting/article/details/81668939