欢迎关注大数据技术架构与案例微信公众号:过往记忆大数据
过往记忆博客公众号iteblog_hadoop
欢迎关注微信公众号:
过往记忆大数据

Hive0.11.0的新特性

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

hive> explain dependency select count(1) from p;
OK
{"input_partitions":
[{"partitionName":"default@p@stat_date=20110728/province=bj"},
{"partitionName":"default@p@stat_date=20110728/province=jx"},
{"partitionName":"default@p@stat_date=20110728/province=jx123"},
{"partitionName":"default@p@stat_date=20110728/province=zhejiang"}],
"input_tables":[{"tablename":"default@p","tabletype":"MANAGED_TABLE"}]}
Time taken: 1.158 seconds, Fetched: 1 row(s)

  2、对于简单的不需要聚合的类似SELECT col from table LIMIT 20语句,不需要起MapReduce job,直接通过Fetch task获取数据
  3、Union优化,如果Union语句的parent是mapreduce job,那么它会先将结果写入临时文件中,Union再读取这些临时文件写入最终目录,上层语句再读取最终目录,这样导致结果文件读了两遍。优化策略就是结果数据直接往最终目录上写
  4、实现了TRUNCATE,可以删除HDFS上面相关表格存储的数据,但是会保持表和metadata的完整性。

hive> TRUNCATE TABLE p;

这样将会删掉表格p关联的所以数据
  5、建立了大量的关键字
Hive 0.11下面的语句是合法的:

hive> create table table(id int);

而在Hive 0.11之前版本是不行的
  6、Add LEAD/LAG/FIRST/LAST analytical windowing functions to Hive

hive> select id, rat, lag(id,2,100000) from m limit 10;
OK
12	3	100000
13	2	100000
276	1	12
716	5	13
880	3	276
378	3	716
913	2	880
721	3	378
676	4	913
806	4	721

hive> select id, rat, lag(id,1) from m limit 10;
和
hive> select id, rat, lag(id) from m limit 10;
都输出:
OK
12	3	NULL
13	2	12
276	1	13
716	5	276
880	3	716
378	3	880
913	2	378
721	3	913
676	4	721
806	4	676

hive> select id, rat, lead(id,1) from m limit 10;
和
hive> select id, rat, lead(id) from m limit 10;
输出结果一样
OK
12	3	13
13	2	276
276	1	716
716	5	880
880	3	378
378	3	913
913	2	721
721	3	676
676	4	806
806	4	495

  7、增加了NVL函数

hive> select NVL(name ,’no name’) from m limit 10;

  8、通过配置可以指定Hive中log4j日志配置文件的存放路径。

hive \
-hiveconf hive.log4j.file=/home/carl/hive-log4j.properties \
-hiveconf hive.log4j.exec.file=/home/carl/hive-exec-log4j.properties

  9、新增了DECIMAL 新类型,并且可以在Regex Serde中使用
  10、新增Hive Server 2,解决之前存在的security和concurrency问题。同时新增加了Beeline CLI(基于SQLLine),可以在command-line中以交互式的访问Hive Server 2
  11、支持DML
  12、删除分区时,支持使用IGNORE PROTECTION谓词
  13、当用户将Hive查询结果输出到文件,用户可以指定列的分割符,默认的是^A

hive> insert overwrite local directory '/home/wyp/Documents/result'
hive> select * from test;

上面是用'^A'来分割得出的列,如果我们需要指定列之间的分隔符可以用下面的命令实现:

hive> insert overwrite local directory '/home/wyp/Documents/result'
hive> row format delimited
hive> fields terminated by '\t'
hive> select * from test;

增加了两行,从而使得列与列之间以我们指定的分隔符来指定。
定义map的分割可以用下面的命令实现:

insert overwrite local directory './test-04' 
row format delimited 
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
select * from src;

  14、增加操作员级别的Hooks
  15、支持ALTER VIEW AS SELECT
  16、可以得到RCFile中每一列压缩和未压缩的大小
  17、可以通过CLI修改表格的bucketing/sorting元数据
  18、增加了Hive Profiler工具,可以用它追踪用户的wall times和call counts
  19、支持创建和删除临时分区
  20、ORC支持内存管理
  21、把Hcatalog整合到hive里面了,而不是独立的项目
  22、支持ORCFile文件格式(Optimized Row Columnar),基于列存储,文件内置有inline index,可以基于文件做predicate pushdown,根据stripe的元数据来选择是否跳过stripe,大大降低input size
  23、group by 语法增强,group by除了可以跟column alias,也可以跟column position

比如:
select f1(col1), f2(col2), f3(col3), count(1) \
group by f1(col1), f2(col2), f3(col3);
可以写成
select f1(col1), f2(col2), f3(col3), count(1) group by 1, 2, 3;
本博客文章除特别声明,全部都是原创!
原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Hive0.11.0的新特性】(https://www.iteblog.com/archives/814.html)
喜欢 (4)
分享 (0)
发表我的评论
取消评论

表情
本博客评论系统带有自动识别垃圾评论功能,请写一些有意义的评论,谢谢!
(2)个小伙伴在吐槽
  1. 大神,您好:我用了lag,但是报错说没有这个函数,请问是不是要和普通的UDF一样,加载到hive里吗?

    今朝酒*醉2015-07-13 14:58 回复
    • 你用的是什么版本的Hive?这个函数在Hive 0.11才有的。

      w3970907702015-07-13 16:46 回复