0

我在XYZ名为 的 db中有一个配置单元表ABC

当我describe formatted XYZ.ABC;从色调中运行时,我得到以下信息..

显示为外部的托管表

那是

Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True

那么这实际上是外部还是托管/内部配置单元表?

4

2 回答 2

0

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

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

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

一些细节:

该表XYZ.ABC必须是通过这种查询创建的:

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

描述此表将给出:

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

删除此表将保留Locationdescribe输出中引用的数据。

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

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

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

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

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

hive> desc formatted XYZ.ABC;
:
Location:               hdfs://<location_of_data>
Table Type:             EXTERNAL_TABLE
:
Table Parameters:
    EXTERNAL                TRUE
于 2018-06-29T16:37:01.090 回答
0

例子 -

让我们创建一个示例MANAGED 表

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

MANAGED_TABLE 描述表图像

将类型更改为 EXTERNAL (以错误的方式使用True, 而不是TRUE

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

这给出了, 外部表错误显示的图像

现在让DROP table, DROP TABLE test_tbl;

结果:

表已删除,但 HDFS 上的数据未删除。显示正确的外部表行为!

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

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

结果: 选择的输出 *

由于以下原因,描述错误地显示了MANAGED TABLEEXTERNAL True

.equals 检查元数据

Hive 问题 JIRA:HIVE-20057

建议的修复:使用不区分大小写的等于

于 2018-07-02T19:49:46.217 回答