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中分区和索引的区别的主要内容,如果未能解决你的问题,请参考以下文章