配置单元表已管理或外部-发布表类型转换

时间:2018-06-29 13:50:44

标签: hive external-tables hive-table

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

从色相运行describe formatted XYZ.ABC;时,我得到以下信息。

MANAGED TABLE SHOWN AS EXTERNAL

Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True

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

2 个答案:

答案 0 :(得分: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

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

 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

答案 1 :(得分: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 describe table image

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

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

这给出了 External Table Wrongly shown image

现在让我们删除表,     删除表test_tbl;

结果:

  

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

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

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

结果: Output of select *

由于以下原因,描述错误地将其与MANAGED TABLE一起显示为EXTERNAL True

.equals check in the meta

Hive Issue JIRA:HIVE-20057

建议的解决方案:Use case insensitive equals