如何在Hive表中禁用事务?

3

我有一个Hive表,最初创建时是事务性的,但我希望在该表上禁用事务,因为实际上并不需要。

我尝试使用ALTER TABLE禁用它们,但是我收到了一个错误:

hive> ALTER TABLE foo SET TBLPROPERTIES('transactional'='false');
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. TBLPROPERTIES with 'transactional'='true' cannot be unset

我正在使用Hive 2.3.2


创建一个新表,据我所知这是你唯一的选择。 - Andrew
2个回答

0

你需要重新创建这个表。

如果需要的话,首先备份这个表。然后,DROP TABLE

使用 TBLPROPERTIES ( 'transactional'='false' ) 创建新表。

CREATE TABLE your_table(
  `col` string, 
  `col2` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
TBLPROPERTIES ( 
  'transactional'='false' 
)

您可以选择输入和输出格式


0
根据文档,不允许更改TBLPROPERTIES(“transactional”=“false”)。
您可以重新创建表。
首先备份表:
create table bkp_table as 
select * from your_table;

然后删除表并重新创建,不使用 transactional 属性。从备份中重新加载数据。

或者创建一个新表,从旧表中加载数据,删除旧表,重命名新表。


我认为你不能只是复制目录并在其上放置一个新的Hive表。Hive ACID表将具有基本和增量文件,不知道非ACID表如何能够读取这些文件。 - Andrew
@Andrew 非常感谢您的建议。 - leftjoin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接