You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@drill.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2013/05/21 01:11:16 UTC

[jira] [Created] (DRILL-64) In reference implementation, full outer join returns too many rows

Julian Hyde created DRILL-64:
--------------------------------

             Summary: In reference implementation, full outer join returns too many rows
                 Key: DRILL-64
                 URL: https://issues.apache.org/jira/browse/DRILL-64
             Project: Apache Drill
          Issue Type: Bug
            Reporter: Julian Hyde
            Priority: Minor


Full outer join returns too many rows. The query

{
  "head" : {
    "type" : "apache_drill_logical_plan",
    "version" : 1,
    "generator" : {
      "type" : "manual",
      "info" : "na"
    }
  },
  "storage" : [ {
    "type" : "queue",
    "name" : "queue"
  }, {
    "type" : "classpath",
    "name" : "donuts-json"
  } ],
  "query" : [ {
    "op" : "scan",
    "@id" : 1,
    "memo" : "initial_scan",
    "storageengine" : "donuts-json",
    "selection" : {
      "path" : "/employees.json",
      "type" : "JSON"
    },
    "ref" : "_MAP"
  }, {
    "op" : "project",
    "input" : 1,
    "@id" : 2,
    "projections" : [ {
      "ref" : "output.deptId",
      "expr" : "_MAP.deptId"
    } ]
  }, {
    "op" : "project",
    "input" : 2,
    "@id" : 10,
    "projections" : [ {
      "ref" : "output.deptId1",
      "expr" : "deptId"
    } ]
  }, {
    "op" : "scan",
    "@id" : 3,
    "memo" : "initial_scan",
    "storageengine" : "donuts-json",
    "selection" : {
      "path" : "/departments.json",
      "type" : "JSON"
    },
    "ref" : "_MAP"
  }, {
    "op" : "project",
    "input" : 3,
    "@id" : 4,
    "projections" : [ {
      "ref" : "output.deptId",
      "expr" : "_MAP.deptId"
    } ]
  },  {
    "op": "join",
    "left": 10,
    "right": 4,
    "@id" : 5,
    "type": "outer",
    "conditions": [
      {"relationship": "==", "left": "deptId1", "right": "deptId"}
    ]
  }, {
    "op" : "store",
    "input" : 5,
    "@id" : 6,
    "memo" : "output sink",
    "target" : {
      "number" : 0
    },
    "partition" : null,
    "storageEngine" : "queue"
  } ]
}

returns 

{  "deptId" : 31,  "deptId1" : 31} 
{  "deptId" : 33,  "deptId1" : 33} 
{  "deptId" : 33,  "deptId1" : 33} 
{  "deptId" : 34,  "deptId1" : 34} 
{  "deptId" : 34,  "deptId1" : 34} 
{  "deptId1" : null} 
{  "deptId" : 31} 
{  "deptId" : 33} 
{  "deptId" : 34} 
{  "deptId" : 35} 

but I think it should return

{  "deptId" : 31,  "deptId1" : 31} 
{  "deptId" : 33,  "deptId1" : 33} 
{  "deptId" : 33,  "deptId1" : 33} 
{  "deptId" : 34,  "deptId1" : 34} 
{  "deptId" : 34,  "deptId1" : 34} 
{  "deptId1" : null} 
{  "deptId" : 35} 

because only 35 on the left is unmatched on the right; {31, 33, 34} have at least one match.

Also, it's cosmetic, but the "outer" join type should be called "full" because "left" is also a kind of outer join, at least in SQL parlance.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira