今天讲讲分区表和分桶表,前面的文章还没看的可以点击链接:

hive从入门到放弃(一)——初识hive

hive从入门到放弃(二)——DDL数据定义

hive从入门到放弃(三)——DML数据操作

分区

分区可以提高查询效率,实际上 hive 的一个分区就是 HDFS 上的一个目录,目录里放着属于该分区的数据文件。

分区的基本操作

创建分区表

create table partition_table(
col1 int,
col2 string
)
partitioned by (part_col string)
row format delimited fields terminated by '\t';

*分区字段不能是表中字段

创建完分区表如果需要将数据导入表中,需要用 load 命令导入;

 load data local inpath
'/data_dir/data_file' into table partition_table
partition(part_col='20220331');

如果是在 HDFS 中创建目录并将数据文件传到目录中,是没办法查到的,因为查询分区表是需要查询元数据的;

如果非要用这种方法或者已经做了,可以执行修复命令: msck repair table table_name;

查看分区

show partitions partition_table;

查询

select * from partition_table where part_col='20220331';

添加分区

alter table partition_table add partition(part_col='20220331');

删除分区

alter table partition_table drop partition(part_col='20220331');

二级分区

二级分区相当于在一级分区对应的目录上新增一个目录,一般用于单个分区数据量很大,需要做拆解的情况。

创建二级分区表

create table partition_table(
col1 int,
col2 string
)
partitioned by (part_col1 string, part_col2 string)
row format delimited fields terminated by '\t';

二级分区表的其它操作与一级的区别不大,因此不做过多的描写。

动态分区

关系型数据库中,对分区表 Insert 数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中

Hive 中也提供了类似的机制,即动态分区(Dynamic Partition),不过使用 Hive 的动态分区需要进行相应的配置。

开启动态分区功能(默认 true,开启)

hive.exec.dynamic.partition=true

设置为非严格模式

hive.exec.dynamic.partition.mode=nonstrict

默认 strict,表示至少指定一个分区为静态分区,nonstrict 表示允许所有的分区字段都能使用动态分区。

所有执行 MR 的节点上,最大一共可以创建多少个动态分区。默认 1000

hive.exec.max.dynamic.partitions=1000

每个执行 MR 的节点上,最大可以创建多少个动态分区。比如源数据中包含了一年的数据,即 day 字段有 365 个值,那么该参数就

需要设置成大于 365,如果使用默认值 100,则会报错。

hive.exec.max.dynamic.partitions.pernode=100

动态插入数据到分区

insert into partition_table partition(part_col) select * from table_name;

分桶

分区提高了数据的查询效率,同时还能将数据隔离开,但是并非所有数据能形成合理的分区。

hive可以将数据进行分桶,不同于分区是针对存储路径进行分类,分桶是在数据文件中对数据进行划分的一种技术。

分桶是指定某一列,让该列数据按照哈希取模的方式随机、均匀的分发到各个桶文件中。

创建分桶表

-- 分 6 个桶的分桶表
create table bucket_table(col1 int, col2 string)
clustered by(col1)
into 6 buckets
row format delimited fields terminated by '\t';

加载数据

加载数据到分桶表中可以使用 load 或者 insert 的方式。

需要注意的是,reduce 的个数设置应该为-1,让 Job 自行决定需要用多少个 reduce 或者将 reduce 的个

数设置为大于等于分桶表的桶数。

抽样

对于非常大的数据集,有时用户需要使用的是一个具有代表性的查询结果而不是全部结

果。Hive 可以通过对表进行抽样来满足这个需求。

语法:tablesample(bucket x out of y)

select * from bucket_table tablesample(bucket 1 out of 3 on col1);

y必须是table总共bucket数的倍数或者因子。

上面的语句表示:对于分桶数为 6 的表,总共抽取 6/y = 6/3 = 2 个bucket的数据,

分别为第 x=1 个 bucket 和第 x+3=4 个 bucket 的数据。

小结

本文简单介绍了 hive 的分区,包括如何创建分区表、新建分区和删除分区,还有二级分区和动态分区;以及分桶表,包括分桶表的概念和抽样函数。

持续关注不迷路,转载请注明出处! —— 大数据的奇妙冒险

hive从入门到放弃(四)——分区与分桶的更多相关文章

  1. hive从入门到放弃(二)——DDL数据定义

    前一篇文章,介绍了什么是 hive,以及 hive 的架构.数据类型,没看的可以点击阅读:hive从入门到放弃(一)--初识hive 今天讲一下 hive 的 DDL 数据定义 创建数据库 CREAT ...

  2. hive从入门到放弃(三)——DML数据操作

    上一篇给大家介绍了 hive 的 DDL 数据定义语言,这篇来介绍一下 DML 数据操作语言. 没看过的可以点击跳转阅读: hive从入门到放弃(一)--初识hive hive从入门到放弃(二)--D ...

  3. hive从入门到放弃(一)——初识hive

    之前更完了<Kafka从入门到放弃>系列文章,本人决定开新坑--hive从入门到放弃,今天先认识一下hive. 没看过 Kafka 系列的朋友可以点此传送阅读: <Kafka从入门到 ...

  4. HIVE—索引、分区和分桶的区别

    一.索引 简介 Hive支持索引,但是Hive的索引与关系型数据库中的索引并不相同,比如,Hive不支持主键或者外键. Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如减少MapRed ...

  5. hive -- 分区,分桶(创建,修改,删除)

    hive -- 分区,分桶(创建,修改,删除) 分区: 静态创建分区: 1. 数据: john doe 10000.0 mary smith 8000.0 todd jones 7000.0 boss ...

  6. Hive动态分区和分桶(八)

    Hive动态分区和分桶 1.Hive动态分区 1.hive的动态分区介绍 ​ hive的静态分区需要用户在插入数据的时候必须手动指定hive的分区字段值,但是这样的话会导致用户的操作复杂度提高,而且在 ...

  7. Hive 教程(四)-分区表与分桶表

    在 hive 中分区表是很常用的,分桶表可能没那么常用,本文主讲分区表. 概念 分区表 在 hive 中,表是可以分区的,hive 表的每个区其实是对应 hdfs 上的一个文件夹: 可以通过多层文件夹 ...

  8. 【HIVE】(2)分区表、二级分区、动态分区、分桶、抽样

    分区表: 建表语句中添加:partitioned by (col1 string, col2 string) create table emp_pt(id int, name string, job ...

  9. Hive里的分区、分桶、视图和索引再谈

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

随机推荐

  1. VMware虚拟机三种网络模式

    VMware三种网络模式 在学习中经常遇到Vmware虚拟机网络设置有问题,可能是因为你没有理解这三种网络模式的工作原理.VMware虚拟机常见的网络类型有bridged(桥接).NAT(地址转换). ...

  2. mysql事务、隔离级别

    一.事务简介 事务是一组操作的集合,它是一一个不可分割的工作单位,事务会把所有的操作作为- -个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败. 二.有关事务操作 mysql中 ...

  3. 两天两夜,1M图片优化到100kb!

    坦白从宽吧,我就是那个花了两天两夜把 1M 图片优化到 100kb 的家伙--王小二! 自从因为一篇报道登上热搜后,我差点抑郁,每天要靠 50 片安眠药才能入睡. 网络上曝光的那些关于一码通的消息,有 ...

  4. 『现学现忘』Docker基础 — 10、Docker的安装

    目录 1.前提 2.通过yum安装Docker (1)更新yum包 (2)移除旧的Docker版本 (3)安装必须的软件包 (4)设置稳定yum源仓库 (5)更新yum软件包索引 (6)开始安装Doc ...

  5. pygame写俄罗斯方块

    代码搬运修改自python编写俄罗斯方块 更新时间:2020年03月13日 09:39:17 作者:勤勉之 from tkinter import * from random import * imp ...

  6. 3. Java基础

    3.Java基础[基于IDEA] 3.1.快捷键 psvm 创建主方法 sout 打印 ctrl+d 复制当前行到下一行 alt+ender 创建局部变量,类: 3.2.注释,标识符,关键字 注释 平 ...

  7. 防止SQL 注入;如何进行防SQL 注入。

    防止SQL 注入:1.开启配置文件中的magic_quotes_gpc 和magic_quotes_runtime 设置2.执行sql 语句时使用addslashes 进行sql 语句转换3.Sql ...

  8. 背包四讲 (AcWing算法基础课笔记整理)

    背包四讲 背包问题(Knapsack problem)是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高 ...

  9. PMP之挣值管理(PV、EV、AC、SV、CV、SPI、CPI)的记忆方法

    挣值管理法中的PV.EV.AC.SV.CV.SPI.CPI这些英文简写相信把大家都搞得晕头转向的.在挣值管理法中,需要记忆理解的有三个参数:PV.AC.EV. PV:计划值,在即定时间点前计划完成活动 ...

  10. ZYNQ使用ymodem协议传输文件

    SDK: V2014.4 协议: Ymodem 工具: USB转UART转接线.xshell6软件 可实现各种文件传输,大小不限,只是速度很慢 参考原代码如下: /****************** ...