Hive 开启事务ACID 运行删和改操纵

藏宝库编辑 7 天前 3677 0 来自 中国
                Hive 开启事务ACID  运行删和改操纵




事务表的实用场景


对于数仓中的行级数据更新删除需求比力频仍的,可以考虑使用事务表。
但平常的hive表并不建议使用事务表。因为事务表的限定很多,加上由于hive表的特性,也很难满意高并发的场景。别的,如果事务表太多,而且存在大量的更新操纵,metastore后台启动的合并线程会定期的提交MapReduce Job,也会肯定水平上增重集群的负担。
结论: 除非有非常急迫的行级更新需求,又只能用hive表来做,才必要去考虑事务表。
留意事项

不支持 BEGIN、COMMIT、ROLLBACK 等语句,所有的语句都是自动提交
仅支持ORC格式
设置开启事务

1、设置Hive支持事务(Hive 2.0版)


<property>
    <name>hive.support.concurrency</name>
    <value>true</value>
</property>
<property>
    <name>hive.exec.dynamic.partition.mode</name>
    <value>nonstrict</value>
</property>
<property>
    <name>hive.txn.manager</name>
    <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
    <name>hive.compactor.initiator.on</name>
    <value>true</value>
</property>
<property>
    <name>hive.compactor.worker.threads</name>
    <value>1</value>
</property>
  <property>
    <name>hive.enforce.bucketing</name>
    <value>true</value>
  </property>
2、测试



--事务表  能更新的 必须是分桶的(可以分区) 存储为orc 的表并在属性中运行事务才可以
-- 分区分桶表
CREATE  TABLE t2 (id INT, name STRING) PARTITIONED BY (country STRING, state STRING)
CLUSTERED BY (id) INTO 8 BUCKETS
STORED AS ORC TBLPROPERTIES ('transactional'='true');


insert into t2 partition(country='cn',state='sd')  values(1,'ceshi');


2.png update t2
set name='good'
where id=1;


delete from t2 where id =1;
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:50, Processed in 0.173147 second(s), 36 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表