全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

什么是索引?怎樣在Hive中創(chuàng)建索引?

更新時(shí)間:2023-08-01 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

索引創(chuàng)建在Hive表的指定列,創(chuàng)建索引的列稱(chēng)為索引列,通過(guò)索引列執(zhí)行查詢(xún)操作時(shí),可以避免全表掃描以及全分區(qū)掃描,從而提高查詢(xún)速度。然而在提高查詢(xún)速度的同時(shí),hive會(huì)額外消耗資源去創(chuàng)建索引,以及需要更多的磁盤(pán)空間存儲(chǔ)索引。索引可以總結(jié)為是一種以空間換取時(shí)間的方式。

Hive的索引其實(shí)是一張索引表,在表中存儲(chǔ)了索引列的值、索引列的值在HDFS對(duì)應(yīng)的數(shù)據(jù)文件路徑以及索引列的值在數(shù)據(jù)文件中的偏移量。涉及索引列的查詢(xún)時(shí),首先會(huì)去索引表中查找索引列的值在HDFS對(duì)應(yīng)的數(shù)據(jù)文件路徑以及索引列的值在數(shù)據(jù)文件中的偏移量,通過(guò)數(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)的類(lèi),通常使用類(lèi) org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler。

· ON TABLE base_table_name(col_name,..):用于指定數(shù)據(jù)表中創(chuàng)建索引的列。

· AS index_type:用于指定索引類(lèi)型。

· WITH DEFERRED REBUILD:可選,用于重建索引。

· IN TABLE index_table_name:可選,用于指定索引表的名稱(chēng)。

· ROWFORMAT:可選,用于序列化行對(duì)象。

· STOREDAS:可選,用于指定存儲(chǔ)格式。

· STOREDBY:可選,用于指定排序規(guī)則。

· LOCATION hdfs_path:可選,用于指定索引表在HDFS的存儲(chǔ)位置。

· TBLPROPERTIES:可選,用于指定索引表屬性。

· COMMENT“index comment”:可選,用于指定索引描述。

接下來(lái),在虛擬機(jī)Node_03中使用Hive客戶(hù)端工具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,指定索引類(lèi)型為org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler,指定索引表名稱(chēng)為index_name_table,指定索引表屬性create的屬性值為itcast,指定索引描述為index comment。


分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!