hive 索引,hive


一、Hive的索引

索引是标准的数据库技术,hive 0.7版本之后支持索引。Hive提供有限的索引功能,这不像传统的关系型数据库那样有“键(key)”的概念,用户可以在某些列上创建索引来加速某些操作,给一个表创建的索引数据被保存在另外的表中。 Hive的索引功能现在还相对较晚,提供的选项还较少。但是,索引被设计为可使用内置的可插拔的java代码来定制,用户可以扩展这个功能来满足自己的需求。 当然不是说有的查询都会受惠于Hive索引。用户可以使用EXPLAIN语法来分析HiveQL语句是否可以使用索引来提升用户查询的性能。像RDBMS中的索引一样,需要评估索引创建的是否合理,毕竟,索引需要更多的磁盘空间,并且创建维护索引也会有一定的代价。 用户必须要权衡从索引得到的好处和代价。

索引的建立

先创建hive表

hive> create table user( id int, namestring) 

   > ROW FORMAT DELIMITED 

   > FIELDS TERMINATED BY '\t'

> STORED AS TEXTFILE;

导入数据

hive> load data local inpath '/usr/local/trl/row.txt'

   > overwrite into table user;

 

Select*from use---------------------------à耗时10秒

 

对user建立索引

hive> create index user_index on tableuser(id)

   > as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'

   > with deferred rebuild

   > IN TABLE user_index_table;

hive> alter index user_index on userrebuild;

hive> select * from user_index_table;

  耗时9s这和没有创建索引的效果差不多

1. order by会对查询结果集做一次全局的排序,也就是说所有的数据都传给一个reduce来处理对于大数据集来说,这个过程可能很慢

2. sort by只会在每一个reduce中进行排序,这样只保证每个reduce的输出数据是有序的(并非全局排序),这样可以提高后面全局排序的效率。

3.union all 用于多表合并的场景,要求各表select出的字段类型必须完全匹配

  用于多表不同字段的结果表进行合并操作

  hive不支持顶层union,只能union封装在子查询中,而且必须有别名

4.hive索引

  索引key冗余存储,提供基于key的数据视图

  存储设计优化查询和检索性能

  对某些查询减少IO


Hbase与Hive在Hadoop中的功可以有什联系?他们怎分别作业的两个数据库不会有重复信息导致资源浪费?

应该是Hadoop在hbase和Hive中的作用吧。 hbase与hive都是架构在hadoop之上的。都是用hadoop作为底层存储。而hbase是作为分布式数据库,而hive是作为分布式数据仓库。当然hive还是借用hadoop的MapReduce来完成一些hive中的命令的执行。而hbase与hive都是单独安装的。你需要哪个安装哪个,所以不存在重复信息。
 

pig,Hive操作的是HDFS中的文件还是Hbase中的数据

都可以,hbase也是建立在hdfs之上的,,Hive更适合于数据仓库的任务,Hive主要用于静态的结构以及需要经常分析的工作。Hive与SQL相似促使其成为Hadoop与其他BI工具结合的理想交集。
Pig赋予开发人员在大数据集领域更多的灵活性,并允许开发简洁的脚本用于转换数据流以便嵌入到较大的 应用程序。
Pig相比Hive相对轻量,它主要的优势是相比于直接使用Hadoop Java APIs可大幅削减代码量。
Hive和Pig都可以与HBase组合使用,Hive和Pig还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。。
在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop 。
Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。。。
 

相关内容