[ 
https://issues.apache.org/jira/browse/HIVE-8439?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gordon Wang updated HIVE-8439:
------------------------------
    Summary: query processor fails to handle multiple insert clauses for the 
same table  (was: multiple insert into the same table)

> query processor fails to handle multiple insert clauses for the same table
> --------------------------------------------------------------------------
>
>                 Key: HIVE-8439
>                 URL: https://issues.apache.org/jira/browse/HIVE-8439
>             Project: Hive
>          Issue Type: Bug
>          Components: Query Processor
>    Affects Versions: 0.12.0, 0.13.0
>            Reporter: Gordon Wang
>
> when putting multiple inserts for the same table in one SQL, hive query plan 
> analyzer fails to synthesis the right plan.
> Here is the reproduce steps.
> {noformat}
> create table T1(i int, j int);
> create table T2(m int) partitioned by (n int);
> explain from T1
> insert into table T2 partition (n = 1)
>   select T1.i where T1.j = 1
> insert overwrite table T2 partition (n = 2)
>   select T1.i where T1.j = 2
>   ;
> {noformat}
> When there is a "insert into" clause in the multiple insert part, the "insert 
> overwrite" is considered as "insert into".
> I dig into the source code, looks like Hive does not support mixing "insert 
> into" and "insert overwrite" for the same table in multiple insert clauses.
> Here is my finding.
> 1. in semantic analyzer, when processing TOK_INSERT_INTO, the analyzer will 
> put the table name into a set which contains all the insert into table names.
> 2. when generating file sink plan, the analyzer will check if the table name 
> is in the set, if in the set, the replace flag is set to false. Here is the 
> code snippet.
> {noformat}
>       // Create the work for moving the table
>       // NOTE: specify Dynamic partitions in dest_tab for WriteEntity
>       if (!isNonNativeTable) {
>         ltd = new LoadTableDesc(queryTmpdir, 
> ctx.getExternalTmpFileURI(dest_path.toUri()),
>             table_desc, dpCtx);
>         
> ltd.setReplace(!qb.getParseInfo().isInsertIntoTable(dest_tab.getDbName(),
>             dest_tab.getTableName()));
>         ltd.setLbCtx(lbCtx);
>         if (holdDDLTime) {
>           LOG.info("this query will not update transient_lastDdlTime!");
>           ltd.setHoldDDLTime(true);
>         }
>         loadTableWork.add(ltd);
>       }
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to