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);

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

相关推荐

  1. Hive优化(1)——采样

    2024-05-11 19:52:08       11 阅读
  2. Hive

    2024-05-11 19:52:08       20 阅读
  3. Hive动态区和

    2024-05-11 19:52:08       38 阅读
  4. hive--索引(初篇)

    2024-05-11 19:52:08       15 阅读
  5. hive区和你熟悉吗?

    2024-05-11 19:52:08       22 阅读
  6. Hive-分区与详解(超详细)

    2024-05-11 19:52:08       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-11 19:52:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-11 19:52:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-11 19:52:08       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-11 19:52:08       20 阅读

热门阅读

  1. Django调用SECRET_KEY对数据进行加密

    2024-05-11 19:52:08       10 阅读
  2. 905. 按奇偶排序数组

    2024-05-11 19:52:08       11 阅读
  3. vue2 与vue3的差异汇总

    2024-05-11 19:52:08       10 阅读
  4. SpringBoot MybatisPlus 配置动态表名&多数据源

    2024-05-11 19:52:08       7 阅读
  5. MacOS安装Go

    2024-05-11 19:52:08       10 阅读
  6. MySQL中获取指定日期区间内所有日期

    2024-05-11 19:52:08       9 阅读
  7. 面向过程和面向对象

    2024-05-11 19:52:08       11 阅读
  8. C++ 一款纯C实现的打砖块小游戏

    2024-05-11 19:52:08       10 阅读
  9. 如何设计与管理一个前端项目

    2024-05-11 19:52:08       12 阅读