更新/删除不使用 AcidOutputFormat 或未分桶的表

Posted

技术标签:

【中文标题】更新/删除不使用 AcidOutputFormat 或未分桶的表【英文标题】:Update/delete on table that does not use AcidOutputFormat or not bucketed 【发布时间】:2017-09-04 19:16:20 【问题描述】:

我已经使用以下属性更新了 hive-site.xml 文件:

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

我正在尝试使用以下命令更新表:

update employee_basic set dept = 'IT';

但出现错误:

失败:SemanticException [错误 10297]:尝试进行更新或 删除不使用的表employee_det.employee_basic AcidOutputFormat 或未分桶

【问题讨论】:

你的表存储格式是? 行格式表 存储为...? 【参考方案1】:

根据给定的详细信息,您似乎已启用 Hive ACID

对于ACID,支持表需要为ORC 格式并启用存储桶。

我看到您已启用存储桶,但不确定表格是否为 ORC 格式。使用 show create table 检查表定义,以了解它是否满足上述条件。

查看更多详情 https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions

【讨论】:

【参考方案2】:

"此第一个版本仅支持 ORC 文件格式。该功能 已构建使得任何存储都可以使用事务 可以确定更新或删除如何应用于基本记录的格式 (基本上,它具有显式或隐式行 id),但到目前为止 只为 ORC 完成了集成工作。”

https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions

【讨论】:

以上是关于更新/删除不使用 AcidOutputFormat 或未分桶的表的主要内容,如果未能解决你的问题,请参考以下文章

我想删除从光标获取的数据而不使用更新

使用 jquery.dataTables 从 observableArray 中删除项目后 UI 不更新

MySQL 更新和删除

SwipeCellKit:为啥从列表中删除一个项目,不更新 UITableview?

在不删除数据的情况下更新数据库架构?

Gridstack在删除时不更新