You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by "Khurram Faraaz (JIRA)" <ji...@apache.org> on 2017/03/10 07:15:04 UTC

[jira] [Created] (DRILL-5345) USING() should return error, when column in not present in the right table

Khurram Faraaz created DRILL-5345:
-------------------------------------

             Summary: USING(<column-name>) should return error, when column in not present in the right table
                 Key: DRILL-5345
                 URL: https://issues.apache.org/jira/browse/DRILL-5345
             Project: Apache Drill
          Issue Type: Bug
          Components: Query Planning & Optimization
    Affects Versions: 1.10.0
            Reporter: Khurram Faraaz


When the column used in, USING(column) is not present in the right table of the JOIN, we show report an error to user instead of returning zero rows.

{noformat}
<named columns join> ::=
  USING <left paren> <join column list> <right paren>
<join column list> ::=
  <column name list>
<column name list> ::=
  <column name> [ { <comma> <column name> }... ]
<column name> ::=
  <identifier>
{noformat}

Postgres 9.3 reports an error for such a scenario, because column c1 is not present in the other table in the join.
{noformat}
postgres=# select * from tbl_l JOIN tbl_r USING (c1);
ERROR:  column "c1" specified in USING clause does not exist in right table
{noformat}

Drill 1.10.0 returns zero rows in one case and RuntimeException in the other case. In both cases Drill should return a meaning error message, like the one reported by Postgres.

{noformat}
0: jdbc:drill:schema=dfs.tmp> create table tbl_l as select cast(columns[0] as integer) c1, cast(columns[1] as varchar(25)) c2 from `tbl_l.txt`;
+-----------+----------------------------+
| Fragment  | Number of records written  |
+-----------+----------------------------+
| 0_0       | 10                         |
+-----------+----------------------------+
1 row selected (0.197 seconds)

0: jdbc:drill:schema=dfs.tmp> create table tbl_r as select cast(columns[0] as integer) c3, cast(columns[1] as varchar(25)) c4 from `tbl_r.txt`;
+-----------+----------------------------+
| Fragment  | Number of records written  |
+-----------+----------------------------+
| 0_0       | 10                         |
+-----------+----------------------------+
1 row selected (0.221 seconds)

## this is not right, we should report error for below query.

0: jdbc:drill:schema=dfs.tmp> select * from tbl_l JOIN tbl_r USING (c1);
+-----+-----+-----+-----+
| c1  | c2  | c3  | c4  |
+-----+-----+-----+-----+
+-----+-----+-----+-----+
No rows selected (0.222 seconds)

## we should return a meaningful error message

0: jdbc:drill:schema=dfs.tmp> select * from tbl_l JOIN tbl_r USING (c2);
Error: SYSTEM ERROR: DrillRuntimeException: Join only supports implicit casts between 1. Numeric data
 2. Varchar, Varbinary data 3. Date, Timestamp data Left type: INT, Right type: VARCHAR. Add explicit casts to avoid this error

Fragment 0:0

[Error Id: 56107e6e-54b5-4905-9aa4-b0af2aea4dd9 on centos-01.qa.lab:31010] (state=,code=0)
{noformat}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)