hive之事务表

一、背景介绍

  1. Hive 在设计之初时,是不支持事务操作的,因为 Hive 的核心目标将已存在的结构化数据文件映射成表,然后提供基于表的SQL分析处理;是一款面向分析的工具。且映射的文件存在 HDFS 中,其本身也不支持随机修改文件的数据
  2. 这个定位就意味着早期的 HQL 本身就不支持 update、delete 语法,也就没有所谓的事务支持
  3. 从 Hive 0.14版本开始,具有 ACID 语义的事务已添加到 Hive 中,以解决缓慢变化维表或部分数据不正确,需要更正的情况
  4. 最终 Hive 支持了具有 ACID 语义的事务,但做不到和传统关系型数据库那样的事务级别,仍有很多局限如:
    1. 不支持 begincommitrollback,所有操作自动提交
    2. 仅支持 orc 文件格式
    3. 默认事务关闭,需要额外配置
    4. 表参数 transactional 必须为 true
    5. 外部表不能成为 ACID 表,不允许从非 ACID 会话读取/写入 ACID 表

二、实操

开启事务

# 开启 hive 并发
set hive.support.concurrency = true;
# 配置事务管理类,默认
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;

创建事务表

create table tran_ts
(
    id   int,
    name string
) clustered by (id) into 4 buckets
    stored as orc
    tblproperties ('transactional' = 'true');

进行事务操作

insert into tran_ts values (1, 'zs');
update tran_ts set name = 'zhang' where id = 1;
delete from tran_ts where id = 1;

底层并不会修改数据
在这里插入图片描述
如何理解:不允许从非 ACID 会话读取/写入 ACID 表?
在这里插入图片描述
当前会话由于开启了事务,所以可以查询这张事务表,当开启一个新的会话直接查询就会报错
在这里插入图片描述

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王是个弟弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值