You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Alexander Kolbasov (JIRA)" <ji...@apache.org> on 2018/04/20 02:10:00 UTC

[jira] [Created] (HIVE-19253) HMS ignores tableType property for external tables

Alexander Kolbasov created HIVE-19253:
-----------------------------------------

             Summary: HMS ignores tableType property for external tables
                 Key: HIVE-19253
                 URL: https://issues.apache.org/jira/browse/HIVE-19253
             Project: Hive
          Issue Type: Bug
          Components: Metastore
    Affects Versions: 2.0.2, 3.0.0, 3.1.0
            Reporter: Alexander Kolbasov
            Assignee: Alexander Kolbasov


When someone creates a table using Thrift API they may think that setting tableType to {{EXTERNAL_TABLE}} creates an external table. And boom - their table is gone later because HMS will silently change it to managed table.

here is the offending code:

{code:java}
  private MTable convertToMTable(Table tbl) throws InvalidObjectException,
      MetaException {
    ...
    // If the table has property EXTERNAL set, update table type
    // accordingly
    String tableType = tbl.getTableType();
    boolean isExternal = Boolean.parseBoolean(tbl.getParameters().get("EXTERNAL"));
    if (TableType.MANAGED_TABLE.toString().equals(tableType)) {
      if (isExternal) {
        tableType = TableType.EXTERNAL_TABLE.toString();
      }
    }
    if (TableType.EXTERNAL_TABLE.toString().equals(tableType)) {
      if (!isExternal) { // Here!
        tableType = TableType.MANAGED_TABLE.toString();
      }
    }
{code}

So if the EXTERNAL parameter is not set, table type is changed to managed even if it was external in the first place - which is wrong.

More over, in other places code looks at the table property to decide table type and some places look at parameter. HMS should really make its mind which one to use.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)