[Hive]Hive表开启事务

限制条件:

  1. 所有DML操作都是自动提交,尚不支持BEGIN,COMMIT,和ROLLBACK,计划在将来的版本中支持这些特性。
  2. 在第一个版本中只支持ORC文件格式。构建事务特性的初衷是可以使用任何存储格式,只要这些存储格式可以确定如何更新或删除基本记录(基本上,具有显式或隐式的行id即可),但到目前为止,仅完成针对ORC的集成工作。
  3. 默认情况下,事务被配置为OFF。有关配置值的讨论,请参见下面的配置部分。
  4. 要使用事务特性,表必须分桶。在同一系统中的不使用事务和ACID的表则无需分桶。外部表不能成为ACID表,因为外部表上的更改超出了紧缩器的控制范围(hive-13175)。
  5. 不允许从非ACID的会话中读取/写入ACID表。换句话说,要操作ACID表,必须将Hive事务管理器设置为org.apache.hadoop.hive.ql.lockmgr.DbTxnManager。
  6. 现在只支持快照隔离级别。当一个给定的查询启动时,它会提供该数据的一致快照。不支持脏读(READ UNCIMMITTED)、提交读(READ COMMITTED)、可重复读(REPEATABLE READ)或可序列化(SERIALIZABLE)。引入BEGIN的目的是在事务持续时间内支持快照隔离,而不仅仅是一个查询。根据用户请求,还可以添加其他隔离级别。
  7. 现有的ZooKeeper和内存锁管理器与事务不兼容。
  8. 原来ACID表不支持使用ALTER TABLE更改Schema,参见Hive-11421。
  9. 使用Oracle作为Metastore DB和“datanucleus.connectionPoolingType = BONECP”时,可能偶发性产生 “No such lock ...”和“No such transaction...”的错误。在这种情况下,建议设置“datanucleus.connectionPoolingType = DBCP”。
  10. LOAD DATA ...语句不支持事务性表,直到Hive-16732才能正确执行。

1.1设置参数

SET hive.support.concurrency = true;

SET hive.enforce.bucketing = true;

SET hive.exec.dynamic.partition.mode = nonstrict;

SET hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;

SET hive.compactor.initiator.on = true;

SET hive.compactor.worker.threads = 1;

1.2创建表时指定开启事务

create table emp_trans (

emp_id int,

name string

) clustered by (emp_id) into 2 buckets

  row format delimited

fields terminated by '\t'

  collection items terminated by '-'

  map keys terminated by ':'

stored as orc

tblproperties ('transactional'='true');

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值