Hive优化(1)——分桶采样

分桶(Bucketing)

分桶是将数据按照某个字段的哈希值进行分组存储的一种技术。它的原理是将数据按照指定字段的哈希值分成固定数量的桶,将每条记录分配到对应的桶中。分桶可以帮助优化特定类型的查询,例如连接查询和聚合操作,因为它可以将数据分布得更加均匀,减少数据倾斜,提高查询效率。

在Hive中创建分桶表时,需要使用CLUSTERED BY语句指定分桶字段,并且使用INTO语句指定桶的数量。例如:

CREATE TABLE bucketed_table ( column1 INT, column2 STRING, ... ) CLUSTERED BY (column1) INTO 4 BUCKETS;
use itcast;
create table tb_test(
id int,
name string
)
row format delimited fields terminated by ',';
insert into tb_test values
(1,'张三'),
(2,'李四'),
(3,'沙和尚'),
(4,'唐僧'),
(5,'孙悟空'),
(6,'猪八戒');

-- 分桶表
create table tb_test_buckets(
id int,
name string
)clustered by(id) into 6 buckets
row format delimited fields terminated by ',';
insert into tb_test_buckets values
(1,'张三'),
(2,'李四'),
(3,'沙和尚'),
(4,'唐僧'),
(5,'孙悟空'),
(6,'猪八戒');

采样(Sampling)

采样是从数据集中抽取部分样本数据进行分析和查询的一种技术。它可以帮助在大数据集上进行快速的试验和分析,而不需要处理整个数据集,从而节省时间和资源。在Hive中,可以使用TABLESAMPLE子句来进行采样查询。

SELECT * FROM table_name TABLESAMPLE(BUCKET x OUT OF y);

其中,x表示每个桶采样的概率,y表示桶的数量。这个语句会从数据表中按照指定的桶数和采样概率进行采样。

分桶采样

  1. 当表的数据量比较庞大的时候, 在编写SQL语句后, 需要首先测试 SQL是否可以正常的执行, 需要在表中执行查询操作, 由于表数据量比较庞大, 在测试一条SQL的时候整个运行的时间比较久, 为了提升测试效率, 可以整个表抽样出一部分的数据, 进行测试

  2. 校验数据的可行性(质量校验)

  3. 进行统计分析的时候, 并不需要统计出具体的指标, 可能统计的都是一些相对性指标, 比如说一些比率(合格率)问题, 此时可以通过采样处理。

tablesample ( bucket x out of y [on column|rand()])

Hive中的分桶和采样是优化查询性能的两种重要技术,它们可以帮助提高查询效率、减少资源消耗和加速数据处理。

分桶表:

取值数量 = 分桶数/y值

x值决定从哪个分桶文件开始取值

未分桶表:

1-按字段分桶 hash(字段)%y值=余数 相同余数放在一起

2-按照x值找余数对应的值 x=1 就找第一个余数 0 x=2 找第二个余数 1 x=3 找第三个余数 2


分桶采样的优化

分桶采样是将分桶和采样两种技术结合起来,可以在处理大数据集时更加高效地执行查询。通过在每个桶中进行采样,可以保证采样的数据分布更加均匀,避免了数据倾斜的问题。这样可以在保持查询效率的同时,减少了对资源的需求。

在Hive中,可以结合CLUSTERED BYTABLESAMPLE来进行分桶采样。例如:

SELECT * FROM bucketed_table TABLESAMPLE(BUCKET x OUT OF y);

这样可以在分桶的基础上对每个桶进行采样,从而达到更好的查询性能和资源利用。

相关推荐
老邓计算机毕设17 小时前
SSM学生选课系统xvbna(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·学生选课系统·ssm 框架·高校教学管理
枷锁—sha18 小时前
【PortSwigger Academy】SQL 注入绕过登录 (Login Bypass)
数据库·sql·学习·安全·网络安全
汇智信科18 小时前
智慧矿山和工业大数据解决方案“智能设备管理系统”
大数据·人工智能·工业大数据·智能矿山·汇智信科·智能设备管理系统
阿里云大数据AI技术18 小时前
Hologres Dynamic Table 在淘天价格力的业务实践
大数据·人工智能·阿里云·hologres·增量刷新
查士丁尼·绵19 小时前
hadoop集群存算分离
hive·hdfs·zookeeper·spark·hbase·yarn·galera
逍遥德20 小时前
PostgreSQL 中唯一约束(UNIQUE CONSTRAINT) 和唯一索引(UNIQUE INDEX) 的核心区别
数据库·sql·postgresql·dba
工业甲酰苯胺20 小时前
字符串分割并展开成表格的SQL实现方法
数据库·sql
科技块儿20 小时前
IP定位技术:游戏反外挂体系中的精准识别引擎
数据库·tcp/ip·游戏
衫水20 小时前
[特殊字符] MySQL 常用指令大全
数据库·mysql·oracle
卓怡学长20 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏