Hive查询语言中的主键和索引是否可行?

时间:2019-07-05 18:32:42

标签: oracle hive hiveql hive-query

我们正在尝试将oracle表迁移到配置单元并对其进行处理。 当前,oracle中的表具有主键,外键和唯一键约束。

我们可以在hiveql中复制相同的内容吗?

我们正在对实现方法进行一些分析。

1 个答案:

答案 0 :(得分:0)

Hive indexing在Hive 0.7.0(HIVE-417)中引入,并在Hive 3.0(HIVE-18448)中被删除。请阅读此Jira中的注释。该功能在Hive中完全没有用。这些索引对于大数据而言太昂贵了,RIP。

从Hive 2.1.0(HIVE-13290开始) Hive包括对未经验证的主键和外键约束的支持。这些约束没有得到验证,上游系统需要确保在将数据加载到Hive中之前的数据完整性。这些约束对于生成ER图和查询的工具很有用。同样,这种未经验证的约束也可以用作自我记录。如果表具有这种约束,则可以轻松找出应该是什么PK。

在Oracle数据库Unique中,PK和FK约束由索引支持,因此它们可以快速运行并且非常有用。但这不是Hive的工作方式以及它的设计目的。

在正常情况下是在HDFS中加载带有半结构化数据的超大文件时。在其上建立索引太昂贵,并且没有索引来检查PK违例仅可能扫描所有数据。通常,您不能在BigData中实施约束。上游过程可以照顾到数据的完整性和一致性,但这不能保证您最终不会在Hive中从其他来源加载的一些大表中违反PK。

某些文件存储格式(例如ORC)具有内部轻量级“索引”,可加快过滤速度并启用谓词下推(PPD),但使用此类索引未实现PK和FK约束。之所以无法这样做,是因为通常您可以在Hive中拥有许多属于同一表的文件,并且文件甚至可以具有不同的架构。为PB创建的Hive,您可以单次运行PB,数据可以是半结构化的,文件可以具有不同的架构。 Hadoop不支持随机写入,如果要重建索引,这会增加更多的复杂性和成本。