Hive--桶表

1. 为什么要使用桶表???

  • 单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用分桶技术将数据更细粒度的划分和管理。
  • 分区提供了一个隔离数据和优化查询的便利的方式.但是当分区的数量过多时,会产生过多的小分区,这样会给namenode带来较大的压力.分桶是将数据集分解成更容易管理的若干部分的另一个技术。

2. 桶表分桶规则

  • 个人理解桶表的分桶类似于MapReduce的默认分区规则–HashPartitioner差不多,桶表的分区则是通过分桶的字段进行Hash然后除以桶的个数,然后取余数,余数决定数据是在哪个桶内。
  • 桶表本质上面并不会改变目录结构,桶表输出的文件个数等于桶的数量。

3. 桶表的创建

3.1 DLL
create table score_bucket (
`year` int, 
`course` string, 
`student` string, 
`score` int
)
comment 'score 分桶表'
clustered by (year) sorted by (score desc) into 3 buckets
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
3.2 数据
2018,语文,A,67
2018,英语,A,56
2018,数学,A,69
2018,语文,B,67
2018,英语,B,72
2018,数学,B,56
2019,语文,A,72
2019,英语,A,51
2019,数学,A,83
2019,语文,B,53
2019,英语,B,70
2019,数学,B,52
2020,语文,A,75
2020,英语,A,60
2020,数学,A,90
2020,语文,B,60
2020,英语,B,80
2020,数学,B,70
3.3 DML
hive> set hive.strict.checks.bucketing=false;
hive> load data local inpath '/home/work/data/hive/score.txt' overwrite into table score_bucket
Hive是一个基于Hadoop的数据仓库工具,它允许用户对存储在Hadoop分布式文件系统中的大量数据进行处理和分析。Hive支持创建(Bucketed Table)和分区(Partitioned Table),用于优化查询性能和资源管理。 **示例**: 假设有一个用户行为日志`user_behavior`,我们将其作为,通过用户的ID(id)进行分,每个包含一天的行为记录,可以使用以下创建语句: ```sql CREATE TABLE user_behavior ( id INT, action STRING, timestamp TIMESTAMP) CLUSTERED BY (id) INTO 7 BUCKETS; ``` 这里的`CLUSTERED BY`语句指定了分键(bucketing key)为`id`,共分为7个。 **分区示例**: 如果按日期进一步分区,可以创建如下的分区: ```sql CREATE TABLE user_behavior ( ... columns ... ) PARTITIONED BY (dt STRING, month INT) LOCATION '/path/to/data'; ``` 这里按照日期`dt`和月份`month`进行分区。 **联合查询分析**: 当我们需要从多个时间范围或地区获取用户行为时,可以通过联接(JOIN)操作结合和分区: ```sql SELECT ub.id, ub.action, pu.month FROM bucket_table ub JOIN partition_table pu ON ub.dt = pu.dt AND ub.month = pu.month; ``` 这个查询会根据分区键找到对应的,然后合并结果。 **考察函数**: 可能会考察的Hive函数有聚合函数(如COUNT(), SUM(), AVG())、日期函数(如DATE_TRUNC('day', dt))以及字符串函数(如LEFT(), RIGHT())等。 **考试题**: 1. 如何利用Hive进行跨分区的查询优化? 2. 当查询涉及多个和分区时,如何设计结构以提高查询效率? 3. 解释Hive如何通过和分区联合查询来加速大数据分析?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值