设为首页 加入收藏

TOP

关于HIVE的SELECT count(*) 优化
2018-12-06 01:06:59 】 浏览:249
Tags:关于 HIVE SELECT count 优化
刚刚下载了一份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的strict模式;where,group by.. 下一篇Ubuntu下面安装HIVE

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目