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
而后点击保存更改,分发配置就能够了。数据库
若是要支持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
执行测试
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';