我们可以在Hive Table中有约束吗。这可能有两个表作为一个表与主键列和另一个表作为外键列
答案 0 :(得分:0)
不,这是不可能的。这就是Hive与传统RDBMS有很大不同的方式。
例如,Hive的一个重要特性是只需将文件添加到作为Hive表底层位置的HDFS目录即可“加载”数据。由于此操作根本不使用Hive,因此无法检查此新数据的约束。
Hive首先是批处理系统;这种行级检查根本不是重点。
答案 1 :(得分:0)
另外Joe K解释说,注意Hive是" Schema on Read",当使用" load inpath"加载数据时,底层数据不会抱怨。只有在阅读过程中才能完成检查。你想达到什么目的?。查询似乎更像是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 table语法进行更改。考虑下面的基本创建表
CREATE EXTERNAL TABLE products (
manufacturer string,
product string,
qty double,
listprice double)
row format delimited
fields terminated by '|'
location '<source location>'
在if&#39; |&#39;终止的字段中被忽略或替换为&#39;,&#39;表上的select完全不同,这就是检查发生的地方,如果qty获取字符串值,它就会失败。