[ 
https://issues.apache.org/jira/browse/HIVE-19253?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17204602#comment-17204602
 ] 

Szehon Ho commented on HIVE-19253:
----------------------------------

Hello guys, would it be possible to merge this patch?   This broken API makes 
it quite confusing.

Alex's approach seems reasonable good (accept tableType while keeping the old 
way for compatibility).  I took the liberty of rebasing and submitting a pull 
request as per the new method, hope you guys don't mind. 



> 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: 3.0.0, 3.1.0, 4.0.0
>            Reporter: Alex Kolbasov
>            Assignee: Vihang Karajgaonkar
>            Priority: Major
>              Labels: newbie, pull-request-available
>         Attachments: HIVE-19253.01.patch, HIVE-19253.02.patch, 
> HIVE-19253.03.patch, HIVE-19253.03.patch, HIVE-19253.04.patch, 
> HIVE-19253.05.patch, HIVE-19253.06.patch, HIVE-19253.07.patch, 
> HIVE-19253.08.patch, HIVE-19253.09.patch, HIVE-19253.10.patch, 
> HIVE-19253.11.patch, HIVE-19253.12.patch
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> 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
(v8.3.4#803005)

Reply via email to