zoukankan      html  css  js  c++  java
  • 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 ' '

    > 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

  • 相关阅读:
    [Leetcode][Python][DP]Regular Expression Matching
    [LeetCode][Python]Container With Most Water
    [LeetCode][Python]Regular Expression Matching
    [LeetCode][Python]Palindrome Number
    [LeetCode][Python]Largest Number
    前后端数据交互的几个方法
    AngularJS中服务和自定义服务的常见方式及特点
    uniapp解决图形验证码问题及arraybuffer二进制转base64格式图片
    动态面包屑组件(适合嵌套路由)
    vue + antd-vue + 腾讯云点播 完成视频上传功能
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7240849.html
Copyright © 2011-2022 走看看