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

ASF GitHub Bot commented on DRILL-5851:
---------------------------------------

Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/1059#discussion_r158593827
  
    --- Diff: 
exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/join/TestMergeJoinAdvanced.java
 ---
    @@ -253,4 +259,52 @@ public void testDrill4196() throws Exception {
           .baselineValues(6000*800L)
           .go();
       }
    +
    +  private void buildFile(String fileName, String[] data, File testDir) 
throws IOException {
    +    try(PrintWriter out = new PrintWriter(new FileWriter(new File(testDir, 
fileName)))) {
    +      for (String line : data) {
    +        out.println(line);
    +      }
    +    }
    +  }
    +
    +  @Test
    +  public void testMergeLeftJoinWithEmptyTable() throws Exception {
    +    try (
    +      ClusterFixture cluster = 
ClusterFixture.builder(dirTestWatcher).build();
    +      ClientFixture client = cluster.clientFixture()) {
    +      File testDir = dirTestWatcher.getRootDir();
    +      buildFile("dept.json", new String[0], testDir);
    +      QueryBuilder query = client.queryBuilder().sql("select * from 
cp.`employee.json` emp left outer join dfs.`dept.json` as dept on dept.manager 
= emp.`last_name`");
    +      assert(query.run().recordCount() == 1155);
    +    } catch (RuntimeException ex) {
    +      fail(ex.getMessage());
    +    }
    +  }
    +
    +  @Test
    +  public void testMergeInnerJoinWithEmptyTable() throws Exception {
    +    try (ClusterFixture cluster = 
ClusterFixture.builder(dirTestWatcher).build();
    +      ClientFixture client = cluster.clientFixture()) {
    +      File testDir = dirTestWatcher.getRootDir();
    +      buildFile("dept.json", new String[0], testDir);
    +      QueryBuilder query = client.queryBuilder().sql("select * from 
cp.`employee.json` emp inner join dfs.`dept.json` as dept on dept.manager = 
emp.`last_name`");
    +      assert(query.run().recordCount() == 0);
    +    } catch (RuntimeException ex) {
    +      fail(ex.getMessage());
    +    }
    +  }
    +
    +  @Test
    +  public void testMergeRightJoinWithEmptyTable() throws Exception {
    +    try (ClusterFixture cluster = 
ClusterFixture.builder(dirTestWatcher).build();
    +      ClientFixture client = cluster.clientFixture()) {
    +      File testDir = dirTestWatcher.getRootDir();
    +      buildFile("dept.json", new String[0], testDir);
    +      QueryBuilder query = client.queryBuilder().sql("select * from 
cp.`employee.json` emp right outer join dfs.`dept.json` as dept on dept.manager 
= emp.`last_name`");
    +      assert( query.run().recordCount() == 0);
    +    } catch (RuntimeException ex) {
    +      fail (ex.getMessage());
    --- End diff --
    
    Suggestion: this is the sixth copy of basically the same test, with only 
the query text differing. Again, duplicate code is costly and is to be avoided. 
Now, once the tests convert to using a single server, most of the code here 
will disappear. More will disappear if the test file is created once. 
Otherwise, it would be better to define a test function, then simply have each 
test call the test function with the required statement.


> Empty table during a join operation with a non empty table produces cast 
> exception 
> -----------------------------------------------------------------------------------
>
>                 Key: DRILL-5851
>                 URL: https://issues.apache.org/jira/browse/DRILL-5851
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Execution - Relational Operators
>    Affects Versions: 1.11.0
>            Reporter: Hanumath Rao Maduri
>            Assignee: Hanumath Rao Maduri
>
> Hash Join operation on tables with one table empty and the other non empty 
> throws an exception 
> {code} 
> Error: SYSTEM ERROR: DrillRuntimeException: Join only supports implicit casts 
> between 1. Numeric data
>  2. Varchar, Varbinary data 3. Date, Timestamp data Left type: VARCHAR, Right 
> type: INT. Add explicit casts to avoid this error
> {code}
> Here is an example query with which it is reproducible.
> {code}
> select * from cp.`sample-data/nation.parquet` nation left outer join 
> dfs.tmp.`2.csv` as two on two.a = nation.`N_COMMENT`;
> {code}
> the contents of 2.csv is empty (i.e not even header info).



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to