我是靠谱客的博主 沉静小天鹅,这篇文章主要介绍hive优化实战,现在分享给大家,希望可以做个参考。

hive超大数据量优化

    • hive超大数据量优化:
      • 原理:
      • 实现:

hive超大数据量优化:

原理:

左表关联字段key使用随机函数拼接n个整数,打散key,减少每个key生成reduce的个数,右表翻n倍,关联后产生大量key的reduce被分散到n个reduce里面。

实现:

使用随机函数rand(),实例为int(round(rand()))随机生成0和1整数,
左表(总数据量n)关联字段拼接随机数0-1两个,concat(a.nameid,int(round(rand())))
右表数据量翻1倍(关联字段nameid数据a拼接0a0(总数据量n),a拼接1a1(总数据量2n)),on后面的关联为on concat(a.nameid,int(round(rand()))) = b.nameid

复制代码
1
2
3
4
--创建测试表 create table test_db.table_test_a(num int,nameid string); create table test_db.table_test_b(nameid string,name string);
复制代码
1
2
3
4
--插入测试表数据 左表 insert into test_db.table_test_a values(1,'a'),(1,'a'),(2,'b'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(5,'e'),(5,'e'); select * from test_db.table_test_a;

在这里插入图片描述

复制代码
1
2
3
4
--插入测试表数据 右表 insert into test_db.table_test_b values('a','A'),('b','B'),('c','C'),('d','D'),('e','E'); select * from test_db.table_test_b;

在这里插入图片描述

复制代码
1
2
3
4
5
--正常左关联 select * from test_db.table_test_a a left join test_db.table_test_b b on a.nameid = b.nameid;

在这里插入图片描述

复制代码
1
2
3
4
select * from test_db.table_test_a a left join test_db.table_test_b b on concat(a.nameid,int(round(rand()))) = concat(b.nameid,int(round(rand())));

在这里插入图片描述

复制代码
1
2
3
4
5
create table test_db.table_test_c(nameid string,name string); insert into test_db.table_test_c values('a0','A'),('b0','B'),('c0','C'),('d0','D'),('e0','E'); insert into test_db.table_test_c values('a1','A'),('b1','B'),('c1','C'),('d1','D'),('e1','E'); select * from test_db.table_test_c;

在这里插入图片描述

复制代码
1
2
3
4
select * from test_db.table_test_a a left join test_db.table_test_c b on concat(a.nameid,int(round(rand()))) = b.nameid;

在这里插入图片描述

最后

以上就是沉静小天鹅最近收集整理的关于hive优化实战的全部内容,更多相关hive优化实战内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部