分享

Hive0.11.0的新特性及实战

yuwenge 2014-1-10 23:36:59 发表于 介绍解说 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 8181
本帖最后由 yuwenge 于 2014-1-10 23:38 编辑

    1、增加操作员级别的Hooks

  2、支持ALTER VIEW AS SELECT

  3、可以得到RCFile中每一列压缩和未压缩的大小

  4、可以通过CLI修改表格的bucketing/sorting元数据

  5、增加了Hive Profiler工具,可以用它追踪用户的wall times和call counts

  6、支持创建和删除临时分区

  7、ORC支持内存管理

  8、把Hcatalog整合到hive里面了,而不是独立的项目

  9、支持ORCFile文件格式(Optimized Row Columnar),基于列存储,文件内置有inline index,可以基于文件做predicate pushdown,根据stripe的元数据来选择是否跳过stripe,大大降低input size

  10、group by 语法增强,group by除了可以跟column alias,也可以跟column position

  1. 比如:
  2. select f1(col1), f2(col2), f3(col3), count(1) \
  3. group by f1(col1), f2(col2), f3(col3);
  4. 可以写成
  5. select f1(col1), f2(col2), f3(col3), count(1) group by 1, 2, 3;
复制代码

   
     11、新增”Explain dependency”语法,以json格式输出执行语句会读取的input table和input partition信息,这样debug语句会读取哪些表就很方便了

  1. hive> explain dependency select count(1) from p;
  2. OK
  3. {"input_partitions":
  4. [{"partitionName":"default@p@stat_date=20110728/province=bj"},
  5. {"partitionName":"default@p@stat_date=20110728/province=jx"},
  6. {"partitionName":"default@p@stat_date=20110728/province=jx123"},
  7. {"partitionName":"default@p@stat_date=20110728/province=zhejiang"}],
  8. "input_tables":[{"tablename":"default@p","tabletype":"MANAGED_TABLE"}]}
  9. Time taken: 1.158 seconds, Fetched: 1 row(s)
复制代码
     12、对于简单的不需要聚合的类似SELECT col from table LIMIT 20语句,不需要起MapReduce job,直接通过Fetch task获取数据

   13、Union优化,如果Union语句的parent是mapreduce job,那么它会先将结果写入临时文件中,Union再读取这些临时文件写入最终目录,上层语句再读取最终目录,这样导致结果文件读了两遍。优化策略就是结果数据直接往最终目录上写

   14、实现了TRUNCATE,可以删除HDFS上面相关表格存储的数据,但是会保持表和metadata的完整性。

  1. hive> TRUNCATE TABLE p;
复制代码
这样将会删掉表格p关联的所以数据

  15、建立了大量的关键字Hive0.11下面的语句是合法的:

  1. hive> create table table(id int);
复制代码
而在Hive0.11之前版本是不行的

  16、Add LEAD/LAG/FIRST/LAST analytical windowing functions toHive
  1. hive> select id, rat, lag(id,2,100000) from m limit 10;
  2. OK
  3. 12  3   100000
  4. 13  2   100000
  5. 276 1   12
  6. 716 5   13
  7. 880 3   276
  8. 378 3   716
  9. 913 2   880
  10. 721 3   378
  11. 676 4   913
  12. 806 4   721
  13. hive> select id, rat, lag(id,1) from m limit 10;
  14. hive> select id, rat, lag(id) from m limit 10;
  15. 都输出:
  16. OK
  17. 12  3   NULL
  18. 13  2   12
  19. 276 1   13
  20. 716 5   276
  21. 880 3   716
  22. 378 3   880
  23. 913 2   378
  24. 721 3   913
  25. 676 4   721
  26. 806 4   676
  27. hive> select id, rat, lead(id,1) from m limit 10;
  28. hive> select id, rat, lead(id) from m limit 10;
  29. 输出结果一样
  30. OK
  31. 12  3   13
  32. 13  2   276
  33. 276 1   716
  34. 716 5   880
  35. 880 3   378
  36. 378 3   913
  37. 913 2   721
  38. 721 3   676
  39. 676 4   806
  40. 806 4   495
复制代码
 17、增加了NVL函数

  1. hive> select NVL(name ,’no name’) from m limit 10;
复制代码
    18、通过配置可以指定Hive中log4j日志配置文件的存放路径。

  1. hive \
  2. -hiveconf hive.log4j.file=/home/carl/hive-log4j.properties \
  3. -hiveconf hive.log4j.exec.file=/home/carl/hive-exec-log4j.properties
复制代码
     19、新增了DECIMAL 新类型,并且可以在Regex Serde中使用

  20、新增Hive Server 2,解决之前存在的security和concurrency问题。同时新增加了Beeline CLI(基于SQLLine),可以在command-line中以交互式的访问Hive Server 2

  21、支持DML

  22、删除分区时,支持使用IGNORE PROTECTION谓词

  23、当用户将Hive查询结果输出到文件,用户可以指定列的分割符,默认的是^A

  1. hive> insert overwrite local directory '/home/wyp/Documents/result'
  2. hive> select * from test;
复制代码
上面是用’^A’来分割得出的列,如果我们需要指定列之间的分隔符可以用下面的命令实现:

  1. hive> insert overwrite local directory '/home/wyp/Documents/result'
  2. hive> row format delimited
  3. hive> fields terminated by '\t'
  4. hive> select * from test;
复制代码
增加了两行,从而使得列与列之间以我们指定的分隔符来指定。

定义map的分割可以用下面的命令实现:

  1. insert overwrite local directory './test-04'
  2. row format delimited
  3. FIELDS TERMINATED BY '\t'
  4. COLLECTION ITEMS TERMINATED BY ','
  5. MAP KEYS TERMINATED BY ':'
  6. select * from src;
复制代码




没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条