配置单元表是托管的或外部发布的post表类型转换

uwopmtnx  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(501)

我有一张 hive 的table XYZ 数据库命名 ABC .
当我跑的时候 describe formatted XYZ.ABC; 从hue,我得到了以下信息。。

就是这样

  1. Table Type: MANAGED_TABLE
  2. Table Parameters: EXTERNAL True

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

uxhixvfz

uxhixvfz1#

这被视为 EXTERNAL table。删除表将保留底层 HDFS 数据。表类型显示为 MANAGED_TABLE 因为参数 EXTERNAL 设置为 True ,而不是 TRUE .
要修复此元数据,可以运行以下查询:

  1. hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');

一些细节:
table XYZ.ABC 必须通过此类查询创建:

  1. hive> CREATE TABLE XYZ.ABC
  2. <additional table definition details>
  3. TBLPROPERTIES (
  4. 'EXTERNAL'='True');

描述此表将给出:

  1. hive> desc formatted XYZ.ABC;
  2. :
  3. Location: hdfs://<location_of_data>
  4. Table Type: MANAGED_TABLE
  5. :
  6. Table Parameters:
  7. EXTERNAL True

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

  1. hive> drop table XYZ.ABC;
  2. # does not drop table data in HDFS

这个 Table Type 仍然显示为 MANAGED_TABLE 这让人困惑。
创造价值 EXTERNAL 作为 TRUE 会解决这个问题的。

  1. hive> ALTER TABLE XYZ.ABC SET TBLPROPERTIES('EXTERNAL'='TRUE');

现在,做一个 describe 将按预期显示:

  1. hive> desc formatted XYZ.ABC;
  2. :
  3. Location: hdfs://<location_of_data>
  4. Table Type: EXTERNAL_TABLE
  5. :
  6. Table Parameters:
  7. EXTERNAL TRUE
展开查看全部
7fyelxc5

7fyelxc52#

示例-

让我们创建一个示例托管表,

  1. CREATE TABLE TEST_TBL(abc int, xyz string);
  2. INSERT INTO TABLE test_tbl values(1, 'abc'),(2, 'xyz');
  3. DESCRIBE FORMATTED test_tbl;


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

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

这给了,

现在让我们放下table,放下table测试;
结果是:
表被删除,但hdfs上的数据没有被删除。显示正确的外部表行为!
如果我们重新创建表,我们可以看到数据存在:

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

结果:

描述错误地显示为 MANAGED TABLE 随着 EXTERNAL True 因为:
.equals签入元
Hive问题jira:hive-20057
建议的修复方法:不区分大小写

展开查看全部

相关问题