关于HIVE的SELECT count(*) 优化
2013-05-17 16:00
295 查看
刚刚下载了一份HIVE的最新源码。
印象最深的是HIVE将表的大小作为了元数据保存在了关系数据库中。
譬如在老版本中执行如下的语句:
from base insert overwrite table user select * ;
你会发现日志的末尾会有 “999 ROWD LOADED INTO TABLE USER” 的字样
代表有999条目记录保存在了user表中。
在而在新版本中,执行最后的日志展示了USER表的元数据,其中会有ROW_COUNT:999的字样
一看MYSQL中,999这个数据确实被保存了起来。
也就是说大家以后不必再用“select count(*) from user ”去查询user表的大小了,因为HIVE会将这个语句翻译为MR作业在HADOOP上运行,效率非常低。
新的方法是
HiveConf
conf = new HiveConf(SessionState.class);
Hive
hive = Hive.get(conf);
System.out.println(hive.getTable("user").getTTable()
.getParameters());
List
list = hive.getPartitions(hive.getTable("user"));
for
(Partition p : list) {
System.out.println(p.getParameters());
}
其中打印出来的就是USER表的元数据。
PS:
1。有人会问
select count(1) from user where age=20 这种带有条件的计数怎么办?
别忘记HIVE有分区的概念,看到上面的API了吗,分区也是有元数据的。
2. conf是什么东西?
conf是HIVECONF
寻找你CLASSPATH路径下的HIVESITE文件生成的配置文件对象。
将服务器上的HIVE配置文件COPY到你的项目中,这个API就可以使用了。
印象最深的是HIVE将表的大小作为了元数据保存在了关系数据库中。
譬如在老版本中执行如下的语句:
from base insert overwrite table user select * ;
你会发现日志的末尾会有 “999 ROWD LOADED INTO TABLE USER” 的字样
代表有999条目记录保存在了user表中。
在而在新版本中,执行最后的日志展示了USER表的元数据,其中会有ROW_COUNT:999的字样
一看MYSQL中,999这个数据确实被保存了起来。
也就是说大家以后不必再用“select count(*) from user ”去查询user表的大小了,因为HIVE会将这个语句翻译为MR作业在HADOOP上运行,效率非常低。
新的方法是
HiveConf
conf = new HiveConf(SessionState.class);
Hive
hive = Hive.get(conf);
System.out.println(hive.getTable("user").getTTable()
.getParameters());
List
list = hive.getPartitions(hive.getTable("user"));
for
(Partition p : list) {
System.out.println(p.getParameters());
}
其中打印出来的就是USER表的元数据。
PS:
1。有人会问
select count(1) from user where age=20 这种带有条件的计数怎么办?
别忘记HIVE有分区的概念,看到上面的API了吗,分区也是有元数据的。
2. conf是什么东西?
conf是HIVECONF
寻找你CLASSPATH路径下的HIVESITE文件生成的配置文件对象。
将服务器上的HIVE配置文件COPY到你的项目中,这个API就可以使用了。
相关文章推荐
- 关于HIVE的SELECT count(*) 优化
- 关于HIVE的SELECT count(*) 优化
- 【转帖】探讨下SQL关于select操作的执行规则,以优化查询的速度
- 关于Hibernate select count(*)返回值为Long还是Integer?
- Mysql 优化之 select count 效率
- Hive中select * 没有数据,而select count(*)有数据解决方法
- 关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题
- 关于mysql中innodb的count优化问题分享
- 关于mysql中innodb的count优化问题分享
- SQL笔记,关于select count为0的疑惑解决
- mysql 5.7中关于count(*)的优化
- 关于select 1 ,select count(1),select sum(1)的使用
- 优化select count(*) (转oracle培训老师的文章)
- hive执行select count(*)报错java.net.NoRouteToHostException: No route to host问题的解决
- SQL Select count(*)和Count(1)的区别和执行方式及SQL性能优化
- 关于select count(*)的讨论
- 关于 select count(*) 及 rs(0)的意思
- 关于在Hibernate里使用select count(*) 返回值的问题说明
- 关于Hive优化的四种方法总结
- 关于Hive优化的四种方法总结