设置事务表属性会导致外部表

ctrmrzij  于 2021-07-13  发布在  Hadoop
关注(0)|答案(1)|浏览(397)

我正在通过创建托管表 Impala 具体如下:

CREATE TABLE IF NOT EXISTS table_name
    STORED AS parquet
    TBLPROPERTIES ('transactional'='false', 'insert_only'='false')
    AS ...

这将导致 managed table 它不支持 HIVE-ACID . 但是,当我运行命令时,我仍然会得到一个外部表。为什么会这样?

qgelzfjb

qgelzfjb1#

我在cloudera文档中发现,在创建表时忽略external关键字并不意味着表将得到明确的管理:
在CREATETABLE语句中使用external关键字时,hms将该表存储为外部表。当您省略external关键字并创建托管表或摄取托管表时,hms可能会将该表转换为外部表,或者表创建可能会失败,具体取决于表属性。
因此,设置 transactional=false 以及 insert_only=false 导致 External Table 在Hive元存储的解释中。
有趣的是,只有 TBLPROPERTIES ('transactional'='false') does被完全忽略,仍然会导致托管表 transactional=true ).

相关问题