zoukankan      html  css  js  c++  java
  • 关于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就可以使用了。
  • 相关阅读:
    pig安装
    [2013.10.29][Luogu OJ P1873]砍树
    [转帖]OIer之魂、
    [转帖]我们是OIer、
    10007:[2013.10.25]P1.滚土豆(potato.pas/c/cpp)
    [2013.10.18]P2.传作业 (pass.pas/c/cpp)
    [Luogu OJ P1619]解一元二次方程的烦恼
    [Luogu OJ P1433][2013.10.18]DFS基础题-吃奶酪
    高精度加减乘法小程序 Ver 0.9.5 beta
    [2013.10.11]P3.和为零
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206929.html
Copyright © 2011-2022 走看看