hive索引
索引 hive
2023-06-13 09:15:03 时间
目录
一、什么是索引
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
官网索引介绍地址:
LanguageManual Indexing - Apache Hive - Apache Software Foundation
二、原理
Hive可以在指定列上建立索引,会产生一张索引表(Hive的一张物理表),里面的字段包括,索引列的值、该值对应的HDFS文件路径、该值在文件中的偏移量;在执行索引字段查询时候,首先额外生成一个MapReduce job,根据对索引列的过滤条件,从索引表中过滤出索引列的值对应的hdfs文件路径及偏移量,输出到hdfs上的一个文件中,然后根据这些文件中的 hdfs路径和偏移量,筛选原始input文件,生成新的split,作为整个job的split,达到不用全表扫描的目的。 不过从Hive3.0开始,Hive已经移除了索引。
移除索引后的替代方案:
1.可以自动重写的物化视图 2.使用列式文件格式(Parquet、ORC)ps:可以进行选择性扫描;甚至可以跳过整个文件/块。
三、详细内容
创建、查看与删除索引
Create/build, show, and drop index:
CREATE INDEX table01_index ON TABLE table01 (column2) AS 'COMPACT';
SHOW INDEX ON table01;
DROP INDEX table01_index ON table01;
先创建在构建、查看与删除索引
Create then build, show formatted (with column names), and drop index:
CREATE INDEX table02_index ON TABLE table02 (column3) AS 'COMPACT' WITH DEFERRED REBUILD;
ALTER INDEX table02_index ON table2 REBUILD;
SHOW FORMATTED INDEX ON table02;
DROP INDEX table02_index ON table02;
创建位图(bitmap)索引、查看与删除
Create bitmap index, build, show, and drop:
CREATE INDEX table03_index ON TABLE table03 (column4) AS 'BITMAP' WITH DEFERRED REBUILD;
ALTER INDEX table03_index ON table03 REBUILD;
SHOW FORMATTED INDEX ON table03;
DROP INDEX table03_index ON table03;
在一张新表上创建索引
Create index in a new table:
CREATE INDEX table04_index ON TABLE table04 (column5) AS 'COMPACT' WITH DEFERRED REBUILD IN TABLE table04_index_table;
创建RCFile格式的索引
Create index stored as RCFile:
CREATE INDEX table05_index ON TABLE table05 (column6) AS 'COMPACT' STORED AS RCFILE;
创建TEXTFILE格式的索引
Create index stored as text file:
CREATE INDEX table06_index ON TABLE table06 (column7) AS 'COMPACT' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
创建带有索引属性的索引
Create index with index properties:
CREATE INDEX table07_index ON TABLE table07 (column8) AS 'COMPACT' IDXPROPERTIES ("prop1"="value1", "prop2"="value2");
创建带有表属性的索引
Create index with table properties:
CREATE INDEX table08_index ON TABLE table08 (column9) AS 'COMPACT' TBLPROPERTIES ("prop3"="value3", "prop4"="value4");
删除索引
Drop index if exists:
DROP INDEX IF EXISTS table09_index ON table09;
在分区上重建索引
Rebuild index on a partition:
ALTER INDEX table10_index ON table10 PARTITION (columnX='valueQ', columnY='valueR') REBUILD;
四、完整流程示例
1.创建索引语法
-- 创建创建索引
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 ‘index.handler.class.name’
一般使用org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler处理器
表明创建一个空索引 [WITH DEFERRED REBUILD]
索引的参数 [IDXPROPERTIES (property_name=property_value, …)]
索引存储在哪个表 [IN TABLE index_table_name]
指定分区创建索引,不指定默认所有分区都创建索引
[PARTITIONED BY (col_name, …)]
[
[ ROW FORMAT …] STORED AS …
| STORED BY …
]
2.生成索引
alter index 索引名称 on 表名 rebuild;
3.查看索引
SHOW FORMATTED INDEX ON table_name;
4.更新索引属性
ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;
5.删除索引
DROP INDEX [IF EXISTS] index_name ON table_name;
相关文章
- mysql添加索引命令
- 深入理解MySQL索引原理和实现——为什么索引可以加速查询?
- mysql创建索引视图_mysql中创建视图、索引[通俗易懂]
- 【Hive】hive 数据倾斜、优化策略、hive执行过程、垃圾回收
- Hive修改字段类型_hive表添加字段sql
- SpringDataElasticsearch操作Elasticsearch关于索引数据CRUD
- 技术分享 | MySQL 覆盖索引优化案例一则
- 理论:第三章:索引使用的限制条件,sql优化有哪些,数据同步问题(缓存和数据库),缓存优化
- 高性能索引-高性能索引策略二详解数据库
- Hive(二)hive的基本操作详解大数据
- Hive(六)hive执行过程实例分析与hive优化策略详解大数据
- 索引之路:Oracle 数据库建立索引(oracle建立索引)
- 什么MySQL添加索引的实现方法探究(mysql添加索引命令是)
- 使用Oracle索引优化数据库性能(oracle索引如何使用)
- Oracle索引统计优化,提高数据库性能(oracle索引统计)
- Hive数据迁移到Redis:快速高效的数据处理方案(hive到redis)
- 如何安装Hive和MySQL数据库?(hive及mysql安装)
- 使用Hive将MySQL完美配置(hive配置mysql)
- 如何使用Oracle创建索引(oracle怎么创建索引)
- Hive安装MySQL:权限控制的改变(hive安装mysql)
- 使用Hive将数据导入MySQL(hive数据导入mysql)
- 驱动Hive使用Oracle驱动配置实现数据连通(hive配置oracle)
- 从Hive视图实现Oracle存储过程(hive视图oracle)
- Hive数据抽取Oracle一体化解决方案(hive抽到oracle)
- Oracle中如何增强数据库性能加索引(oracle中加索引)