[ https://issues.apache.org/jira/browse/HIVE-17013?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16074743#comment-16074743 ]
Frédéric ESCANDELL commented on HIVE-17013: ------------------------------------------- I would like to complete information given in the description of the ticket : I'm using Hive 1.2.1000.2.6.0.3-8. I think this bug could come from the patch of this ticket https://issues.apache.org/jira/browse/HIVE-15970 et more particulary the snippet of code below : throw new IllegalStateException("Expected '" + getMatchedText(curNode) + "' to be in sub-query or set operation."); [https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/Context.java] {code:java} /** * The suffix is always relative to a given ASTNode */ public DestClausePrefix getDestNamePrefix(ASTNode curNode) { assert curNode != null : "must supply curNode"; if(curNode.getType() != HiveParser.TOK_INSERT_INTO) { //select statement assert curNode.getType() == HiveParser.TOK_DESTINATION; if(operation == Operation.OTHER) { //not an 'interesting' op return DestClausePrefix.INSERT; } //if it is an 'interesting' op but it's a select it must be a sub-query or a derived table //it doesn't require a special Acid code path - the reset of the code here is to ensure //the tree structure is what we expect boolean thisIsInASubquery = false; parentLoop: while(curNode.getParent() != null) { curNode = (ASTNode) curNode.getParent(); switch (curNode.getType()) { case HiveParser.TOK_SUBQUERY_EXPR: //this is a real subquery (foo IN (select ...)) case HiveParser.TOK_SUBQUERY: //this is a Derived Table Select * from (select a from ...)) //strictly speaking SetOps should have a TOK_SUBQUERY parent so next 6 items are redundant case HiveParser.TOK_UNIONALL: case HiveParser.TOK_UNIONDISTINCT: case HiveParser.TOK_EXCEPTALL: case HiveParser.TOK_EXCEPTDISTINCT: case HiveParser.TOK_INTERSECTALL: case HiveParser.TOK_INTERSECTDISTINCT: thisIsInASubquery = true; break parentLoop; } } if(!thisIsInASubquery) { throw new IllegalStateException("Expected '" + getMatchedText(curNode) + "' to be in sub-query or set operation."); } return DestClausePrefix.INSERT; } {code} > Delete request with a subquery based on select over a view > ---------------------------------------------------------- > > Key: HIVE-17013 > URL: https://issues.apache.org/jira/browse/HIVE-17013 > Project: Hive > Issue Type: Bug > Reporter: Frédéric ESCANDELL > Priority: Blocker > > Hi, > I based my DDL on this exemple > https://fr.hortonworks.com/tutorial/using-hive-acid-transactions-to-insert-update-and-delete-data/. > In a delete request, the use of a view in a subquery throw an exception : > FAILED: IllegalStateException Expected 'insert into table default.mydim > select ROW__ID from default.mydim sort by ROW__ID' to be in sub-query or set > operation. > {code} > {code:sql} > drop table if exists mydim; > create table mydim (key int, name string, zip string, is_current boolean) > clustered by(key) into 3 buckets > stored as orc tblproperties ('transactional'='true'); > insert into mydim values > (1, 'bob', '95136', true), > (2, 'joe', '70068', true), > (3, 'steve', '22150', true); > drop table if exists updates_staging_table; > create table updates_staging_table (key int, newzip string); > insert into updates_staging_table values (1, 87102), (3, 45220); > drop view if exists updates_staging_view; > create view updates_staging_view (key, newzip) as select key, newzip from > updates_staging_table; > delete from mydim > where mydim.key in (select key from updates_staging_view); > FAILED: IllegalStateException Expected 'insert into table default.mydim > select ROW__ID from default.mydim sort by ROW__ID' to be in sub-query or set > operation. > {code} -- This message was sent by Atlassian JIRA (v6.4.14#64029)