【Hive】08-HiveQL:索引

2023-11-28 23:48
文章标签 索引 hive 08 hiveql

本文主要是介绍【Hive】08-HiveQL:索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hive 只有有限的索引功能。 Hive 中没有普通关系型数据库中键的概念,但是还是可以对一些字段建立索引来加速某些操作的。一张表的索引数据存储在另外一张表中。同时,因为这是一个相对比较新的功能,所以目前还没有提供很多的选择。然而,索引处理模块被设计成为可以定制的 Java 编码的插件,因此,用户可以根据需要对其进行实现,以满足自身的需求。当逻辑分区实际上太多太细而几乎无法使用时,建立索引也就成为分区的另一个选择。建立索引可以帮助裁剪掉一张表的一些数据块,这样能够减少 MaPReduce 的输人数据最。

并非所有的查询都可以通过建立索引获得好处。通过 EXPLAIN 命令可以查看某个查询语句是否用到了索引。 Hive 中的索引和那些关系型数据库中的一样,需要进行仔细评估才能使用。维护索引也擂要额外的存储空间,同时创建索引也树要消耗计算资源。用户播要在建立索引为查询带来的好处和因此而豁要付出的代价之间做出权衡。

1、创建索引

现在我们来为我们管理分区表中的 employees 表建立一个索引。下面这段是我们之前的表定义语句,作为参照:

CREATE TABLE employees(name STRING,salary FLOAT,subordinates ARRAY<STRING>,deductions MAP<STRING,FLOAT>,address STRUCT<street:STRING,city:STRING,state:STRING,zip:STRING
) 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','created_at'=’some_time') 
IN TABLE employees_index_table 
PARTITIONED BY (country , name ) 
COMMENT ' Employees indexed by country and name . ' ; 

在这种情况下,我们没有像原表那样对索引表进行同一粒度的分区划分。其实我们是可以那么做的。如果我们完全省略掉队 RTITIONED BY 语句的话,那么索引将会包含原始表的所有分区。

AS … 语句指定了黄引必理器,也就是一个实现了索引接口的 Java 类。 Hivc 本身包含了一些典型的索引实现。这里所展示的 CompactlndexHandler 就是其中的一个实现。可以通过第三方的实现来最优化地处理特定的场景,支持特定的文件格式,等等。下一节我们将讨论 WITH DEFERRED REBUILD 这个子句的含义。并非一定要求索引处理器在一张新表中保留索引数据,但是如果俩要的话,会使用到 IN TABLE … 子句。这个句式提供了和创建其他类型表一样的很多功能。特别地,例子中没有使用到 ROW FORMAT 、 STOREDAS 、 STORED BY 、 LOCATION 等我们讨论过的选项。这些其实都是可以在最后的 COMMENT 语句前增加的。

B itmap 索弓} Hive v0.8.0 版本中新增了一个内里 bitmap 索引处理器。 bitmap 索引普追应用于排重后值较少的列。下面是对前面的例子使用 bitmap 索引处理器重写后的语句:

2、重建索引

如果用户指定了 DEFERRD REBUILD ,那么新索引将呈现空白状态。在任何时候,都可以进行第一次索引创建或者使用 ALTER INDEX 对索引进行重建:

如果省略掉PARTITION ,那么将会对所有分区进行重建索引。还没有一个内置的机制能够在底层的表或者某个特定的分区发生改变时,自动触发重建索引。但是,如果用户具有一个工作流来更新表分区中的数据的话,那么用户可能已经在其中某处使用到了“众多的 Alter Table 语句”章节中所说明的 ALTER TABLE … TOUCH  PARTITION( …)功能,同样地,在这个工作流中也可以对对应的索引执行重建索引语句 ALTER INDEX … REBUILD 。如果重建索引失败,那么在重建开始之前,索引将停留在之前的版本状态。从这种惫义上看,重建索引操作是原子性的。

3、显示索引

下面这个命令将显示对于这个索引表对所有列所建立的索引:

SHOW FORHATTED INDEX ON employee ; 

关键字 FORMAFTED 是可选的。增加这个关键字可以使输出中包含有列名称.用户还可以替换 INDEX 为 INDEXES ,这样输出中就可以列举出多个索引信息了。

4、删除索引

如果有索引表的话,删除一个索引将会删除这个索引表:

DROP INDEX IF EXISTS employee_index ON TABLE employee; 

Hive 不允许用户直接使用 DROP TABLE 语句之前删除索引表。而通常情况下, IF EXISTS 都是可选的,其用于当索引不存在时避免抛出错误信息。如果被索引的表被删除了,那么其对应的索引和索引表也会被删除。同样地,如果原始表的某个分区被删除了,那么这个分区对应的分区索引也同时会被删除掉。

这篇关于【Hive】08-HiveQL:索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/430667

相关文章

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的