Hive建立索引
1.索引的作用
Hive支援索引,但是Hive的索引與關係型資料庫中的索引並不相同,比如,Hive不支援主鍵或者外來鍵。
Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如減少MapReduce任務中需要讀取的資料塊的數量。
在可以預見到分割槽資料非常龐大的情況下,索引常常是優於分割槽的。
雖然Hive並不像事物資料庫那樣針對個別的行來執行查詢、更新、刪除等操作。它更多的用在多工節點的場景下,快速地全表掃描大規模資料。但是在某些場景下,建立索引還是可以提高Hive表指定列的查詢速度。(雖然效果差強人意)
2.索引適用的場景
適用於不更新的靜態欄位。以免總是重建索引資料。每次建立、更新資料後,都要重建索引以構建索引表。
3.Hive索引的機制如下:
hive在指定列上建立索引,會產生一張索引表(Hive的一張物理表),裡面的欄位包括,索引列的值、該值對應的HDFS檔案路徑、該值在檔案中的偏移量;
v0.8後引入bitmap索引處理器,這個處理器適用於排重後,值較少的列(例如,某欄位的取值只可能是幾個列舉值)
因為索引是用空間換時間,索引列的取值過多會導致建立bitmap索引表過大。
但是,很少遇到hive用索引的。說明還是有缺陷or不合適的地方的。
4.索引的建立與使用
語法如下:
CREATE INDEX index_name
ON TABLE base_table_name (col_name, ...)
AS `index.handler.class.name`
[WITH DEFERRED REBUILD]
[IDXPROPERTIES (property_name=property_value, ...)]
[IN TABLE index_table_name]
[PARTITIONED BY (col_name, ...)]
[
[ ROW FORMAT ...] STORED AS ...
| STORED BY ...
]
[LOCATION hdfs_path]
[TBLPROPERTIES (...)]
[COMMENT "index comment"]
AS ...語句指定了 索引處理器,也就是一個實現了索引介面的Java類。
5.建立完索引之後 需要重建索引資料,會觸發一個mr job
ALTER INDEX employee_index
ON TABLE employee
PARTITION (country = `US`)
REBUILD;
6.建立完可以通過顯示命令顯示索引
SHOW FORMATTED INDEX ON employees;
7.想要索引在查詢時,生效,還得設定使用索引:預設是不使用的。
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;
8. 刪除索引
DROP INDEX IF EXISTS employees_index ON TABLE employees;
相關文章
- Hive9 索引Hive索引
- DocumentDB 建立索引索引
- mysql建立字首索引MySql索引
- 2020.9.28(Hive檢視、索引、許可權管理)Hive索引
- mongodb建立索引和刪除索引和背景索引backgroundMongoDB索引
- 在hive中建立幾種表Hive
- MySQL索引建立原則MySql索引
- postgresql怎麼建立索引SQL索引
- Lucene建立索引流程索引
- ElasticSearch分片互動過程(建立索引、刪除索引、查詢索引)Elasticsearch索引
- Oracle如何建立B樹索引Oracle索引
- 資料庫之建立索引資料庫索引
- 建立索引的優劣勢索引
- mysql建立索引和檢視MySql索引
- Oracle大表快速建立索引Oracle索引
- 【Mongo】MongoDB索引管理-索引的建立、檢視、刪除MongoDB索引
- Hive--->建立自定義的UDTF函式Hive函式
- 一起聊一聊hive的索引最佳化。Hive索引
- 建立索引後,速度變快原因?以及索引失效總結索引
- MySQL如何建立一個好索引?建立索引的5條建議【宇哥帶你玩轉MySQL 索引篇(三)】MySql索引
- mongodb資料庫如何建立索引?MongoDB資料庫索引
- elasticsearch(三)----索引建立與刪除Elasticsearch索引
- [20201110]oracle建立索引nosrt.txtOracle索引
- Mysql索引的建立與刪除MySql索引
- python建立elasticsearch索引的探討PythonElasticsearch索引
- 如何清除建立失敗的索引索引
- 聯合索引和多個單列索引使用中的索引命中情況及索引建立原則索引
- MySQL建立表的時候建立聯合索引的方法MySql索引
- mysql 建立和刪除聯合索引MySql索引
- 用SQL建立索引的方法步驟SQL索引
- 將資料匯入kudu表(建立臨時hive表,從hive匯入kudu)步驟Hive
- LOB欄位相關概念(自動建立LOB索引段和重建索引方法)索引
- 不停機狀態下使用Django建立索引Django索引
- [20200108]線上建立索引失敗分析.txt索引
- Mysql多列索引建立與優化.mdMySql索引優化
- windows10系統建立索引的方法Windows索引
- Elasticsearch6.2.4-利用head外掛建立索引Elasticsearch索引
- ORA-01658建立表或索引報錯分析索引