首页 > 解决方案 > Hive 中唯一行插入的约束

问题描述

我正在创建一个带有大型数据集的配置单元表,有没有办法在表上创建约束,以便在我们插入数据时没有两行是相同的。

标签: hivehiveql

解决方案


Hive 不提供经过验证的 UNIQUE、PRIMARY KEY 约束

从 2.1.0 开始,Hive 包括对未验证的主键和外键约束的支持。由于这些约束未经验证,上游系统需要在将数据加载到 Hive 之前确保数据完整性。从 3.0.0 开始,Hive 包括对 UNIQUE、NOT NULL、DEFAULT 和 CHECK 约束的支持。除了 UNIQUE 之外,所有三种类型的约束都被强制执行。

您可以将 DISTINCT 或 ROW_NUMBER 应用于所有数据集或分区。您也可以使用 UNION 旧数据和新数据来简单地删除重复项。如果你的表是分区的,你可以这样重写分区:

insert overwrite table MYTABLE partition(load_date='2020-07-25')
select col1, col2, ... colN
from MYTABLE where load_date='2020-07-25'
UNION
select  col1, col2, ... colN
from DAILY_INCREMENT_DATA

UNION 将返回不同的行。

有关使用 row_number 和其他加载方案的更多详细信息,另请参阅此答案。

Hive 2.2 还支持ACID 模式下的 MERGE


推荐阅读