我在XYZ
数据库中有一个配置单元表,名为ABC
。
从色相运行describe formatted XYZ.ABC;
时,我得到以下信息。
即
Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True
这实际上是外部还是托管/内部配置单元表吗?
答案 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;
将类型更改为EXTERNAL (使用True
,而不是TRUE
的错误方式) :
ALTER TABLE test_tbl SET TBLPROPERTIES('EXTERNAL'='True');
现在让我们删除表, 删除表test_tbl;
结果:
表已删除,但HDFS上的数据未删除。显示正确的外部表行为!
如果我们重新创建表,我们可以看到数据存在:
CREATE TABLE test_tbl(abc int, xyz string);
SELECT * FROM test_tbl;
由于以下原因,描述错误地将其与MANAGED TABLE
一起显示为EXTERNAL True
:
Hive Issue JIRA:HIVE-20057
建议的解决方案:Use case insensitive equals