HIVE Temporary Table&Constraint(九)

HIVE Temporary Table&Constraint

这两介绍下hive的临时表和表约束。

Temporary Table

创建的临时表仅仅在当前会话是可见的,数据将会被存储在用户的暂存目录中,并在会话结束时被删除。如果创建临时表的名字与当前数据库下的一个非临时表相同,则在这个会话中使用这个表名字时将会使用的临时表,而不是非临时表,用户在这个会话内将不能使用原表,除非删除或者重命名临时表。
临时表有如下限制:

  • 不支持分区字段
  • 不支持创建索引

在Hive1.1.0之后临时表可以存储到memory,ssd或者default中,可以通过配置 hive.exec.temporary.table.storage来实现,存储策略可以参考文献3。
一般使用CREATE TEMPORARY TABLE ….来创建临时表。临时表也支持多种创建操作和insert操作。
CREATE TEMPORARY TABLE ….,CTAS, CTL, INSERT INTO。

Constraints

Hive包含对未经验证的主键和外键约束的支持,一些sql工具在存在约束时会生成更加高效的查询,由于这些限制条件未经验证,上游系统在加载到Hive之前需要确保数据的完整性。
常用的PK( PRIMARY KEY)和FK(FOREIGN KEY)约束使用如下:

CREATE TABLE product 
  ( 
     product_id        INTEGER, 
     product_vendor_id INTEGER, 
     PRIMARY KEY (product_id)  DISABLE NOVALIDATE, 
     CONSTRAINT product_fk_1 FOREIGN KEY (product_vendor_id) REFERENCES vendor(vendor_id)  DISABLE NOVALIDATE
  ); 

CREATE TABLE vendor 
  ( 
     vendor_id INTEGER, 
     PRIMARY KEY (vendor_id)  DISABLE NOVALIDATE RELY
  ); 

create table pk(id1 integer, id2 integer,
  primary key(id1, id2) disable novalidate);

在上面的语法中,需要注意一下几点:

  • [CONSTRAINT constraint-Name]是可选的,定义一个约束名称,若是没有指定系统会生成一个约束名称,为简单起见,CONSTRAINT在外键时可以使用,因为每个表只有一个主键因此没有必要定义约束名称。
  • RELY/NORELY同样是可选的。如果一个约束指定RELY,也就是希望HIVE CBO(cost based optimize)使用约束信息来获得更好的统计,对不必要的连接删除( join
    elimination),来得到更好的整体执行计划。
  • DISABLE 和NOVALIDATE现在是强制性的因为现在暂不支持默认的ENABLE 和VALIDATE,实际上就是上边介绍的hive未验证约束。
  • 一个表只允许有一个主键约束。
  • 正常来说外键的引用必须是唯一性索引,也就是unique或者主键,但是hive目前并不支持unique,因此目前外键的父列必须是主键。

hive对约束也支持alter语句如下:

ALTER TABLE sales
ADD CONSTRAINT pk1 PRIMARY KEY (sales_id) DISABLE NOVALIDATE;
ALTER TABLE product
ADD CONSTRAINT fk1 FOREIGN KEY p_id REFERENCES owner(o_id)DISABLE
NOVALIDATE;
ALTER TABLE sales
DROP CONSTRAINT pk1;
ALTER TABLE product
DROP CONSTRAINT fk1;

参考文献

1.HIVE-7090
2.HIVE Temporary Tables
3.HDFS Storage Types and Storage Policies
4.HIVE-13290
5.HIVE-13076
6.HIVE-13019

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值