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

Khurram Faraaz commented on DRILL-2631:
---------------------------------------

Project two columns from output of Union All, also gives same Exception

{code}
select sum_salary, name from (select * from (select sum(cast(columns[3] as 
int)) over(partition by cast(columns[4] as varchar(25)) order by columns[4]) 
sum_salary, cast(columns[1] as varchar(50)) name, cast(columns[4] as 
varchar(25)) department from `testWindow.csv`) where sum_salary > 100000.0  
order by name ) union all (select * from (select sum(cast(columns[3] as int)) 
over(partition by cast(columns[4] as varchar(25)) order by columns[4]) 
sum_salary, cast(columns[1] as varchar(50)) name, cast(columns[4] as 
varchar(25)) department from `testWindow.csv`) where sum_salary > 100000.0  
order by name);
Query failed: SqlValidatorException: Column count mismatch in UNION ALL

Error: exception while executing query: Failure while executing query. 
(state=,code=0)
{code}

> Project one column from output of Union All results in Column count mismatch 
> in UNION ALL
> -----------------------------------------------------------------------------------------
>
>                 Key: DRILL-2631
>                 URL: https://issues.apache.org/jira/browse/DRILL-2631
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Query Planning & Optimization
>    Affects Versions: 0.9.0
>            Reporter: Khurram Faraaz
>            Assignee: Sean Hsuan-Yi Chu
>
> Projecting values from a single column, from the output of Union All results 
> in SqlValidatorException: Column count mismatch in Union All.
> Tests were run on a 4 node cluster.
> case 1) select distinct values from column, fails.
> {code}
> Error: exception while executing query: Failure while executing query. 
> (state=,code=0)
> 0: jdbc:drill:> select distinct sum_salary from (select * from (select 
> sum(cast(columns[3] as int)) over(partition by cast(columns[4] as 
> varchar(25)) order by columns[4]) sum_salary, cast(columns[1] as varchar(50)) 
> name, cast(columns[4] as varchar(25)) department from `testWindow.csv`) where 
> sum_salary > 100000.0  order by name ) union all (select * from (select 
> sum(cast(columns[3] as int)) over(partition by cast(columns[4] as 
> varchar(25)) order by columns[4]) sum_salary, cast(columns[1] as varchar(50)) 
> name, cast(columns[4] as varchar(25)) department from `testWindow.csv`) where 
> sum_salary > 100000.0  order by name);
> Query failed: SqlValidatorException: Column count mismatch in UNION ALL
> Error: exception while executing query: Failure while executing query. 
> (state=,code=0)
> {code}
> case 2) select non distinct values from column fails.
> {code}
> 0: jdbc:drill:> select sum_salary from (select * from (select 
> sum(cast(columns[3] as int)) over(partition by cast(columns[4] as 
> varchar(25)) order by columns[4]) sum_salary, cast(columns[1] as varchar(50)) 
> name, cast(columns[4] as varchar(25)) department from `testWindow.csv`) where 
> sum_salary > 100000.0  order by name ) union all (select * from (select 
> sum(cast(columns[3] as int)) over(partition by cast(columns[4] as 
> varchar(25)) order by columns[4]) sum_salary, cast(columns[1] as varchar(50)) 
> name, cast(columns[4] as varchar(25)) department from `testWindow.csv`) where 
> sum_salary > 100000.0  order by name);
> Query failed: SqlValidatorException: Column count mismatch in UNION ALL
> {code}
> Results returned by the sub-query.(this sub-query is used in the Union All 
> query above in case 1 and case 2)
> {code}
> 0: jdbc:drill:> select * from (select sum(cast(columns[3] as int)) 
> over(partition by cast(columns[4] as varchar(25)) order by columns[4]) 
> sum_salary, cast(columns[1] as varchar(50)) name, cast(columns[4] as 
> varchar(25)) department from `testWindow.csv`) where sum_salary > 100000.0  
> order by name;
> +------------+------------+------------+
> | sum_salary |    name    | department |
> +------------+------------+------------+
> | 452000     | Bill Sawyer | Engineering |
> | 452000     | Bob Sr     | Engineering |
> | 452000     | Jane Doe   | Engineering |
> | 452000     | Kumar      | Engineering |
> | 199000     | Patrick    | Sales      |
> | 200000     | Rock Breaker | Product Management |
> | 199000     | Sam        | Sales      |
> | 452000     | Susan      | Engineering |
> +------------+------------+------------+
> 8 rows selected (0.217 seconds)
> {code}
> Case where, select * from (Query 1) Union All (Query 2); This query returns 
> correct results. this is the case where we project all columns from output of 
> Union All
> {code}
> 0: jdbc:drill:> select * from (select * from (select sum(cast(columns[3] as 
> int)) over(partition by cast(columns[4] as varchar(25)) order by columns[4]) 
> sum_salary, cast(columns[1] as varchar(50)) name, cast(columns[4] as 
> varchar(25)) department from `testWindow.csv`) where sum_salary > 100000.0  
> order by name ) union all (select * from (select sum(cast(columns[3] as int)) 
> over(partition by cast(columns[4] as varchar(25)) order by columns[4]) 
> sum_salary, cast(columns[1] as varchar(50)) name, cast(columns[4] as 
> varchar(25)) department from `testWindow.csv`) where sum_salary > 100000.0  
> order by name);
> +------------+------------+------------+
> | sum_salary |    name    | department |
> +------------+------------+------------+
> | 452000     | Bill Sawyer | Engineering |
> | 452000     | Bob Sr     | Engineering |
> | 452000     | Jane Doe   | Engineering |
> | 452000     | Kumar      | Engineering |
> | 199000     | Patrick    | Sales      |
> | 200000     | Rock Breaker | Product Management |
> | 199000     | Sam        | Sales      |
> | 452000     | Susan      | Engineering |
> | 452000     | Bill Sawyer | Engineering |
> | 452000     | Bob Sr     | Engineering |
> | 452000     | Jane Doe   | Engineering |
> | 452000     | Kumar      | Engineering |
> | 199000     | Patrick    | Sales      |
> | 200000     | Rock Breaker | Product Management |
> | 199000     | Sam        | Sales      |
> | 452000     | Susan      | Engineering |
> +------------+------------+------------+
> 16 rows selected (0.343 seconds)
> {code}
> Data from the test file used in above tests
> {code}
> 0: jdbc:drill:> select * from `testWindow.csv`;
> +------------+
> |  columns   |
> +------------+
> | ["100","John Doe","35","80000","IT"] |
> | ["10","Bill Sawyer","37","90000","Engineering"] |
> | ["2","Rock Breaker","55","200000","Product Management"] |
> | ["50","Raj Verma","40","95000","HR"] |
> | ["55","Bob Sr","45","85000","Engineering"] |
> | ["67","Kumar","40","90000","Engineering"] |
> | ["113","Susan","42","100000","Engineering"] |
> | ["119","Jane Doe","39","87000","Engineering"] |
> | ["89","Bruce Li","32","80000","Fitness"] |
> | ["57","Sam","43","100000","Sales"] |
> | ["61","Patrick","41","99000","Sales"] |
> +------------+
> 11 rows selected (0.132 seconds)
> {code}
> {code}
> Details of version
> | 9d92b8e319f2d46e8659d903d355450e15946533 | DRILL-2580: Exit early from 
> HashJoinBatch if build side is empty | 26.03.2015 @ 16:13:53 EDT | Unknown    
>  | 26.03.2015 @ 16:53:21 EDT |
> {code}
> Stack trace from drillbit.log
> {code}
> 2015-03-31 18:29:18,184 [2ae51880-f35a-5805-038f-4c9410c26b81:foreman] INFO  
> o.a.drill.exec.work.foreman.Foreman - foreman cleaning up - status: []
> 2015-03-31 18:29:18,187 [2ae51880-f35a-5805-038f-4c9410c26b81:foreman] ERROR 
> o.a.drill.exec.work.foreman.Foreman - Error 
> af7b0447-a861-4031-a5a5-730e05bb4821: SqlValidatorException: Column count 
> mismatch in UNION ALL
> org.apache.drill.exec.planner.sql.QueryInputException: Failure validating 
> SQL. org.eigenbase.util.EigenbaseContextException: At line 1, column 326: 
> Column count mismatch in UNION ALL
>         at 
> org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:147)
>  ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.work.foreman.Foreman.runSQL(Foreman.java:773) 
> ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at org.apache.drill.exec.work.foreman.Foreman.run(Foreman.java:204) 
> ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>  [na:1.7.0_75]
>         at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>  [na:1.7.0_75]
>         at java.lang.Thread.run(Thread.java:745) [na:1.7.0_75]
> Caused by: net.hydromatic.optiq.tools.ValidationException: 
> org.eigenbase.util.EigenbaseContextException: At line 1, column 326: Column 
> count mismatch in UNION ALL
>         at 
> net.hydromatic.optiq.prepare.PlannerImpl.validate(PlannerImpl.java:176) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.validateNode(DefaultSqlHandler.java:157)
>  ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.getPlan(DefaultSqlHandler.java:133)
>  ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         at 
> org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan(DrillSqlWorker.java:145)
>  ~[drill-java-exec-0.9.0-SNAPSHOT-rebuffed.jar:0.9.0-SNAPSHOT]
>         ... 5 common frames omitted
> Caused by: org.eigenbase.util.EigenbaseContextException: At line 1, column 
> 326: Column count mismatch in UNION ALL
>         at sun.reflect.GeneratedConstructorAccessor68.newInstance(Unknown 
> Source) ~[na:na]
>         at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>  ~[na:1.7.0_75]
>         at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
> ~[na:1.7.0_75]
>         at 
> org.eigenbase.resource.Resources$ExInstWithCause.ex(Resources.java:348) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at org.eigenbase.sql.SqlUtil.newContextException(SqlUtil.java:673) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at org.eigenbase.sql.SqlUtil.newContextException(SqlUtil.java:661) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:3588)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.type.SetopOperandTypeChecker.checkOperandTypes(SetopOperandTypeChecker.java:68)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.SqlOperator.checkOperandTypes(SqlOperator.java:533) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.SqlOperator.validateOperands(SqlOperator.java:412) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.validate.SetopNamespace.validateImpl(SetopNamespace.java:70)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:85)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:785)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:774)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.SqlSetOperator.validateCall(SqlSetOperator.java:86) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.validate.SqlValidatorImpl.validateCall(SqlValidatorImpl.java:3713)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at org.eigenbase.sql.SqlCall.validate(SqlCall.java:102) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:748)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> org.eigenbase.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:464)
>  ~[optiq-core-0.9-drill-r20.jar:na]
>         at 
> net.hydromatic.optiq.prepare.PlannerImpl.validate(PlannerImpl.java:174) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         ... 8 common frames omitted
> Caused by: org.eigenbase.sql.validate.SqlValidatorException: Column count 
> mismatch in UNION ALL
>         at sun.reflect.GeneratedConstructorAccessor69.newInstance(Unknown 
> Source) ~[na:na]
>         at 
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
>  ~[na:1.7.0_75]
>         at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
> ~[na:1.7.0_75]
>         at 
> org.eigenbase.resource.Resources$ExInstWithCause.ex(Resources.java:348) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         at org.eigenbase.resource.Resources$ExInst.ex(Resources.java:457) 
> ~[optiq-core-0.9-drill-r20.jar:na]
>         ... 24 common frames omitted
> {code}



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

Reply via email to