hive增长Update、Delete支持


1、配置hive-site.xml

CDH版本先进入Hive配置页

选择高级,找到hive-site.xml 的 Hive 客户端高级配置代码段配置项

点击+号,增长以下配置项sql

 
 
 
 
hive.support.concurrency = true hive.enforce.bucketing = true hive.exec.dynamic.partition.mode = nonstrict hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager hive.compactor.initiator.on = true hive.compactor.worker.threads = 1


而后点击保存更改,分发配置就能够了。数据库

2、建表

若是要支持delete和update,则必须输出是AcidOutputFormat而后必须分桶。
并且目前只有ORCFileformat支持AcidOutputFormat,不只如此建表时必须指定参数('transactional' = true)
apache

 
 
 
 
USE test;DROP TABLE IF EXISTS S1_AC_ACTUAL_PAYDETAIL;CREATE TABLE IF NOT EXISTS S1_AC_ACTUAL_PAYDETAIL(INPUTDATE STRING,SERIALNO STRING,PAYDATE STRING,ACTUALPAYDATE STRING,CITY STRING,PRODUCTID STRING,SUBPRODUCTTYPE STRING,ISP2P STRING,ISCANCEL STRING,CDATE STRING,PAYTYPE STRING,ASSETSOWNER STRING,ASSETSOUTDATE STRING,CPD DOUBLE,PAYPRINCIPALAMT BIGINT,PAYINTEAMT BIGINT,A2 BIGINT,A7 BIGINT,A9 BIGINT,A10 BIGINT,A11 BIGINT,A12 BIGINT,A17 BIGINT,A18 BIGINT,PAYAMT BIGINT,LOANNO STRING,CREATEDATE STRING,CUSTOMERID STRING,etl_in_dt string)CLUSTERED BY (SERIALNO) --根据某个字段分桶INTO 7 BUCKETS --分为多少个桶ROW FORMAT DELIMITEDFIELDS TERMINATED BY ','LINES TERMINATED BY '\n'STORED AS ORCLOCATION '/user/hive/test/S1_AC_ACTUAL_PAYDETAIL' TBLPROPERTIES('transactional'='true');--增长额描述信息,好比最后一次修改信息,最后一个修改人。

注:因为cdh自动的在元数据里面建立了COMPACTION_QUEUE表,因此博客中说的那个问题不存在
oop

3、操做

执行测试

 
 
 
 
update test.S1_AC_ACTUAL_PAYDETAIL set city='023' where SERIALNO = '20688947002';

操做100条数据,平均每条花费2秒多,其中执行花费1秒左右。相对仍是能接受的。ui

 
 
 
 
delete from test.S1_AC_ACTUAL_PAYDETAIL where SERIALNO = '20688947002';

4、总结

  • 一、Hive能够经过修改参数达到修改和删除数据的效果,可是速度远远没有传统关系型数据库快
  • 二、经过ORC的每一个task只输出单个文件和自带索引的特性,以及数据的分桶操做,能够将要修改的数据锁定在一个很小的文件块,所以能够作到相对便捷的文件修改操做。所以数据的分桶操做很是重要,一般一些表单信息都会根据具体的表单id进行删除与修改,所以推荐使用表单ID做为分桶字段。
  • 三、频繁的update和delete操做已经违背了hive的初衷。不到万不得已的状况,仍是使用增量添加的方式最好。

参考资料:hive0.14-insert、update、delete操做测试url

相关文章
相关标签/搜索