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

Hadoop QA commented on PHOENIX-5105:
------------------------------------

{color:red}-1 overall{color}.  Here are the results of testing the latest 
attachment 
  
http://issues.apache.org/jira/secure/attachment/12955974/PHOENIX-5015_v2-4.x-HBase-1.4.patch
  against 4.x-HBase-1.4 branch at commit 
c8686ce73093b879bbda5f08f3e7933a9708e110.
  ATTACHMENT ID: 12955974

    {color:green}+1 @author{color}.  The patch does not contain any @author 
tags.

    {color:green}+1 tests included{color}.  The patch appears to include 13 new 
or modified tests.

    {color:green}+1 javac{color}.  The applied patch does not increase the 
total number of javac compiler warnings.

    {color:red}-1 release audit{color}.  The applied patch generated 1 release 
audit warnings (more than the master's current 0 warnings).

    {color:red}-1 lineLengths{color}.  The patch introduces the following lines 
longer than 100:
    +            sql="select /*+ USE_SORT_MERGE_JOIN */ a.aid,b.code from 
(select aid,age from "+tableName1+" where age >=11 and age<=33) a inner join "+
+                "(select bid,code from "+tableName2+" order by code limit 2) b 
on a.aid=b.bid where b.code > 50";
+            sql="select /*+ USE_SORT_MERGE_JOIN */ a.aid,b.codesum from 
(select aid,sum(age) agesum from "+tableName1+" where age >=11 and age<=33 
group by aid order by agesum limit 3) a inner join "+
+                "(select bid,sum(code) codesum from "+tableName2+" group by 
bid order by codesum limit 2) b on a.aid=b.bid where b.codesum > 50";
+                "(select a.aid,b.code from "+tableName1+" a inner join 
"+tableName2+" b on a.aid=b.bid where b.code >=44 and b.code<=66 order by 
b.code limit 3) t1 inner join "+
+                "(select a.aid,c.region from "+tableName1+" a inner join 
"+tableName3+" c on a.aid=c.cid where c.region>=77 and c.region<=99 order by 
c.region desc limit 1) t2 on t1.aid=t2.aid "+
+                "(select a.aid,sum(b.code) codesum from "+tableName1+" a inner 
join "+tableName2+" b on a.aid=b.bid where b.code >=44 and b.code<=66 group by 
a.aid order by codesum limit 3) t1 inner join "+
+                "(select a.aid,sum(c.region) regionsum from "+tableName1+" a 
inner join "+tableName3+" c on a.aid=c.cid where c.region>=77 and c.region<=99 
group by a.aid order by regionsum desc limit 2) t2 on t1.aid=t2.aid "+
+                "(select a.aid,sum(b.code) codesum from "+tableName1+" a inner 
join "+tableName2+" b on a.aid=b.bid where b.code >=44 and b.code<=66 group by 
a.aid order by a.aid,codesum limit 3) t1 inner join "+
+                "(select a.aid,sum(c.region) regionsum from "+tableName1+" a 
inner join "+tableName3+" c on a.aid=c.cid where c.region>=77 and c.region<=99 
group by a.aid order by a.aid desc,regionsum desc limit 2) t2 on t1.aid=t2.aid 
"+

     {color:red}-1 core tests{color}.  The patch failed these unit tests:
     
./phoenix-core/target/failsafe-reports/TEST-org.apache.phoenix.end2end.index.MutableIndexIT

Test results: 
https://builds.apache.org/job/PreCommit-PHOENIX-Build/2269//testReport/
Release audit warnings: 
https://builds.apache.org/job/PreCommit-PHOENIX-Build/2269//artifact/patchprocess/patchReleaseAuditWarnings.txt
Console output: 
https://builds.apache.org/job/PreCommit-PHOENIX-Build/2269//console

This message is automatically generated.

> Push Filter through Sort for SortMergeJoin
> ------------------------------------------
>
>                 Key: PHOENIX-5105
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5105
>             Project: Phoenix
>          Issue Type: Improvement
>    Affects Versions: 4.14.1
>            Reporter: chenglei
>            Assignee: chenglei
>            Priority: Major
>             Fix For: 4.15.0
>
>         Attachments: PHOENIX-5015-4.x-HBase-1.4.patch, 
> PHOENIX-5015_v2-4.x-HBase-1.4.patch
>
>          Time Spent: 3h 50m
>  Remaining Estimate: 0h
>
> Given two tables:
> {code:java}
>           CREATE TABLE merge1 ( 
>                     aid INTEGER PRIMARY KEY,
>                     age INTEGER)
>           
>           CREATE TABLE merge2  ( 
>                     bid INTEGER PRIMARY KEY,
>                     code INTEGER)
> {code}
> for following sql :
> {code:java}
> select /*+ USE_SORT_MERGE_JOIN */ a.aid,b.code from 
> (select aid,age from merge1 where age >=11 and age<=33 order by age limit 3) 
> a inner join 
> (select bid,code from merge2 order by code limit 1) b on a.aid=b.bid where 
> b.code > 50
> {code}
> For the RHS of SortMergeJoin, at first the where condition {{b.code > 50}} is 
> pushed down to RHS as its {{JoinCompiler.Table.postFilters}},  then {{order 
> by b.bid}} is appended to RHS and it is rewritten as 
>  {{select bid,code from (select bid,code from merge2 order by code limit 1) 
> order by bid}}
> by following line 211 in {{QueryCompiler.compileJoinQuery}}.
> Next the above rewritten sql is compiled to ClientScanPlan by following line 
> 221 ,and previously pushed down {{b.code > 50}} is compiled by 
> {{table.compilePostFilterExpression}} method in following line 224 to filter 
> the result of the preceding ClientScanPlan. The problem here is that we 
> execute the {{order by bid}} first and then the postFilter {{b.code > 50}}, 
> obviously it is inefficient. In fact, we can directly rewrite the RHS as 
>  {{select bid,code from (select bid,code from merge2 order by code limit 1) 
> order by bid where code > 50}} 
>  to first filter {{b.code > 50}} and then execute the {{order by bid}} .
> {code:java}
> 208    protected QueryPlan compileJoinQuery(StatementContext context, 
> List<Object> binds, JoinTable joinTable, boolean asSubquery, boolean 
> projectPKColumns, List<OrderByNode> orderBy) throws SQLException {
> 209         if (joinTable.getJoinSpecs().isEmpty()) {
> 210              Table table = joinTable.getTable();
> 211               SelectStatement subquery = table.getAsSubquery(orderBy);
> 212              if (!table.isSubselect()) {
> 213                  context.setCurrentTable(table.getTableRef());
> 214                  PTable projectedTable = 
> table.createProjectedTable(!projectPKColumns, context);
> 215                  TupleProjector projector = new 
> TupleProjector(projectedTable);
> 216                  
> TupleProjector.serializeProjectorIntoScan(context.getScan(), projector);
> 217                  
> context.setResolver(FromCompiler.getResolverForProjectedTable(projectedTable, 
> context.getConnection(), subquery.getUdfParseNodes()));
> 218                  table.projectColumns(context.getScan());
> 219                  return compileSingleFlatQuery(context, subquery, binds, 
> asSubquery, !asSubquery, null, projectPKColumns ? projector : null, true);
> 220            }
> 221            QueryPlan plan = compileSubquery(subquery, false);
> 222            PTable projectedTable = 
> table.createProjectedTable(plan.getProjector());
> 223            
> context.setResolver(FromCompiler.getResolverForProjectedTable(projectedTable, 
> context.getConnection(), subquery.getUdfParseNodes()));
> 224            return new TupleProjectionPlan(plan, new 
> TupleProjector(plan.getProjector()), 
> table.compilePostFilterExpression(context));
> 225        }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to