博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hive中行转换成列以及hive相关知识
阅读量:5355 次
发布时间:2019-06-15

本文共 1197 字,大约阅读时间需要 3 分钟。

Hive语句:Join应该把大表放到最后左连接时,左表中出现的JOIN字段都保留,右表没有连接上的都为空。对于带WHERE条件的JOIN语句,例如:1SELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key)2WHERE a.ds='2009-07-07' AND b.ds='2009-07-07'执行顺序是,首先完成2表JOIN,然后再通过WHERE条件进行过滤,这样在JOIN过程中可能会输出大量结果,再对这些结果进行过滤,比较耗时。可以进行优化,将WHERE条件放在ON后,例如:1SELECT a.val, b.val FROM a LEFT OUTER JOIN b2ON (a.key=b.key AND b.ds='2009-07-07' AND a.ds='2009-07-07')这个JOIN语句,会生成一个MR Job,在选择JOIN顺序的时候,数据量相比应该是b < c,表a和b基于a.key = b.key1进行连接,得到的结果(基于a和b进行连接的Key)会在Reducer上缓存在buffer中,在与c进行连接时,从buffer中读取Key(a.key=b.key1)来与表c的c.key进行连接。另外,也可以通过给出一些Hint信息来启发JOIN操作,这指定了将哪个表作为大表,从而得到优化。例如:1SELECT /*+ STREAMTABLE(a) */ a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1)上述JOIN语句中,a表被视为大表,则首先会对表b和c进行JOIN,然后再将得到的结果与表a进行JOIN。

  

hive优化

group by 数据倾斜

join数据倾斜

多个job并行(union all)

减少job个数

 

 

 

python代码

 

#!/bin/bash

import sys;

if __name__=='__main__':

for line in sys.stdin:
  m=line.strip().split('\t')
  print m[0],'\t','huaxue','\t',m[1]
  print m[0],'\t','shuxue','\t',m[2]
  print m[0],'\t','wuli','\t',m[3]

 

select transform(name,huaxue,shuxue,wuli) using 'python process.py' as (name,leibie,score) from wxl_t3;

转载于:https://www.cnblogs.com/wuxiangli/p/5818367.html

你可能感兴趣的文章
细学PHP 10 贴吧-2
查看>>
黑客攻防入门秘籍
查看>>
Swift迎来了1.0 GM 版(2014.09.09)
查看>>
【iOS开发-68】APP下载案例:利用tableView自带的cell布局+缓存池cell复用时注意button状态的检查...
查看>>
《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
查看>>
Java 编程下实现随机无重复数字功能
查看>>
Android 编程下的代码混淆
查看>>
animation属性
查看>>
页内的模块和组件抽象规划经验
查看>>
安全-分析深圳电信的新型HTTP劫持方式
查看>>
将Centos的yum源更换为国内的阿里云源
查看>>
git diff 的用法
查看>>
一段sql的优化
查看>>
十进制与十六进制的相互转换
查看>>
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>
POJ1062 昂贵的聘礼
查看>>
【零基础学习iOS开发】【02-C语言】08-基本运算
查看>>
Java 将指定字符串连接到此字符串的结尾 concat()
查看>>
Hibernate Criterion
查看>>