Hive相关随笔
2015-09-01 16:36
260 查看
1).Hive中Select Top N的实现
Hive中使用 Order by + Limit 可以很容易地实现Select Top N。
但是在Hive中Order by只能使用1个Reduce,如果表的数据量很大,那么Order by就会力不从心。相对的,Sort by可以启动多个Reduce,每个Reduce做局部排序。
从执行计划explain中可以看出Sort by Limit N启动了两个MR Job。第一个Job是在每个Reduce中做局部排序,然后分别取Top N。假设启动了M个reduce,第二个Job再对M个Reduce分别局部排好序的总计M * N条数据做全局排序,再取最终的Top N,从而得到想要的结果。这样就可以大大提高Select Top N的效率。
2).hive中的分号字符
分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:
3).Hive客户端默认配置
以下操作均可在$HIVE_HOME/bin/.hiverc文件中保存,设置为默认参数
Hive中使用 Order by + Limit 可以很容易地实现Select Top N。
但是在Hive中Order by只能使用1个Reduce,如果表的数据量很大,那么Order by就会力不从心。相对的,Sort by可以启动多个Reduce,每个Reduce做局部排序。
从执行计划explain中可以看出Sort by Limit N启动了两个MR Job。第一个Job是在每个Reduce中做局部排序,然后分别取Top N。假设启动了M个reduce,第二个Job再对M个Reduce分别局部排好序的总计M * N条数据做全局排序,再取最终的Top N,从而得到想要的结果。这样就可以大大提高Select Top N的效率。
set mapred.reduce.tasks=3; select * from tea sort by age limit 3;
2).hive中的分号字符
分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:
hive> select concat(';','a'); --会报异常NoViableAltException(-1@[]),解决方案: hive> select concat('\073','a'); --分号的ASCII值是59,八进制为073.只能使用八进制,对于十六进制无效 --concat(str1,str2)作用为拼接字符串
3).Hive客户端默认配置
以下操作均可在$HIVE_HOME/bin/.hiverc文件中保存,设置为默认参数
set hive.mapred.mode=strict; //开启strict模式,以下情况报错:(1)没有limit限制的order by语句.(2)动态分区插入 set hive.cli.print.current.db=true; //显示当前工作的数据库 set hive.cli.print.header=true; //显示列名 set mapred.reduce.tasks=3; //设置reduce的个数 set hive.exec.reducers.bytes.per.reducer; //多少字节开一个reducer,默认256000000 set hive.exec.dynamic.partition.mode=strict; //该模式下必须指定一个静态分区
相关文章推荐
- C#中js文本提示
- JS设计模式——代理模式
- MQTTKit即时通讯使用
- 查询SQL Server执行过的SQL语句
- JS设计模式——工厂模式
- .net中js向后台传递包含中文的参数,后台获取到的中文乱码的解决方法。
- node.js中express的应用
- 【leetcode每日一题】138.Copy List with Random Pointer
- Devexpress gridcontrol列中根据值显示图片
- display详解
- String类总结
- startActivityForResult
- oracle数据库的搭建(1)
- UVa 11054 - Wine trading in Gergovia (等价转化_水题吧)
- Nouveau源码分析(一):从module_init开始
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
- 数据库-mysql如何优化和改善数据库的性能
- Photoshop CC中对图片进行切片分割
- values v11 v14
- 《PCI EXPRESS体系结构导读》读书笔记之X86处理器的HOST主桥