Hive Table 是 MANAGED 或 EXTERNAL - 问题 post table 类型转换

Hive Table is MANAGED or EXTERNAL - issue post table type conversion

我在 XYZ 数据库中有一个配置单元 table,名为 ABC

当我从 hue 运行 describe formatted XYZ.ABC; 时,我得到以下内容..

Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True

那么这实际上是外部还是 managed/internal 配置单元 table?

这被视为 EXTERNAL table。删除 table 将保留基础 HDFS 数据。 table 类型显示为 MANAGED_TABLE,因为参数 EXTERNAL 设置为 True,而不是 TRUE

要修复此元数据,您可以 运行 此查询:

hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');

一些细节:

table XYZ.ABC 一定是通过这种查询创建的:

hive> CREATE TABLE XYZ.ABC
<additional table definition details>
TBLPROPERTIES (
  'EXTERNAL'='True');

描述此 table 将得到:

hive> desc formatted XYZ.ABC;
:
Location:               hdfs://<location_of_data>
Table Type:             MANAGED_TABLE
:
Table Parameters:
  EXTERNAL              True

删除此 table 将在 describe 输出中保留 Location 中引用的数据。

 hive> drop table XYZ.ABC;
 # does not drop table data in HDFS

Table Type 仍然显示为 MANAGED_TABLE,这令人困惑。

EXTERNAL 的值设置为 TRUE 将解决此问题。

hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');

现在,执行 describe 将按预期显示它:

hive> desc formatted XYZ.ABC;
:
Location:               hdfs://<location_of_data>
Table Type:             EXTERNAL_TABLE
:
Table Parameters:
    EXTERNAL                TRUE

例子-

让我们创建一个示例 MANAGED table,

CREATE TABLE TEST_TBL(abc int, xyz string);
INSERT INTO TABLE test_tbl values(1, 'abc'),(2, 'xyz');
DESCRIBE FORMATTED test_tbl;

将类型更改为外部 (使用 True 而不是 TRUE 的错误方式)

ALTER TABLE test_tbl SET TBLPROPERTIES('EXTERNAL'='True');

这给出了,

现在 删除 table, 下降 TABLE test_tbl;

结果:

Table is dropped but data on HDFS isn't. Showing correct external table behavior!

如果我们重新创建 table 我们可以看到数据存在:

CREATE TABLE test_tbl(abc int, xyz string);
SELECT * FROM test_tbl;

结果:

描述错误地将其显示为 MANAGED TABLEEXTERNAL True,因为:

.equals check in the meta

Hive 问题 JIRA:HIVE-20057

建议的修复:Use case insensitive equals