代码之家  ›  专栏  ›  技术社区  ›  Ani Menon

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

  •  0
  • Ani Menon  · 技术社区  · 6 年前

    我有一张蜂巢桌 XYZ 数据库命名 ABC 是的。

    当我跑的时候 describe formatted XYZ.ABC; 从顺化,我得到了…

    MANAGED TABLE SHOWN AS EXTERNAL

    那就是

    Table Type: MANAGED_TABLE
    Table Parameters: EXTERNAL True
    

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

    2 回复  |  直到 6 年前
        1
  •  0
  •   Jagrut Sharma    6 年前

    这被视为 EXTERNAL 桌子。删除表将保留基础 HDFS 数据。表类型显示为 MANAGED_TABLE 因为参数 外部 设置为 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 仍然显示为 托管表 令人困惑。

    创造价值 外部 作为 真的 会解决这个问题的。

    配置单元gt;更改表xyz.abc set tblproperties('external'='true');
    

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

    hive> desc formatted XYZ.ABC;
    :
    Location:               hdfs://<location_of_data>
    Table Type:             EXTERNAL_TABLE
    :
    Table Parameters:
        EXTERNAL                TRUE
    
        2
  •  0
  •   Ani Menon    6 年前

    示例-

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

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

    MANAGED_TABLE describe table image

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

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

    这给了, External Table Wrongly shown image

    现在让我们 放下桌子 ,请 升降台试验;

    结果是:

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

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

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

    结果: Output of select *

    描述错误地显示为 MANAGED TABLE 随着 EXTERNAL True 因为:

    .equals check in the meta

    蜂巢问题吉拉: HIVE-20057

    建议修复: Use case insensitive equals

    推荐文章