2021-11-04

hive 4.0.0 DDL

倾斜表

如果一个表中具有一个或多个列具有偏斜值,那么可以创建倾斜表来提高此表的性能。 通过指定经常出现的值(即倾斜值),Hive 会自动将这些值拆分为单独的文件(或表存储时的目录),并在查询期间考虑这一事实,如果可能的话,它可以跳过或包含整个文件(或目录)。可以在表创建期间在表级别进行指定。

下表表示字段key的1,5,6具有倾斜倾向

CREATE TABLE list_bucket_single (key STRING, value STRING)
  SKEWED BY (key) ON (1,5,6) [STORED AS DIRECTORIES];

具有两个倾斜列的示例:

CREATE TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING)
  SKEWED BY (col1, col2) ON (('s1',1), ('s3',3), ('s13',13), ('s78',78)) [STORED AS DIRECTORIES];

倾斜表的alter语句

ALTER TABLE table_name SKEWED BY (col_name1, col_name2, ...)
  ON ([(col_name1_value, col_name2_value, ...) [, (col_name1_value, col_name2_value), ...]
  [STORED AS DIRECTORIES];

STORED AS DIRECTORIES 选项确定倾斜表是否使用列表存储功能,该功能为倾斜值创建子目录。

ALTER TABLE table_name NOT SKEWED;

将倾斜表修改为非倾斜表。NOT SKEWED 选项使表不倾斜并关闭列表存储功能(因为列表存储表总是倾斜的)。 这会影响在 ALTER 语句之后创建的分区,但对在 ALTER 语句之前创建的分区没有影响。

ALTER TABLE table_name NOT STORED AS DIRECTORIES;

关闭列表分桶功能,但表仍然是倾斜的。

ALTER TABLE table_name SET SKEWED LOCATION (col_name1="location1" [, col_name2="location2", ...] );

这会更改列表分桶的位置映射。

临时表

已创建为临时表的表仅对当前会话可见。 数据将存储在用户的临时目录中,并在会话结束时删除。

如果临时表是使用数据库中已存在的永久表的数据库/表名称创建的,则在该会话中对该表的任何引用都将解析为临时表,而不是永久表。 如果不删除临时表或将其重命名为不冲突的名称,用户将无法访问该会话中的原始表。
	
临时表有以下限制:
	不支持分区。
	不支持创建索引。
从 Hive 1.1.0 开始,可以使用 hive.exec.temporary.table.storage 配置参数将临时表的存储策略设置为 memory、ssd 或默认值(请参阅 HDFS 存储类型和存储策略)。

创建临时表示例:

CREATE TEMPORARY TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING);

事务表

Hive 4.0 引入。
支持带有 ACID(原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)) 语义的操作的表。

事务表创建示例:

CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;

约束

Hive 2.1.0引入。
Hive 包括对未经验证的主键和外键约束的支持。 当存在约束时,一些 SQL 工具会生成更高效的查询。 由于这些约束未经验证,上游系统需要在将数据加载到 Hive 之前确保数据完整性。
create table pk(id1 integer, id2 integer,
  primary key(id1, id2) disable novalidate);
 
create table fk(id1 integer, id2 integer,
  constraint c1 foreign key(id1, id2) references pk(id2, id1) disable novalidate);

Hive 包括对 UNIQUE、NOT NULL、DEFAULT 和 CHECK 约束的支持。 除了 UNIQUE 之外,还强制执行所有三种类型的约束。

create table constraints1(id1 integer UNIQUE disable novalidate, id2 integer NOT NULL,
  usr string DEFAULT current_user(), price double CHECK (price > 0 AND price <= 1000));
 
create table constraints2(id1 integer, id2 integer,
  constraint c1_unique UNIQUE(id1) disable novalidate);
 
create table constraints3(id1 integer, id2 integer,
  constraint c1_check CHECK(id1 + id2 > 0));

不支持复杂数据类型(例如 map、struct、array)的 DEFAULT。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值