索引只不过是表中特定列上的指针。创建索引意味着在表的特定列上创建指针。如果一列在表中被编入索引,那么在查询特定列时,该列的数据是如何指向的?
iq0todco1#
从文档中配置单元索引的目标是提高表中某些列的查询查找速度。如果没有索引,使用“where tab1.col1=10”等 predicate 的查询将加载整个表或分区并处理所有行。但是,如果col1存在索引,那么只需要加载和处理文件的一部分。索引所能提供的查询速度的提高是以创建索引的额外处理和存储索引的磁盘空间为代价的。在场景后面,hive基本上创建了一个Map,其中包含它正在索引的列的值和hdfs中数据所在的offset+文件,这样,hive就不需要扫描所有数据来搜索某个值。这是一篇解释基本概念的好文章https://acadgild.com/blog/indexing-in-hive/
1条答案
按热度按时间iq0todco1#
从文档中
配置单元索引的目标是提高表中某些列的查询查找速度。如果没有索引,使用“where tab1.col1=10”等 predicate 的查询将加载整个表或分区并处理所有行。但是,如果col1存在索引,那么只需要加载和处理文件的一部分。索引所能提供的查询速度的提高是以创建索引的额外处理和存储索引的磁盘空间为代价的。
在场景后面,hive基本上创建了一个Map,其中包含它正在索引的列的值和hdfs中数据所在的offset+文件,这样,hive就不需要扫描所有数据来搜索某个值。这是一篇解释基本概念的好文章
https://acadgild.com/blog/indexing-in-hive/