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

4

2 回答 2

0

根据文档更改 TBLPROPERTIES ("transactional"="false") 是不允许的。

您可以重新创建表。

先做表备份:

create table bkp_table as 
select * from your_table;

然后删除表并再次创建没有transactional属性。从备份中重新加载数据。

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

于 2019-06-26T14:58:30.863 回答
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' 
)

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

于 2021-05-25T04:26:00.757 回答