【发布时间】:2014-05-09 13:36:12
【问题描述】:
我们可以在 Hive 表中设置约束吗?是否可以将两个表作为一个具有主键列的表和另一个作为外键列的表
【问题讨论】:
标签: hive
我们可以在 Hive 表中设置约束吗?是否可以将两个表作为一个具有主键列的表和另一个作为外键列的表
【问题讨论】:
标签: hive
不,这是不可能的。这说明 Hive 与传统 RDBMS 有很大不同。
例如,Hive 的一个关键特性是,您只需将文件添加到作为 Hive 表的底层位置的 HDFS 目录即可将数据“加载”到其中。由于此操作根本不使用 Hive,因此无法检查此新数据的约束。
Hive 首先是一个批处理系统;这种行级检查根本不是重点。
【讨论】:
除了 Joe K 解释的内容之外,请注意 Hive 是“读取模式”,当使用“加载输入路径”等加载数据时,底层数据不会抱怨。只有在读取过程中才会完成检查。你想达到什么目的?。该查询似乎更像是 RDBMS 要求。
相同基础数据的读取架构可能不同。例如。让我们考虑以下示例数据集(关注格式)
Manufacturer | product | qty| list price
Manu1, CA| home, accessories | 12 | 73.11
Manu2, GA| mobile phone | 25 | 200
Manu3, TX| mattress | 3 | 1000
配置单元表内容会根据您的创建表语法而改变。考虑下面的基本创建表
CREATE EXTERNAL TABLE products (
manufacturer string,
product string,
qty double,
listprice double)
row format delimited
fields terminated by '|'
location '<source location>'
在以 if '|' 结尾的字段中被忽略或替换为“”,表上的选择完全不同,这就是检查发生的地方,如果 qty 获得字符串值,它将失败。
【讨论】: