Hive 配置单元表为托管或外部-发布post表类型转换

Hive 配置单元表为托管或外部-发布post表类型转换,hive,external-tables,hive-table,Hive,External Tables,Hive Table,我在XYZdb中有一个名为ABC的配置单元表 当我运行时,请描述格式化的XYZ.ABC从色调中,我得到以下内容 就是 Table Type: MANAGED_TABLE Table Parameters: EXTERNAL True 那么这实际上是一个外部还是一个托管/内部配置单元表呢?这被视为一个外部表。删除表将保留底层的HDFS数据。由于参数EXTERNAL设置为True,而不是True,因此表类型显示为MANAGED\u table 要修复此元数据,可以运行以下查询: hive>

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

当我运行
时,请描述格式化的XYZ.ABC从色调中,我得到以下内容

就是

Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True

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

这被视为一个
外部
表。删除表将保留底层的
HDFS
数据。由于参数
EXTERNAL
设置为
True
,而不是
True
,因此表类型显示为
MANAGED\u table

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

hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');
一些细节:

XYZ.ABC
必须通过这种查询创建:

hive> CREATE TABLE XYZ.ABC
<additional table definition details>
TBLPROPERTIES (
  'EXTERNAL'='True');
表格类型
仍显示为
托管表格
,这令人困惑

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

hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');
现在,执行
描述将按预期显示:

hive> desc formatted XYZ.ABC;
:
Location:               hdfs://<location_of_data>
Table Type:             EXTERNAL_TABLE
:
Table Parameters:
    EXTERNAL                TRUE
hive>desc格式的XYZ.ABC;
:
地点:hdfs://
表格类型:外部表格
:
表参数:
外部真实
示例- 让我们创建一个示例托管表

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');
这就给,,

现在让放下表格, 跌落台试验

结果是:

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

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

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

描述错误地显示为
托管表
以及
外部真值
,原因如下:

蜂巢问题吉拉:


建议的修复方法:

在显示表信息时似乎出现了一些错误。将仅显示拖放表行为。external=true表示它是外部的。但表类型表示它是被管理的。这是不一致的。若Drop表是外部的,那个么它应该保留数据位置。
ALTER TABLE test_tbl SET TBLPROPERTIES('EXTERNAL'='True');
CREATE TABLE test_tbl(abc int, xyz string);
SELECT * FROM test_tbl;