我是靠谱客的博主 沉静小天鹅,最近开发中收集的这篇文章主要介绍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

--创建测试表
create table test_db.table_test_a(num int,nameid string);
create table test_db.table_test_b(nameid string,name string);
--插入测试表数据 左表
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;

在这里插入图片描述

--插入测试表数据 右表
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;

在这里插入图片描述

--正常左关联
select * from test_db.table_test_a a 
left join test_db.table_test_b b 
on a.nameid = b.nameid;

在这里插入图片描述

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

在这里插入图片描述

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;

在这里插入图片描述

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优化实战所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部