写JOIN的时候,将小表写在JOIN的前面,这样HIVE就会将小表载入内存,然后扫描大表。
如果表足够的小,就使用map join。
http://superlxw1234.iteye.com/blog/1582880
在处理海量数据时我们通常会对很多大表进行操作,基于Hadoop现在的局限性,不能像分布式并行数据库那样很好地在分布式环境利用数据局部性,Hadoop对于大表只能全表扫描并筛选数据,而每一次对大表的扫描都是苦不堪言的。(最后知道真相的我眼泪掉下来。。。)所以我们会用到在编码中经常用到的重构技巧,提取公共变量,在Hive中,就是创建临时表。
不支持 top level,以及各个select字段名称、属性必须严格一致
比如database arch的table1和database algo的table2 进行joinA: 可以,只要有用户有这两张表的select权限即可,用户需要用“database.table”的方式来指定数据库下的表
当数据量小的时候,本地执行比提交到集群上执行效率提升很大
set hive.exec.mode.local.auto=true(默认false)
当一个job满足如下条件才能真正使用本地模式:
用参数hive.mapred.local.mem(默认0)来设置local mode下mapper和reducer task jvm heap size
sum(t.shop_gmvcount + t.gmvcount_new + t.auc_shop_gmvcount + t.spu_gmv_cnt) gmv_cnt,这样的统计结果,当t.t.shop_gmvcount为null时,即使后面的t.gmvcount_new 不为null,那么总计的结果这个计算仍然是null;修改的方法是:采用sum(coalesce(t.shop_gmvcount,cast(0 as bigint)) + coalesce(t.gmvcount_new,cast(0 as bigint))这样的方式,coalesce函数类似于oracle数据库里面的nvl。
参考文章:
Hive 在多维统计分析中的应用 & 技巧总结 | http://my.oschina.net/leejun2005/blog/121945 |
hive本地mr | http://superlxw1234.iteye.com/blog/1703546 |
hive优化之——控制hive任务中的map数和reduce数 | http://superlxw1234.iteye.com/blog/1582880 |
Hive Tips | http://blog.hesey.net/2012/04/hive-tips.html |
本文收集自网络;
转载请注明来源:http://www.crazyant.net/1404.html
您可能也喜欢: | ||||
![]() Hive开发经验问答式总结 |
![]() hive从查询中获取数据插入到表或动态分区 |
![]() Hive的left join、left outer join和left semi join三者的区别 |
![]() Hive开发中使用变量的两种方法 |
![]() Hive使用TRANSFORM运行Python脚本总结 |
无觅 |