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

Jinfeng Ni commented on DRILL-1868:
-----------------------------------

The 'month' in the WHERE clause is actually not referencing the alias in the 
SELECT clause. In stead, it's treated as a regular column, which is the SQL 
behavior.   In schema-based system like Postgre, any regular column will be 
verified against the table schema. In schema-less Drill system, the 
verification will skip, since Drill does not know whether the input contains 
column 'month' during planning time. In execution time, if input does not have 
"month" column, Drill will populate nulls. That's why you see such result.

As a reference, Postgre does allow an alias uses the same name as regular 
column's name in the table. But the column reference in WHERE clause does not 
mean it's using the alias. 

{code}

select * from emp;
 id | position_id | salary
----+-------------+--------
  1 |           1 |      4
  2 |           1 |      4
  3 |           2 |      2

select position_id + 100 as position_id from emp where position_id = 2;
 position_id
-------------
         102
{code} 



> Filtering on an alias should return an error, user  gets wrong result instead
> -----------------------------------------------------------------------------
>
>                 Key: DRILL-1868
>                 URL: https://issues.apache.org/jira/browse/DRILL-1868
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: SQL Parser
>            Reporter: Victoria Markman
>
> git.commit.id.abbrev=c65928f
> {code}
> 0: jdbc:drill:schema=dfs> select * from `test.json`;
> +------------+------------+
> | eventdate  |    sold    |
> +------------+------------+
> | 2014-01-01 | 100        |
> | 2014-01-01 | 100        |
> | 2014-02-01 | 200        |
> +------------+------------+
> 3 rows selected (0.099 seconds)
> {code}
>  
> {code}
> 0: jdbc:drill:schema=dfs> -- Correct result
> 0: jdbc:drill:schema=dfs> SELECT
> . . . . . . . . . . . . >                 extract( month from eventdate ) as 
> `month`,
> . . . . . . . . . . . . >                 extract( year  from eventdate ) as 
> `year`
> . . . . . . . . . . . . > 
> . . . . . . . . . . . . > FROM            `test.json`
> . . . . . . . . . . . . > WHERE           extract( month from eventdate ) IS 
> NOT NULL;
> +------------+------------+
> |   month    |    year    |
> +------------+------------+
> | 1          | 2014       |
> | 1          | 2014       |
> | 2          | 2014       |
> +------------+------------+
> 3 rows selected (0.074 seconds)
> {code}
> {code}
> 0: jdbc:drill:schema=dfs> -- Wrong result, should throw an error
> 0: jdbc:drill:schema=dfs> SELECT
> . . . . . . . . . . . . >                 extract( month from eventdate ) as 
> `month`,
> . . . . . . . . . . . . >                 extract( year  from eventdate ) as 
> `year`
> . . . . . . . . . . . . > 
> . . . . . . . . . . . . > FROM            `test.json`
> . . . . . . . . . . . . > WHERE           `month` IS NOT NULL;
> +------------+------------+
> |   month    |    year    |
> +------------+------------+
> +------------+------------+
> No rows selected (0.079 seconds)
> {code}
> {code}
> 0: jdbc:drill:schema=dfs> -- Wrong result, should throw an error
> 0: jdbc:drill:schema=dfs> SELECT
> . . . . . . . . . . . . >                 extract( month from eventdate ) as 
> xyz,
> . . . . . . . . . . . . >                 extract( year  from eventdate ) as 
> `year`
> . . . . . . . . . . . . > 
> . . . . . . . . . . . . > FROM            `test.json`
> . . . . . . . . . . . . > WHERE           xyz IS NOT NULL;
> +------------+------------+
> |    xyz     |    year    |
> +------------+------------+
> +------------+------------+
> No rows selected (0.073 seconds)
> {code}
> {code} 
> 0: jdbc:drill:schema=dfs> -- Correct result
> 0: jdbc:drill:schema=dfs> SELECT *
> . . . . . . . . . . . . > FROM
> . . . . . . . . . . . . >         (
> . . . . . . . . . . . . >         SELECT
> . . . . . . . . . . . . >                 extract( month from eventdate ) as 
> `month`,
> . . . . . . . . . . . . >                 extract( year  from eventdate ) as 
> `year`
> . . . . . . . . . . . . > 
> . . . . . . . . . . . . >         FROM    `test.json`
> . . . . . . . . . . . . >         WHERE           `month` IS NULL
> . . . . . . . . . . . . >         )
> . . . . . . . . . . . . > WHERE `month` IS NOT NULL;
> +------------+------------+
> |   month    |    year    |
> +------------+------------+
> | 1          | 2014       |
> | 1          | 2014       |
> | 2          | 2014       |
> +------------+------------+
> 3 rows selected (0.099 seconds)
> {code}



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

Reply via email to