更新時(shí)間:2023-08-01 來(lái)源:黑馬程序員 瀏覽量:
索引創(chuàng)建在Hive表的指定列,創(chuàng)建索引的列稱為索引列,通過索引列執(zhí)行查詢操作時(shí),可以避免全表掃描以及全分區(qū)掃描,從而提高查詢速度。然而在提高查詢速度的同時(shí),hive會(huì)額外消耗資源去創(chuàng)建索引,以及需要更多的磁盤空間存儲(chǔ)索引。索引可以總結(jié)為是一種以空間換取時(shí)間的方式。
Hive的索引其實(shí)是一張索引表,在表中存儲(chǔ)了索引列的值、索引列的值在HDFS對(duì)應(yīng)的數(shù)據(jù)文件路徑以及索引列的值在數(shù)據(jù)文件中的偏移量。涉及索引列的查詢時(shí),首先會(huì)去索引表中查找索引列的值在HDFS對(duì)應(yīng)的數(shù)據(jù)文件路徑以及索引列的值在數(shù)據(jù)文件中的偏移量,通過數(shù)據(jù)文件路徑和偏移量去掃描全表的部分?jǐn)?shù)據(jù),從而避免全表掃描。
創(chuàng)建索引的語(yǔ)法格式如下。
CREATE INDEX index_name ON TABLE base_table_name (col_name, ..) AS index_type [WITH DEFERRED REBUILD] [IN TABLE index_table_name] [RON FORMAT .….] STORED AS... [STORED BY ... ] [LOCATION hdfs_path] [TBLPROPERTIES (..)] [COMMENT "index comment"];
上述語(yǔ)法的具體講解如下。
· CREATEINDEX:表示創(chuàng)建索引的語(yǔ)句。
· index_name:用于指定創(chuàng)建索引時(shí)實(shí)現(xiàn)的類,通常使用類 org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler。
· ON TABLE base_table_name(col_name,..):用于指定數(shù)據(jù)表中創(chuàng)建索引的列。
· AS index_type:用于指定索引類型。
· WITH DEFERRED REBUILD:可選,用于重建索引。
· IN TABLE index_table_name:可選,用于指定索引表的名稱。
· ROWFORMAT:可選,用于序列化行對(duì)象。
· STOREDAS:可選,用于指定存儲(chǔ)格式。
· STOREDBY:可選,用于指定排序規(guī)則。
· LOCATION hdfs_path:可選,用于指定索引表在HDFS的存儲(chǔ)位置。
· TBLPROPERTIES:可選,用于指定索引表屬性。
· COMMENT“index comment”:可選,用于指定索引描述。
接下來(lái),在虛擬機(jī)Node_03中使用Hive客戶端工具Beeline,遠(yuǎn)程連接虛擬機(jī)Node_02的HiveServer2服務(wù)操作Hive,為數(shù)據(jù)庫(kù)hive_database的內(nèi)部表managed_table_new創(chuàng)建索引,具體命令如下。
CREATE INDEX index_staff_name ON TABLE hive_database.managed_table_new (staff_name) AS 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' NITH DEFERRED REBUILD IN TABLE index_name_table TBLPROPERTIES ("create"="itcast") COMMENT "index comment";
上述命令在數(shù)據(jù)庫(kù)hive_database的內(nèi)部表managed_table_new中創(chuàng)建索引index_staff_name,指定索引列為staff_name,指定索引類型為org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler,指定索引表名稱為index_name_table,指定索引表屬性create的屬性值為itcast,指定索引描述為index comment。