本文整理汇总了Java中org.apache.calcite.rel.rules.SemiJoinRule类的典型用法代码示例。如果您正苦于以下问题:Java SemiJoinRule类的具体用法?Java SemiJoinRule怎么用?Java SemiJoinRule使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
SemiJoinRule类属于org.apache.calcite.rel.rules包,在下文中一共展示了SemiJoinRule类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。
示例1: registerAbstractRelationalRules
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
public void registerAbstractRelationalRules() {
addRule(FilterJoinRule.FILTER_ON_JOIN);
addRule(FilterJoinRule.JOIN);
addRule(AbstractConverter.ExpandConversionRule.INSTANCE);
addRule(JoinCommuteRule.INSTANCE);
addRule(SemiJoinRule.PROJECT);
addRule(SemiJoinRule.JOIN);
if (CalcitePrepareImpl.COMMUTE) {
addRule(JoinAssociateRule.INSTANCE);
}
addRule(AggregateRemoveRule.INSTANCE);
addRule(UnionToDistinctRule.INSTANCE);
addRule(ProjectRemoveRule.INSTANCE);
addRule(AggregateJoinTransposeRule.INSTANCE);
addRule(AggregateProjectMergeRule.INSTANCE);
addRule(CalcRemoveRule.INSTANCE);
addRule(SortRemoveRule.INSTANCE);
// todo: rule which makes Project({OrdinalRef}) disappear
}
开发者ID:apache,项目名称:calcite,代码行数:21,代码来源:VolcanoPlanner.java
示例2: testSemiJoinRuleExists
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
@Test public void testSemiJoinRuleExists() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select * from dept where exists (\n"
+ " select * from emp\n"
+ " where emp.deptno = dept.deptno\n"
+ " and emp.sal > 100)";
sql(sql)
.withDecorrelation(true)
.withTrim(true)
.withPre(preProgram)
.with(program)
.check();
}
开发者ID:apache,项目名称:calcite,代码行数:23,代码来源:RelOptRulesTest.java
示例3: testSemiJoinRule
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
@Test public void testSemiJoinRule() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select dept.* from dept join (\n"
+ " select distinct deptno from emp\n"
+ " where sal > 100) using (deptno)";
sql(sql)
.withDecorrelation(true)
.withTrim(true)
.withPre(preProgram)
.with(program)
.check();
}
开发者ID:apache,项目名称:calcite,代码行数:22,代码来源:RelOptRulesTest.java
示例4: testSemiJoinRuleRight
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-1495">[CALCITE-1495]
* SemiJoinRule should not apply to RIGHT and FULL JOIN</a>. */
@Test public void testSemiJoinRuleRight() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select dept.* from dept right join (\n"
+ " select distinct deptno from emp\n"
+ " where sal > 100) using (deptno)";
sql(sql)
.withPre(preProgram)
.with(program)
.withDecorrelation(true)
.withTrim(true)
.checkUnchanged();
}
开发者ID:apache,项目名称:calcite,代码行数:25,代码来源:RelOptRulesTest.java
示例5: testSemiJoinRuleFull
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
/** Similar to {@link #testSemiJoinRuleRight()} but FULL. */
@Test public void testSemiJoinRuleFull() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select dept.* from dept full join (\n"
+ " select distinct deptno from emp\n"
+ " where sal > 100) using (deptno)";
sql(sql)
.withPre(preProgram)
.with(program)
.withDecorrelation(true)
.withTrim(true)
.checkUnchanged();
}
开发者ID:apache,项目名称:calcite,代码行数:23,代码来源:RelOptRulesTest.java
示例6: testSemiJoinRuleLeft
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
/** Similar to {@link #testSemiJoinRule()} but LEFT. */
@Test public void testSemiJoinRuleLeft() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final String sql = "select name from dept left join (\n"
+ " select distinct deptno from emp\n"
+ " where sal > 100) using (deptno)";
sql(sql)
.withPre(preProgram)
.with(program)
.withDecorrelation(true)
.withTrim(true)
.check();
}
开发者ID:apache,项目名称:calcite,代码行数:23,代码来源:RelOptRulesTest.java
示例7: testPushFilterThroughSemiJoin
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-438">[CALCITE-438]
* Push predicates through SemiJoin</a>. */
@Test public void testPushFilterThroughSemiJoin() {
final HepProgram preProgram =
HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final HepProgram program =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(FilterJoinRule.JOIN)
.build();
final String sql = "select * from (\n"
+ " select * from dept where dept.deptno in (\n"
+ " select emp.deptno from emp))R\n"
+ "where R.deptno <=10";
sql(sql)
.withDecorrelation(true)
.withTrim(false)
.withPre(preProgram)
.with(program)
.check();
}
开发者ID:apache,项目名称:calcite,代码行数:27,代码来源:RelOptRulesTest.java
示例8: testSemiJoinReduceConstants
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
/** Test case for
* <a href="https://issues.apache.org/jira/browse/CALCITE-571">[CALCITE-571]
* ReduceExpressionsRule tries to reduce SemiJoin condition to non-equi
* condition</a>. */
@Test public void testSemiJoinReduceConstants() {
final HepProgram preProgram = HepProgram.builder()
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
final HepProgram program = HepProgram.builder()
.addRuleInstance(ReduceExpressionsRule.JOIN_INSTANCE)
.build();
final String sql = "select e1.sal\n"
+ "from (select * from emp where deptno = 200) as e1\n"
+ "where e1.deptno in (\n"
+ " select e2.deptno from emp e2 where e2.sal = 100)";
sql(sql)
.withDecorrelation(false)
.withTrim(true)
.withPre(preProgram)
.with(program)
.checkUnchanged();
}
开发者ID:apache,项目名称:calcite,代码行数:23,代码来源:RelOptRulesTest.java
示例9: testConvertSemiJoin
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
@Test public void testConvertSemiJoin() {
final String sql = "select * from dept where exists (\n"
+ " select * from emp\n"
+ " where emp.deptno = dept.deptno\n"
+ " and emp.sal > 100)";
checkConvertMutableRel(
"SemiJoin",
sql,
true,
ImmutableList.of(
FilterProjectTransposeRule.INSTANCE,
FilterJoinRule.FILTER_ON_JOIN,
ProjectMergeRule.INSTANCE,
SemiJoinRule.PROJECT));
}
开发者ID:apache,项目名称:calcite,代码行数:16,代码来源:MutableRelTest.java
示例10: register
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
@Override
public void register(RelOptPlanner planner) {
// force clear the query context before traversal relational operators
OLAPContext.clearThreadLocalContexts();
// register OLAP rules
addRules(planner, kylinConfig.getCalciteAddRule());
planner.addRule(OLAPToEnumerableConverterRule.INSTANCE);
planner.addRule(OLAPFilterRule.INSTANCE);
planner.addRule(OLAPProjectRule.INSTANCE);
planner.addRule(OLAPAggregateRule.INSTANCE);
planner.addRule(OLAPJoinRule.INSTANCE);
planner.addRule(OLAPLimitRule.INSTANCE);
planner.addRule(OLAPSortRule.INSTANCE);
planner.addRule(OLAPUnionRule.INSTANCE);
planner.addRule(OLAPWindowRule.INSTANCE);
// Support translate the grouping aggregate into union of simple aggregates
planner.addRule(AggregateMultipleExpandRule.INSTANCE);
planner.addRule(AggregateProjectReduceRule.INSTANCE);
// CalcitePrepareImpl.CONSTANT_REDUCTION_RULES
planner.addRule(ReduceExpressionsRule.PROJECT_INSTANCE);
planner.addRule(ReduceExpressionsRule.FILTER_INSTANCE);
planner.addRule(ReduceExpressionsRule.CALC_INSTANCE);
planner.addRule(ReduceExpressionsRule.JOIN_INSTANCE);
// the ValuesReduceRule breaks query test somehow...
// planner.addRule(ValuesReduceRule.FILTER_INSTANCE);
// planner.addRule(ValuesReduceRule.PROJECT_FILTER_INSTANCE);
// planner.addRule(ValuesReduceRule.PROJECT_INSTANCE);
removeRules(planner, kylinConfig.getCalciteRemoveRule());
// since join is the entry point, we can't push filter past join
planner.removeRule(FilterJoinRule.FILTER_ON_JOIN);
planner.removeRule(FilterJoinRule.JOIN);
// since we don't have statistic of table, the optimization of join is too cost
planner.removeRule(JoinCommuteRule.INSTANCE);
planner.removeRule(JoinPushThroughJoinRule.LEFT);
planner.removeRule(JoinPushThroughJoinRule.RIGHT);
// keep tree structure like filter -> aggregation -> project -> join/table scan, implementOLAP() rely on this tree pattern
planner.removeRule(AggregateJoinTransposeRule.INSTANCE);
planner.removeRule(AggregateProjectMergeRule.INSTANCE);
planner.removeRule(FilterProjectTransposeRule.INSTANCE);
planner.removeRule(SortJoinTransposeRule.INSTANCE);
planner.removeRule(JoinPushExpressionsRule.INSTANCE);
planner.removeRule(SortUnionTransposeRule.INSTANCE);
planner.removeRule(JoinUnionTransposeRule.LEFT_UNION);
planner.removeRule(JoinUnionTransposeRule.RIGHT_UNION);
planner.removeRule(AggregateUnionTransposeRule.INSTANCE);
planner.removeRule(DateRangeRules.FILTER_INSTANCE);
planner.removeRule(SemiJoinRule.JOIN);
planner.removeRule(SemiJoinRule.PROJECT);
// distinct count will be split into a separated query that is joined with the left query
planner.removeRule(AggregateExpandDistinctAggregatesRule.INSTANCE);
// see Dec 26th email @ http://mail-archives.apache.org/mod_mbox/calcite-dev/201412.mbox/browser
planner.removeRule(ExpandConversionRule.INSTANCE);
}
开发者ID:apache,项目名称:kylin,代码行数:63,代码来源:OLAPTableScan.java
示例11: testSemiJoinTrim
import org.apache.calcite.rel.rules.SemiJoinRule; //导入依赖的package包/类
@Test public void testSemiJoinTrim() throws Exception {
final DiffRepository diffRepos = getDiffRepos();
String sql = diffRepos.expand(null, "${sql}");
TesterImpl t = (TesterImpl) tester;
final RelDataTypeFactory typeFactory = t.getTypeFactory();
final Prepare.CatalogReader catalogReader =
t.createCatalogReader(typeFactory);
final SqlValidator validator =
t.createValidator(
catalogReader, typeFactory);
SqlToRelConverter converter =
t.createSqlToRelConverter(
validator,
catalogReader,
typeFactory,
SqlToRelConverter.Config.DEFAULT);
final SqlNode sqlQuery = t.parseQuery(sql);
final SqlNode validatedQuery = validator.validate(sqlQuery);
RelRoot root =
converter.convertQuery(validatedQuery, false, true);
root = root.withRel(converter.decorrelate(sqlQuery, root.rel));
final HepProgram program =
HepProgram.builder()
.addRuleInstance(FilterProjectTransposeRule.INSTANCE)
.addRuleInstance(FilterJoinRule.FILTER_ON_JOIN)
.addRuleInstance(ProjectMergeRule.INSTANCE)
.addRuleInstance(SemiJoinRule.PROJECT)
.build();
HepPlanner planner = new HepPlanner(program);
planner.setRoot(root.rel);
root = root.withRel(planner.findBestExp());
String planBefore = NL + RelOptUtil.toString(root.rel);
diffRepos.assertEquals("planBefore", "${planBefore}", planBefore);
converter = t.createSqlToRelConverter(validator, catalogReader, typeFactory,
SqlToRelConverter.configBuilder().withTrimUnusedFields(true).build());
root = root.withRel(converter.trimUnusedFields(false, root.rel));
String planAfter = NL + RelOptUtil.toString(root.rel);
diffRepos.assertEquals("planAfter", "${planAfter}", planAfter);
}
开发者ID:apache,项目名称:calcite,代码行数:45,代码来源:RelOptRulesTest.java
注:本文中的org.apache.calcite.rel.rules.SemiJoinRule类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论