Hive相关随笔
2024-10-19 04:35:05
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的效率。
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#:委托和自定义事件
- 玩转Unity资源,对象和序列化(下)
- 详解FindBugs的各项检测器 .
- Ubuntu 下安装 apt-get install npm 失败的解决方案
- UISegmentedControl swift
- asp.net MVC EF Where 过滤条件怎么写
- Word 中没有Endnote工具栏的解决方法
- 会话跟踪技术——cookie
- kubernetes 安装备注
- TypeError: 'range' object does not support item assignment处理方法
- netstat实现原理
- nginx报错zero size shared memory zone one
- hdu 6406 Taotao Picks Apples (2018 Multi-University Training Contest 8 1010)(二分,前缀和)
- Gson - 学习
- (一)从设计的角度来看ADT(Java)
- S3 对象
- 使用dev-tool定位页面性能瓶颈
- Plugin with id 'com.novoda.bintray-release' not found的解决方法
- Java Web项目部署
- 20155338 2016-2017-2 《Java程序设计》第4周学习总结