我在XYZ
名为 的 db中有一个配置单元表ABC
。
当我describe formatted XYZ.ABC;
从色调中运行时,我得到以下信息..
那是
Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True
那么这实际上是外部还是托管/内部配置单元表?
我在XYZ
名为 的 db中有一个配置单元表ABC
。
当我describe formatted XYZ.ABC;
从色调中运行时,我得到以下信息..
那是
Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True
那么这实际上是外部还是托管/内部配置单元表?
这被视为一个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
为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
让我们创建一个示例MANAGED 表,
CREATE TABLE TEST_TBL(abc int, xyz string);
INSERT INTO TABLE test_tbl values(1, 'abc'),(2, 'xyz');
DESCRIBE FORMATTED test_tbl;
将类型更改为 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 TABLE
它EXTERNAL True
:
Hive 问题 JIRA:HIVE-20057
建议的修复:使用不区分大小写的等于