设置事务表属性会导致外部表
Posted
技术标签:
【中文标题】设置事务表属性会导致外部表【英文标题】:Setting transactional-table properties results in external table 【发布时间】:2021-03-01 18:35:44 【问题描述】:我正在通过Impala
创建一个托管表,如下所示:
CREATE TABLE IF NOT EXISTS table_name
STORED AS parquet
TBLPROPERTIES ('transactional'='false', 'insert_only'='false')
AS ...
这将导致 managed table
不支持 HIVE-ACID
。
但是,当我运行命令时,我仍然会得到一个外部表。
这是为什么呢?
【问题讨论】:
【参考方案1】:我在Cloudera documentation 中发现,在创建表时忽略EXTERNAL-关键字并不意味着该表将被明确管理:
在CREATE TABLE语句中使用EXTERNAL关键字时,HMS将表存储为外部表。当您省略 EXTERNAL 关键字并创建托管表或提取托管表时,HMS 可能会将表转换为外部表或创建表可能会失败,具体取决于表属性。
因此,设置transactional=false
和insert_only=false
在Hive Metastore的解释中导致External Table
。
有趣的是,只有设置 TBLPROPERTIES ('transactional'='false')
会被完全忽略,并且仍会导致托管表具有 transactional=true
)。
【讨论】:
以上是关于设置事务表属性会导致外部表的主要内容,如果未能解决你的问题,请参考以下文章
oracle11g,18存储结构:暂时表,手工条带化,表/索引迁移表空间,删除表,外部表