[
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)