Attempt to do update or delete using transaction manager that does not support these operations


背景說明
刪除只能在支持ACID的表上執行。

ACID 代表數據庫事務的四個特征:

原子性(手術完全成功或失敗,它沒有離開部分數據)
一致性(一旦應用程序執行一個操作,操作的結果是可見的在每個后續操作)
隔離(由一個用戶一個不完整的操作不會引起意想不到的副作用為其他用戶)
持久性(一個操作完成后它將被保留下來即使面對機器或系統故障)。
長期以來,人們期望數據庫系統具有這些特性,並將其作為事務功能的一部分。

從Hive 0.14.0開始,如果要在 ACID 寫操作(插入、更新、刪除)中使用表,則必須在該表上設置表屬性“transactional=true”。

注意,一旦一個表通過 TBLPROPERTIES(“transactional”=“true”)被定義為一個ACID表,它就不能被轉換回一個非 ACID 表,即,不允許更改 TBLPROPERTIES(“transactional”=“false”)。

hive.txn.manager 必須設置為 org.apache.hadoop.hive.ql.lockmgr.DbTxnManager 。可以在 hive-site.xml 中使用 DbTxnManager,也可以在會話開始時運行任何查詢之前使用 DbTxnManager。在HIVE-11716之前,insert 使用之前的,update 和 delete 將被禁止。因為 HIVE-11716 操作不允許在沒有 DbTxnManager 的 ACID 表上進行。然而,這並不適用於Hive 0.13.0。

如果表所有者不希望系統自動決定什么時候進行壓縮,那么可以設置表屬性“NO_AUTO_COMPACTION”。這將阻止所有的自動壓縮。手動壓縮仍然可以使用 Alter Table/Partition Compact 語句完成。

在創建或更改表時,使用 TBLPROPERTIES 子句設置表屬性。在 Hive 0.x 和 1.0中,“transactional”和“NO_AUTO_COMPACTION”表屬性是區分大小寫的,但是從1.1.0版本(HIVE-8308)開始它們就不區分大小寫。

在Hive 1.3.0和2.1.0中,可以通過 TBLPROPERTIES 設置更多的壓縮相關選項。它們可以通過 CREATE TABLE 在表級設置,也可以通過 ALTER TABLE/PARTITION COMPACT 在請求級設置。它們用於覆蓋倉庫/表范圍的設置。例如,要覆蓋MR屬性以影響壓縮作業,可以在 CREATE TABLE 語句中添加"compactor.<mr property name>=<value>",或者在通過 ALTER TABLE 顯式啟動壓縮時。"<mr property name>=<value>"將在壓縮mr作業的JobConf上設置。同樣,"tblprops.<prop name>=<value>"可用於設置/覆蓋任何表屬性,這些屬性是由運行在集群上的代碼解釋的。最后,"compactorthreshold.<prop name>=<value>"可以用來覆蓋屬性從"新的配置事務參數"的上面的表“.threshold”和控制何時由系統觸發壓縮。

解決樣例:

在建表時設置 TBLPROPERTIES 中的壓縮選項和 transactional
CREATE TABLE table_name (
id int,
name string
)
CLUSTERED BY (id) INTO 2 BUCKETS STORED AS ORC
TBLPROPERTIES ("transactional"="true",
"compactor.mapreduce.map.memory.mb"="2048", -- specify compaction map job properties
"compactorthreshold.hive.compactor.delta.num.threshold"="4", -- trigger minor compaction if there are more than 4 delta directories
"compactorthreshold.hive.compactor.delta.pct.threshold"="0.5" -- trigger major compaction if the ratio of size of delta files to
-- size of base files is greater than 50%
);
通過 ALTER 更改 TBLPROPERTIES 中的壓縮選項
ALTER TABLE table_name COMPACT 'minor'
WITH OVERWRITE TBLPROPERTIES ("compactor.mapreduce.map.memory.mb"="3072"); -- specify compaction map job properties
ALTER TABLE table_name COMPACT 'major'
WITH OVERWRITE TBLPROPERTIES ("tblprops.orc.compress.size"="8192"); -- change any other Hive table properties
ALTER TABLE app_mbl_user_trmnl_trail_info_d1 SET TBLPROPERTIES ("transactional"="true"); -- 更改為事務表ACID,前提表的格式是ACID支持的,例如 orc
注意,一旦一個表通過 TBLPROPERTIES(“transactional”=“true”)被定義為一個ACID表,它就不能被轉換回一個非 ACID 表,即,不允許更改 TBLPROPERTIES(“transactional”=“false”)。

注意:在往 ACID 表中 insert 數據之前,應該先 set hive.support.concurrency=true;set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;否則會報以下錯誤:This command is not allowed on an ACID table mydb1.table_name with a non-ACID transaction manager


————————————————
版權聲明:本文為CSDN博主「飛朋」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zpf_940810653842/article/details/102513730


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM