Vivek K T created PHOENIX-2480:
----------------------------------

             Summary: SQL Query with multiple projection selections over 
multiple tables having LEFT OUTER JOINS returns completely null for random 
columns even when data is present
                 Key: PHOENIX-2480
                 URL: https://issues.apache.org/jira/browse/PHOENIX-2480
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 4.4.0
         Environment: Linux CentOS release 6.6/ Hadoop 2.2.0 / Hbase 0.98 / JDK 
1.7.0_55 / Apache Phoenix 4.4.0
            Reporter: Vivek K T
            Priority: Blocker


Please do the following to reproduce the issue.

***********************************************************************************
Create following test tables : 
***********************************************************************************
CREATE TABLE master_businessunit (
  code varchar(255) PRIMARY KEY,
  name varchar(255)
);
CREATE TABLE master_company (
  code varchar(255)  PRIMARY KEY,
  name varchar(255) 
);
CREATE TABLE master_costcenter (
  code varchar(255) PRIMARY KEY,
  name varchar(255) 
);
CREATE TABLE master_location (
  code varchar(255) PRIMARY KEY,
  name varchar(255) 
);
CREATE TABLE master_product (
  id int(11) PRIMARY KEY,
  product_name varchar(255)
);
CREATE TABLE master_purchaseorder (
  purchaseOrderNumber varchar(255),
  companyCode varchar(255) ,
  businessUnitCode varchar(255),
  locationCode varchar(255) ,
  purchaseOrderId varchar(255) PRIMARY KEY,
  releasedOn date ,
  name varchar(255)
);
CREATE TABLE trans_purchaseorderitem (
  purchaseOrderItemId varchar(255) PRIMARY KEY,
  purchaseOrderId varchar(255),
  lineNo varchar(255),
  name varchar(255)
);
CREATE TABLE trans_purchaseorderitem_costing (
  purchaseorderItem_costing_id varchar(255) primary key,
  purchaseorderItemId varchar(255) ,
  purchaseorderId varchar(255) ,
  costcenterCode varchar(255)
);

*************************************************************************************
Upsert following test values : 
**************************************************************************************

upsert  into master_businessunit(code,name) values ('1','BU1');
upsert  into master_businessunit(code,name) values ('2','BU2');

upsert  into master_company(code,name) values ('1','Company1');
upsert  into master_company(code,name) values ('2','Company2');

upsert  into master_costcenter(code,name) values ('1','CC1');
upsert  into master_costcenter(code,name) values ('2','CC2');

upsert  into master_location(code,name) values ('1','Location1');
upsert  into master_location(code,name) values ('2','Location2');

upsert  into master_product(id,product_name) values (1,'ProductName1');
upsert  into master_product(id,product_name) values (2,'Product2');

upsert  into 
master_purchaseorder(purchaseOrderNumber,companyCode,businessUnitCode,locationCode,purchaseOrderId,releasedOn,name)
 values ('1','1','1','1','1','2015-12-01','1');
upsert  into 
master_purchaseorder(purchaseOrderNumber,companyCode,businessUnitCode,locationCode,purchaseOrderId,releasedOn,name)
 values ('2','2','2','2','2','2015-12-02','2');

upsert  into 
trans_purchaseorderitem(purchaseOrderItemId,purchaseOrderId,lineNo,name) values 
('1','1','1','1');
upsert  into 
trans_purchaseorderitem(purchaseOrderItemId,purchaseOrderId,lineNo,name) values 
('2','2','2','2');

upsert  into 
trans_purchaseorderitem_costing(purchaseorderItem_costing_id,purchaseorderItemId,purchaseorderId,costcenterCode)
 values ('1','1','1','1');
upsert  into 
trans_purchaseorderitem_costing(purchaseorderItem_costing_id,purchaseorderItemId,purchaseorderId,costcenterCode)
 values ('2','2','2','2');

********************************************************************************************

Now execute the following query : 

     SELECT
     DISTINCT 
     COALESCE( a1.name, 'N.A.'),
     COALESCE( a2.name, 'N.A.'),
     COALESCE( a3.name, 'N.A.'),
        COALESCE( a4.purchaseOrderNumber, 'N.A.'),
     COALESCE( a1.name, 'N.A.'),
     COALESCE( a4.name, 'N.A.'),
     COALESCE( a5.lineNo, 'N.A.'),
     COALESCE( a5.name, 'N.A.'),
     COALESCE( a7.name,'N.A.')
     FROM
     (
              master_purchaseorder  a4 LEFT OUTER
              JOIN master_company  a1 ON a4.companyCode =  a1.code LEFT OUTER
              JOIN master_businessunit  a2 ON  a4.businessUnitCode =  a2.code 
LEFT OUTER
              JOIN master_location  a3 ON  a4.locationCode =  a3.code LEFT OUTER
              JOIN trans_purchaseorderitem  a5 ON  a5.purchaseOrderId =  
a4.purchaseOrderId LEFT OUTER
              JOIN trans_purchaseorderitem_costing  a6 ON  
a6.purchaseOrderItemId =  a5.purchaseOrderItemId
              AND a6.purchaseOrderId = a5.purchaseOrderId LEFT OUTER
              JOIN master_costcenter   a7 ON  a6.costCenterCode =   a7.code
      )

************************************************************************************

The first three columns are displays 'N.A' in all the rows even though data is 
present.

surprisingly they return the actual values when the last three projections are 
commented out in the select clause.

For e.g. the following query (same as above, just reduced number of 
projections) returns proper data

     SELECT
     DISTINCT 
     COALESCE( a1.name, 'N.A.'),
     COALESCE( a2.name, 'N.A.'),
     COALESCE( a3.name, 'N.A.'),
        COALESCE( a4.purchaseOrderNumber, 'N.A.'),
     COALESCE( a1.name, 'N.A.'),
     COALESCE( a4.name, 'N.A.')
     FROM
     (
              master_purchaseorder  a4 LEFT OUTER
              JOIN master_company  a1 ON a4.companyCode =  a1.code LEFT OUTER
              JOIN master_businessunit  a2 ON  a4.businessUnitCode =  a2.code 
LEFT OUTER
              JOIN master_location  a3 ON  a4.locationCode =  a3.code LEFT OUTER
              JOIN trans_purchaseorderitem  a5 ON  a5.purchaseOrderId =  
a4.purchaseOrderId LEFT OUTER
              JOIN trans_purchaseorderitem_costing  a6 ON  
a6.purchaseOrderItemId =  a5.purchaseOrderItemId
              AND a6.purchaseOrderId = a5.purchaseOrderId LEFT OUTER
              JOIN master_costcenter   a7 ON  a6.costCenterCode =   a7.code
      )





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

Reply via email to