hive中分区和索引的区别

Posted

技术标签:

【中文标题】hive中分区和索引的区别【英文标题】:Difference between partition and index in hive 【发布时间】:2015-04-09 08:05:04 【问题描述】:

我是 hadoop 和 hive 的新手,我会知道 hive中的索引和分区有什么区别?什么时候使用索引,什么时候分区?

谢谢!

【问题讨论】:

【参考方案1】:

索尼娅,

以下是书中可能对您有用的部分。

“Hive 的索引功能有限。在通常的关系数据库意义上没有键,但您可以在列上构建索引以加快某些操作。表的索引数据存储在另一个表中。 此外,该功能相对较新,因此还没有很多选择。但是,索引过程被设计为可使用插件 Java 代码进行定制,因此团队可以扩展该功能以满足他们的需求。 当逻辑分区实际上太多且太小而无用时,索引也是分区的一个很好的替代方法。索引可以帮助从表中修剪一些块作为 MapReduce 作业的输入。并非所有查询都可以从索引中受益——EXPLAIN 语法和 Hive 可用于确定给定查询是否由索引辅助。 Hive 中的索引与关系数据库中的索引一样,需要仔细评估。

维护索引需要额外的磁盘空间,而构建索引需要处理成本。用户在查询表时必须权衡这些成本和它们提供的好处。”

编程 Hive 书第 117 页

【讨论】:

【参考方案2】:

索引是新的和不断发展的(正在添加功能),但目前索引仅限于单个表,不能与外部表一起使用。创建索引会创建一个单独的表。索引可以分区(匹配基表的分区)。索引用于加快表内数据的搜索速度。

分区在 hdfs 级别提供数据隔离,为每个分区创建子目录。分区允许限制在查询中读取的文件数量和搜索的数据量。但是,要发生这种情况,必须在 WHERE 子句中指定分区列。

在构建数据模型时,您可以根据数据大小和预期的使用模式确定索引和/或分区的最佳使用方式。

【讨论】:

以上是关于hive中分区和索引的区别的主要内容,如果未能解决你的问题,请参考以下文章

Hive(大数据)- 分桶和索引之间的区别

分区和分桶区别

hive里的索引

全局索引和本地索引的区别

oracle 全局索引和局部索引的区别和作用

hive 索引