Hive Table 是 MANAGED 或 EXTERNAL - 问题 post table 类型转换
Hive Table is MANAGED or EXTERNAL - issue post table type conversion
我在 XYZ
数据库中有一个配置单元 table,名为 ABC
。
当我从 hue 运行 describe formatted XYZ.ABC;
时,我得到以下内容..
即
Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True
那么这实际上是外部还是 managed/internal 配置单元 table?
这被视为 EXTERNAL
table。删除 table 将保留基础 HDFS
数据。 table 类型显示为 MANAGED_TABLE
,因为参数 EXTERNAL
设置为 True
,而不是 TRUE
。
要修复此元数据,您可以 运行 此查询:
hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');
一些细节:
table XYZ.ABC
一定是通过这种查询创建的:
hive> CREATE TABLE XYZ.ABC
<additional table definition details>
TBLPROPERTIES (
'EXTERNAL'='True');
描述此 table 将得到:
hive> desc formatted XYZ.ABC;
:
Location: hdfs://<location_of_data>
Table Type: MANAGED_TABLE
:
Table Parameters:
EXTERNAL True
删除此 table 将在 describe
输出中保留 Location
中引用的数据。
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
例子-
让我们创建一个示例 MANAGED table,
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');
这给出了,
现在 删除 table,
下降 TABLE test_tbl;
结果:
Table is dropped but data on HDFS isn't. Showing correct external table behavior!
如果我们重新创建 table 我们可以看到数据存在:
CREATE TABLE test_tbl(abc int, xyz string);
SELECT * FROM test_tbl;
结果:
描述错误地将其显示为 MANAGED TABLE
和 EXTERNAL True
,因为:
Hive 问题 JIRA:HIVE-20057
我在 XYZ
数据库中有一个配置单元 table,名为 ABC
。
当我从 hue 运行 describe formatted XYZ.ABC;
时,我得到以下内容..
即
Table Type: MANAGED_TABLE
Table Parameters: EXTERNAL True
那么这实际上是外部还是 managed/internal 配置单元 table?
这被视为 EXTERNAL
table。删除 table 将保留基础 HDFS
数据。 table 类型显示为 MANAGED_TABLE
,因为参数 EXTERNAL
设置为 True
,而不是 TRUE
。
要修复此元数据,您可以 运行 此查询:
hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');
一些细节:
table XYZ.ABC
一定是通过这种查询创建的:
hive> CREATE TABLE XYZ.ABC
<additional table definition details>
TBLPROPERTIES (
'EXTERNAL'='True');
描述此 table 将得到:
hive> desc formatted XYZ.ABC;
:
Location: hdfs://<location_of_data>
Table Type: MANAGED_TABLE
:
Table Parameters:
EXTERNAL True
删除此 table 将在 describe
输出中保留 Location
中引用的数据。
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
例子-
让我们创建一个示例 MANAGED table,
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');
这给出了,
现在 删除 table, 下降 TABLE test_tbl;
结果:
Table is dropped but data on HDFS isn't. Showing correct external table behavior!
如果我们重新创建 table 我们可以看到数据存在:
CREATE TABLE test_tbl(abc int, xyz string);
SELECT * FROM test_tbl;
结果:
描述错误地将其显示为 MANAGED TABLE
和 EXTERNAL True
,因为:
Hive 问题 JIRA:HIVE-20057