当前位置: 首页 > 面试题库 >

如何重建Hive索引和删除索引?

越新霁
2023-05-16

索引概念

索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。

例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。

从数据搜索实现的角度来看,索引也是另外一类文件/记录,它包含着可以指示出相关数据记录的各种记录。其中,每一索引都有一个相对应的搜索码,字符段的任意一个子集都能够形成一个搜索码。这样,索引就相当于所有数据目录项的一个集合,它能为既定的搜索码值的所有数据目录项提供定位所需的各种有效支持。

今天我们来学习怎么重建数据库索引和删除索引:

重建索引

索引创建完成后还无法使用索引功能,此时索引表中是没有数据的,需要通过重建索引操作,将索引列的值、索引列的值在HDFS对应的数据文件路径和索引列的值在数据文件中的偏多量,这些数据加载到索引表中。重建索引的语法格式如下。

ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;

上述语法中,PARTITION partition_spee为可选,表示只重建指定分区内的索引;index_name表示索引名称;table_name表示索引所在的数据表。

接下来,在虚拟机Node_03 中使用Hive客户端工具Beeline,远程连接虚拟机Node_02的HiveServer2服务操作Hive,重建数据库hive_database中内部表managed_table_new的索引 index_staff_name,具体命令如下。

ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;

上述命令执行完成后,便可以在数据表managed_table_new使用索引功能。需要注意的是,若数据表managed_table_new中的数据发生变化,则数据表不会自动重建索引,需要手动重建索引生成新的索引表数据。

删除索引

删除索引是指删除数据表中创建的索引,删除索引的同时会删除索引对应的索引表,删除索引语法格式如下。、

DROP INDEX [IF EXISTS] index_name ON table_name;

上述语法中,index_name表示索引名称;table_name表示索引所在的数据表。接下来,在虚拟机Node_03中使用Hive客户端工具Beeline,远程连接虚拟机Node_02的HiveServer2服务操作Hive,删除内部表managed_table_new创建的索引index_staff_name,具体命令如下。

DROP INDEY IF EXISTS index_staff_name ON managed_ table_new;

上述命令执行完成后,在Hive客户端工具Beeline中分别执行“SHOW INDEXES ON managed_table_new FROM hive_database;”命令和“SHOW TABLES;”命令,查看数据库hive_database中内部表managed_table_new的索引信息和查看当前数据库下的所有表,如图3-30所示。

删除索引

可以看出,数据库hive_database中不存在索引表index_name_table,并且内部表managed_table_new中的索引index_staff_name也不存在了。

开启自动使用索引功能

默认情况下,在查询Hive中已创建索引的数据表时,是不会使用索引功能的,需要在Hive中开启自动使用索引功能,此时涉及查询创建索引的数据表时,就会使用索引功能去优化查询,开启自动使用索引功能相关配置如下。

SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
SET hive.optimize.index.filter=true;
SET hive.optimize.index.filter.compact.minsize=0;

需要注意的是,上述配置需要在Hive客户端工具Beeline中执行,并且是针对于当前会话临时生效。如果需要永久生效,可将上述配置添加到在虚拟机Node_02的Hive配置文件hive=site.xml中。 

 类似资料:
  • 问题内容: 我正在使用带有NEST的C#.NET应用程序来创建索引。 我创建了一个Elasticsearch索引,客户可以查询该索引,称为index_1。然后,我使用应用程序的不同实例构建索引的另一个版本,并将其称为index_1_temp。 我将index_1_temp重命名为index_1然后删除原始index_1的最安全方法是什么? 我知道ES具有别名,但是我不确定如何将其用于此任务 编辑:

  • 问题内容: 我正在使用SQL Server 2008,并且拥有一个数据库,其中包含150个以上具有重复索引的表。 我发现一些SQL脚本将列出重复的索引,但是我不确定是否应该信任它们。据说他们说我有400多个重复索引;我不确定这是否正确,因此不希望使用它们来自动删除重复项。 如何确定找到重复索引并将其删除? 问题答案: 查看Tom LaRock出色的“如何查找重复索引”博客文章-他详细解释了如何进行

  • 如何删除每个索引,我有一个参数和删除按钮,我试图将我的参数放在我的删除按钮中,但它不起作用如何解决这个问题? 超文本标记语言

  • 一、视图 1.1 简介 Hive 中的视图和 RDBMS 中视图的概念一致,都是一组数据的逻辑表示,本质上就是一条 SELECT 语句的结果集。视图是纯粹的逻辑对象,没有关联的存储 (Hive 3.0.0 引入的物化视图除外),当查询引用视图时,Hive 可以将视图的定义与查询结合起来,例如将查询中的过滤器推送到视图中。 1.2 创建视图 CREATE VIEW [IF NOT EXISTS] [

  • 命令用于删除指定的索引。 如果索引创建时未指定索引名称,则索引名称为。 语法 或者 - 删除索引的规则 如果索引不存在,它将返回错误,除非您使用,否则不返回任何操作。 在创建索引期间,您必须使用索引名称指定名称,否则将当前键空间中的索引删除。 示例: 下面举个例子来演示如何删除某列上的索引。 在这里,我们将创建的索引放在表“”中的“”列中。键空间的名称是“”。 如下语句 - 从“”列中删除索引。

  • 问题内容: 我每天创建索引来存储搜索历史,并且我将这些索引用于应用程序中的建议,这也有助于我根据历史建议。 现在我只需要维持过去的10天历史。那么elasticsearch中是否有任何功能可以让我定期创建和删除索引? 问题答案: 我唯一能想到的就是使用数据数学:https : //www.elastic.co/guide/en/elasticsearch/reference/current/dat

  • 主要内容:基本语法,删除索引删除索引是指将表中已经存在的索引删除掉。不用的索引建议进行删除,因为它们会降低表的更新速度,影响数据库的性能。对于这样的索引,应该将其删除。 在 MySQL 中修改索引可以通过删除原索引,再根据需要创建一个同名的索引,从而实现修改索引的操作。 基本语法 当不再需要索引时,可以使用 DROP INDEX 语句或 ALTER TABLE 语句来对索引进行删除。 1) 使用 DROP INDEX 语句

  • 问题内容: 我有一个包含多个重复条目的索引。它们具有不同的ID,但其他字段具有相同的内容。 例如: 删除重复项后: 有没有一种方法可以删除所有重复项并仅保留一个不同的条目,而无需手动比较所有条目? 问题答案: 我使用rails,如有必要,我将使用命令导入内容,该命令将删除并重新索引该索引和类型的所有内容……但是不确定您在哪个环境中运行ES。我只能看到的问题是数据源是否您正在从中导入(即数据库)的记