Hive只有有限的索引功能。Hive中没有普通关系型数据库中键的概念,但是还是可以对一些字段建立索引来加速某些操作。一张表的索引数据存储在另外一张表中。

通过explain命令可以查看某个查询语句是否用到了索引。

一、创建索引

比如,有数据表:
create table employees(
name string,
salary float,
subordinates array<string>,
deductions map<string, float>,
address struct<street:string, city:string, state:string, zip:int>
)
partitioned by (country string, state:string);
对分区字段country建立索引:
create index employees_index on table employees (country) as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler'
with deferred rebuild
idxproperties('creator' = 'me', 'create_at' = 'some_time')
in table employees_index_table
partitioned by (country, name)
comment 'Employees indexed by country and name.';
如果我们完全省略掉partitioned by语句的话,那么索引将会包含原始表的所有分区。
as...语句指定了索引处理器,也就是一个实现了索引接口的Java类。
并非一定要求索引处理器在一种新表中保留索引数据,但是如果需要的话,会使用到in table...语句。这个句式提供了和创建其他类型表一样的很多功能。也可以在comment语句前增加row format、 stored as、 stored by、location等语句。
目前,除了S3中的数据,对外部表和视图都是可以建立索引的。
Bitmap索引
Hive v0.8.0版本中新增了一个内置的bitmap索引处理器,bitmap索引普遍应用于排重后值较少的列。下面是对前面的例子使用bitmap索引处理器重写后的语句:
create index employees_index
on table employees(country)
as 'BITMAP'
with deferred rebuild
idxproperties('creator' = 'me', 'created_at'='some_time')
in table employees_index_table
partitioned by (country, name)
comment 'Employees indexed by country and name.';

二、重建索引

如果指定了deferred rebuild,那么,新索引将呈现空白状态。在任何时候,都可以进行第一次索引创建或者使用alter index对索引进行重建:
alter index employees_index
on table employees
partition (country = 'US')
rebuild;
如果省略掉partition,那么将会对所有分区进行重建索引。
如果重建索引失败,那么在重建开始之前,索引将停留在之前的版本状态。

三、显示索引

show formatted index on employees;
关键字formatted是可选的。增加这个关键字可以使输出中包含有列名称。用户还可以替换index 为indexes,这样输出中就可以列举出索引信息了。

四、删除索引

如果有索引的话,删除一个索引将会删除这个索引表:
drop index if exists employees_index on table employees;
如果被索引的表被删除了,那么其对应的索引和索引表也会被删除。同样的,如果原始表的某个分区被删除了,那么这个分区对应的分区索引也同时会被删除掉。

HiveQL Index 索引的更多相关文章

  1. nexus私服update repair index索引失败解决方案(转)

    转载地址:http://blog.csdn.net/first_sight/article/details/51559086 问题描述: 搭建Maven的Nexus私服仓库,一般安装完Nexus后,默 ...

  2. 加NONCLUSTERED INDEX索引,在ON了之后还要INCLUDE

    之前加了索引,但效果不大 SET STATISTICS TIME ON --执行时间 SET STATISTICS IO ON --IO读取 DBCC DROPCLEANBUFFERS --清除缓冲区 ...

  3. py-day1-6 python 5个灰魔法 【len,index索引,for循环,切片】

    # 索引,下标,获取字符串中的某一个字符. test = 'MuMingJun' v = test[3] print(v) i # 切片 test = 'MuMingJun' v = test[0:- ...

  4. index索引的一些简单理解

    index索引(普通索引,允许出现相同的索引内容) 1.索引 索引是在数据量和访问量较大的时候,而出现的一种优化数据库的手段 索引可以提高查询(select)的效率,但相应的,它的 INSERT 与 ...

  5. 根据日志来源的不同生成不同的index索引

    使用filebeat收集系统日志,不同应用的日志,然后把这些日志传输给Logstash,再然后交由elasticsearch处理,那么如何区分不同的日志来源呢? filebeat.yml配置文件中不启 ...

  6. Neo4j:Index索引

    Indexing in Neo4j: An Overview by Stefan Armbruster · Jan. 06, 14 · Java Zone Neo4j是一个图数据库,在做图的检索时,用 ...

  7. 微信小程序获取index索引值的方法

    功能:点击某一项,底部出现粉色边框 首先需要通过 bindtap 为每一个item项绑定一个点击事件,其次需要添加自定义属性 data-* = {{index}} ,以便在函数中获取到被点击item项 ...

  8. 【mq读书笔记】Index索引文件

    1.IndexHeader头部,40字节,记录IndexFile的统计信息: begainTimestamp:该索引文件中包含消息的最小存储时间 endTimestamp:该索引文件中包含消息的最大存 ...

  9. MySQL查询优化之 index 索引的分类和使用

    索引的分类 主键索引 (PRIMARY KEY) 唯一的标识符, 主键不可重复, 只能有一列作为主键 唯一索引 (Unique KEY) 避免重复的列出现, 唯一索引可以重复, 多个列都可以标识为唯一 ...

随机推荐

  1. 13 IO流(十)——BufferedReader/BufferedWriter 装饰流

    Buffered字符包装流 与Buffered字节装饰流一样,只不过是对字符流进行包装. 需要注意的地方 Buffered字符流在Reader与Writer上有两个新的方法:String readLi ...

  2. leetcode 罗马数字和数字的互相转换

    不知哪个大佬说过: 关于字符串的题都可以用指针或哈希解决. 罗马数字转数字: 思想: 我们能观察到规律: 一般情况下,表示大的字母在前,小字母在后; 特殊情况下,小字母会在大字母之前,但是相应的,得到 ...

  3. 【LEETCODE】48、867. Transpose Matrix

    package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...

  4. Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE

    删除logs文件夹日志即可

  5. Luogu4233 射命丸文的笔记 DP、多项式求逆

    传送门 注意到总共有\(\frac{n!}{n}\)条本质不同的哈密顿回路,每一条哈密顿回路恰好会出现在\(2^{\binom{n}{2} - n}\)个图中,所以我们实际上要算的是强连通有向竞赛图的 ...

  6. 全栈项目|小书架|微信小程序-项目结构设计分包

    前面的文章 介绍了服务端的基础搭建以及用户模块的设计,接下来就是在服务端和客户端实现具体的业务了. 本篇文章先来介绍微信小程序开发的项目结构设计,也就是项目分包情况. 由于项目是在<极客时间-9 ...

  7. elasticsearch授权访问

    1.search guard插件 https://www.cnblogs.com/shifu204/p/6376683.html 2.Elasticsearch-http-basic 不支持es5,忽 ...

  8. Flask中jinja2的应用

    Flask中jinja2的应用 # -*- coding: utf-8 -*- # @Time : 2019/9/24 17:29 # @Author : AnWen from flask impor ...

  9. SQL*Plus 与数据库的交互(SQL*Plus时什么)

    Oracle 的 SQL*Plus 是与数据库进行交互的客户端工具,在 SQL*Plus中,可以运行 SQL*Plus 命令与 SQL*Plus 语句.   SQL*Plus 时一个基于 C/S 两层 ...

  10. iOS 简化冗余代码

    正在给深圳某家智能家居开发iPad版本,在已经存在的iPhone版上修改,该app的界面采用的是xib.xib相比代码来写界面,快速高效,但是可维护性和可读性太差.言归正传,看到这些代码后,我的心情很 ...