更新時間: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中。