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

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

更新時間:2023-08-01 來源:黑馬程序員 瀏覽量:

IT培訓班

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

Hive的索引其實是一張索引表,在表中存儲了索引列的值、索引列的值在HDFS對應(yīng)的數(shù)據(jù)文件路徑以及索引列的值在數(shù)據(jù)文件中的偏移量。涉及索引列的查詢時,首先會去索引表中查找索引列的值在HDFS對應(yīng)的數(shù)據(jù)文件路徑以及索引列的值在數(shù)據(jù)文件中的偏移量,通過數(shù)據(jù)文件路徑和偏移量去掃描全表的部分數(shù)據(jù),從而避免全表掃描。

創(chuàng)建索引的語法格式如下。

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"];

上述語法的具體講解如下。

· CREATEINDEX:表示創(chuàng)建索引的語句。

· index_name:用于指定創(chuàng)建索引時實現(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:可選,用于序列化行對象。

· STOREDAS:可選,用于指定存儲格式。

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

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

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

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

接下來,在虛擬機Node_03中使用Hive客戶端工具Beeline,遠程連接虛擬機Node_02的HiveServer2服務(wù)操作Hive,為數(shù)據(jù)庫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ù)庫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。


分享到:
在線咨詢 我要報名
和我們在線交談!