【问题标题】:Primary keys and indexes in Hive query language is poosible or not?Hive 查询语言中的主键和索引是否可行?
【发布时间】:2019-11-16 08:52:36
【问题描述】:

我们正在尝试将 oracle 表迁移到 hive 并对其进行处理。 目前oracle中的表有primary key,foreign keyunique key约束。

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

我们正在对如何实现它进行一些分析。

【问题讨论】:

  • 如果这个“Hive”产品没有文档记录且不受支持,我会质疑将生产系统迁移到它是否明智。

标签: oracle indexing hive hiveql hive-query


【解决方案1】:

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

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

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

很正常的情况是当您在 HDFS 中加载带有半结构化数据的非常大的文件时。在其上建立索引成本太高,而且没有索引来检查 PK 违规只能扫描所有数据。通常你不能在大数据中强制执行约束。上游进程可以关注数据的完整性和一致性,但这并不能保证您最终不会在从不同来源加载的某些大表中的 Hive 中出现 PK 违规。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2016-06-30
    • 2022-06-12
    • 2021-01-08
    相关资源
    最近更新 更多