
hive分区、分桶、视图、侧视图
发布日期:2021-05-10 03:44:32
浏览次数:24
分类:精选文章
本文共 2167 字,大约阅读时间需要 7 分钟。
hive分区
在大数据处理中,分区表是hfds文件系统中常用的逻辑组织方式。分区表将一个大数据集按照业务需求划分为若干独立的分区,每个分区包含特定范围的数据文件。这在查询时可显著提升效率,因为只需访问特定的分区文件就能快速获取所需数据。
创建分区表(静态分区)
在hive中创建分区表的关键在于使用PARTITIONED BY关键字。以下是一个简单的创建实例:
```raw create table dept_par(deptno int, dname string, loc string) partitioned by (day string) row format delimited fields terminated by ‘\t’; load data local inpath ‘/opt/data/dept1.txt’ into table dept_par partition(day=‘2020-10-25’); load data local inpath ‘/opt/data/dept1.txt’ into table dept_par partition(day=‘2020-10-26’); load data local inpath ‘/opt/data/dept1.txt’ into table dept_par partition(day=‘2020-10-27’); ```分区查询
指定分区查询可以通过WHERE子句实现。例如,查询特定日期的数据:
```sql select * from dept_par where day=‘2020-10-25’; ```动态分区
hive支持动态分区,允许在查询时自动划分分区。为了实现动态分区,可以在查询前设置以下参数:
```bash set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; set hive.mapred.mode=nonstrict; set yarn.scheduler.minimum-allocation-mb=1024; set hive.exec.max.dynamic.partitions.pernode=20000; ```hive分桶
分桶(Bucketing)是将数据按照特定列的值进行哈希分布到多个桶中,使数据存储更加均匀。与分区不同,分桶是基于文件的组织方式。以下是一个分桶表的创建示例:
```sql create table stu_buck(id int, name string) clustered by (id) into 4 buckets row format delimited fields terminated by ‘\t’; load data local inpath ‘/opt/data/stu.txt’ into table stu_buck; ```分桶规则
每条记录都会根据分桶字段的值计算哈希值,并按模运算确定其存储桶。默认情况下,分桶字段必须是表中已有的列,且分桶的个数最好为2的n次方。
抽样
抽样是一种有效的数据获取策略,可以根据需要从大数据集中快速获取代表性样本。推荐使用以下命令进行列指定抽样:
```sql select * from table_name tablesample(bucket 3 out of 32 on id) s; ```区别
分区与分桶的主要区别在于数据组织方式:
- 分区基于文件路径,文件夹包含分区数据。 - 分桶基于特定列,数据分布在多个文件中。分桶支持伪分桶(在reduce任务数量与桶数不一致时),但建议设置reduce任务数量与桶数一致以提升效率。
视图
视图是一种虚拟表,通过子查询、连接和函数逻辑定义在现有表数据上。其特点包括:
- 只定义视图,不存储数据。 - 删除或修改基础表会影响视图。 - 视图是只读的,不能插入数据。视图操作
- 创建视图:`create view 视图名 as select ...;` - 查询视图:`show views;` - 删除视图:`drop view 向量ORIZON;` - 更改视图:`alter view 视图名 set tblproperties('comment'='...');`辅助函数
分区和分桶中常用到的辅助函数包括:
- `LATERAL VIEW`: 用于将结果与数据连接,使其成为查询的一部分。 - `SPLIT`: 按字符或正则表达式切分字符串。 - `EXPLODE`: 将数组或多值字段展开为多行记录。以下是一个实际使用示例:
```sql select rename, age from demo lateral view explode(split(name,’,’)) demo as rename; ```总结
在实际应用中,分区和分桶是hive中常用的优化手段。选择适合的分区方式(静态或动态)和分桶策略,能够显著提升查询效率。同时,视图的合理使用可以帮助简化复杂查询和保护数据隐私。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月10日 19时30分38秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Error:scalac: bad option: '-make:transitive'
2019-03-14
微软xp壁纸rgb
2019-03-14
浏览器刷新页面
2019-03-14
代码错误信息,微信报错
2019-03-14
easyui日期处理(开始时间和结束时间)
2019-03-14
WPF画椭圆
2019-03-14
XMLHttpRequest对象的一个简单运用示例
2019-03-14
java文件上传
2019-03-14
DHCP跨网段分配IP地址
2019-03-14
10.多线程与并行
2019-03-14
Callable中call方法和Runnable中run方法的区别
2019-03-14
IDEA上移除项目(逻辑删除)
2019-03-14
Docker方式启动tomcat,访问首页出现404错误
2019-03-14
【蓝桥杯】 java 大学c组 省赛 1、隔行变色
2019-03-14
BIM轻量化——浏览器展示 | 利用unity
2019-03-14
超市账单管理系统
2019-03-14
Springboot实现热部署
2019-03-14
composer 介绍、安装及基本使用方法
2019-03-14
PHP 的 ::class 用法
2019-03-14