更新时间:2023年03月24日11时10分 来源:传智教育 浏览次数:
索引创建完成后还无法使用索引功能,此时索引表中是没有数据的,需要通过重建索引操作,将索引列的值、索引列的值在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中。