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

相關文章
相關標籤/搜索