因為業務要求,需要對Hive表進行delete,在官網查詢后,發現update和delete是一類問題。在此總結下如何實現Hive表的delete和update。
首先,先看下官網關於update和delete的相關說明,使用注意事項也請參考官網說明,這里只介紹如何實現相關功能。
綜合上述信息,Hive自0.14版本開始支持update和delete,要執行update和delete的表必須支持ACID,而關於ACID的詳細介紹,需要查看Hive Transactions.
經過對Hive Transactions相關內容的分析,我提取出了以下必要信息:
綜合上述信息,可以得出以下結論:
如果一個表要實現update和delete功能,該表就必須支持ACID,而支持ACID,就必須滿足以下條件:
1、表的存儲格式必須是ORC(STORED AS ORC);
2、表必須進行分桶(CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS);
3、Table property中參數transactional必須設定為True(tblproperties('transactional'='true'));
4、以下配置項必須被設定:
Client端:
- 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
- hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.DbTxnManager(經過測試,服務端也需要設定該配置項)
注意:上述配置項必須區分Client端和服務端。在Cloudera Manager上可以分別添加(hive—>配置—>高級),在更新部署配置信息的時候需要勾選部署客戶端配置(默認是勾選的)。
--------------------- 本文來自 狂奔吧蝸牛 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/xueyao0201/article/details/79387647?utm_source=copy