当前位置: 首页>>代码示例>>Java>>正文


Java JoinRelType.LEFT属性代码示例

本文整理汇总了Java中org.apache.calcite.rel.core.JoinRelType.LEFT属性的典型用法代码示例。如果您正苦于以下问题:Java JoinRelType.LEFT属性的具体用法?Java JoinRelType.LEFT怎么用?Java JoinRelType.LEFT使用的例子?那么恭喜您, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在org.apache.calcite.rel.core.JoinRelType的用法示例。


在下文中一共展示了JoinRelType.LEFT属性的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: getOutcome

public JoinOutcome getOutcome() {
  if (!ok) {
    return JoinOutcome.FAILURE;
  }
  if (bothMatches(IterOutcome.NONE) ||
          (joinType == JoinRelType.INNER && eitherMatches(IterOutcome.NONE)) ||
          (joinType == JoinRelType.LEFT && lastLeft == IterOutcome.NONE) ||
          (joinType == JoinRelType.RIGHT && lastRight == IterOutcome.NONE)) {
    return JoinOutcome.NO_MORE_DATA;
  }
  if (bothMatches(IterOutcome.OK) ||
          (eitherMatches(IterOutcome.NONE) && eitherMatches(IterOutcome.OK))) {
    return JoinOutcome.BATCH_RETURNED;
  }
  if (eitherMatches(IterOutcome.OK_NEW_SCHEMA)) {
    return JoinOutcome.SCHEMA_CHANGED;
  }
  if (eitherMatches(IterOutcome.NOT_YET)) {
    return JoinOutcome.WAITING;
  }
  return JoinOutcome.FAILURE;
}
 
开发者ID:skhalifa,项目名称:QDrill,代码行数:22,代码来源:JoinStatus.java

示例2: checkPreconditions

@Override
protected boolean checkPreconditions(JoinRel join, RelNode left, RelNode right,
    PlannerSettings settings) {
  JoinRelType type = join.getJoinType();

  if (! (type == JoinRelType.INNER || type == JoinRelType.LEFT)) {
    return false;
  }

  JoinCategory category = JoinUtils.getJoinCategory(left, right, join.getCondition(),
      Lists.<Integer>newArrayList(), Lists.<Integer>newArrayList(), Lists.<Boolean>newArrayList());
  if (category == JoinCategory.EQUALITY
      && (settings.isHashJoinEnabled() || settings.isMergeJoinEnabled())) {
    return false;
  }

  if (settings.isNlJoinForScalarOnly()) {
    if (JoinUtils.isScalarSubquery(left) || JoinUtils.isScalarSubquery(right)) {
      return true;
    } else {
      return false;
    }
  }

  return true;
}
 
开发者ID:dremio,项目名称:dremio-oss,代码行数:26,代码来源:NestedLoopJoinPrule.java

示例3: noMoreToConsumeRight

@Override
public void noMoreToConsumeRight() throws Exception {
  state.is(State.CAN_CONSUME_R);

  if (table.size() == 0 && !(joinType == JoinRelType.LEFT || joinType == JoinRelType.FULL)) {
    // nothing needs to be read on the left side as right side is empty
    state = State.DONE;
    return;
  }

  this.probe = new VectorizedProbe(
      context.getAllocator(),
      hyperContainer,
      left,
      probeOutputs,
      buildOutputs,
      config.getJoinType(),
      buildInfoList,
      startIndices,
      table,
      probePivot,
      context.getTargetBatchSize(),
      comparator);
  state = State.CAN_CONSUME_L;
}
 
开发者ID:dremio,项目名称:dremio-oss,代码行数:25,代码来源:VectorizedHashJoinOperator.java

示例4: checkPreconditions

@Override
protected boolean checkPreconditions(DrillJoinRel join, RelNode left, RelNode right,
    PlannerSettings settings) {
  JoinRelType type = join.getJoinType();

  if (! (type == JoinRelType.INNER || type == JoinRelType.LEFT)) {
    return false;
  }

  List<Integer> leftKeys = Lists.newArrayList();
  List<Integer> rightKeys = Lists.newArrayList() ;
  JoinCategory category = JoinUtils.getJoinCategory(left, right, join.getCondition(), leftKeys, rightKeys);
  if (category == JoinCategory.EQUALITY
      && (settings.isHashJoinEnabled() || settings.isMergeJoinEnabled())) {
    return false;
  }

  if (settings.isNlJoinForScalarOnly()) {
    if (JoinUtils.isScalarSubquery(left) || JoinUtils.isScalarSubquery(right)) {
      return true;
    } else {
      return false;
    }
  }

  return true;
}
 
开发者ID:skhalifa,项目名称:QDrill,代码行数:27,代码来源:NestedLoopJoinPrule.java

示例5: checkBroadcastConditions

protected boolean checkBroadcastConditions(RelOptPlanner planner, DrillJoinRel join, RelNode left, RelNode right) {

    double estimatedRightRowCount = RelMetadataQuery.getRowCount(right);
    if (estimatedRightRowCount < PrelUtil.getSettings(join.getCluster()).getBroadcastThreshold()
        && ! left.getTraitSet().getTrait(DrillDistributionTraitDef.INSTANCE).equals(DrillDistributionTrait.SINGLETON)
        && (join.getJoinType() == JoinRelType.INNER || join.getJoinType() == JoinRelType.LEFT)
        ) {
      return true;
    }
    return false;
  }
 
开发者ID:skhalifa,项目名称:QDrill,代码行数:11,代码来源:JoinPruleBase.java

示例6: flipIfRight

public HashJoinPOP flipIfRight(){
    if(joinType == JoinRelType.RIGHT){
        List<JoinCondition> flippedConditions = Lists.newArrayList();
        for(JoinCondition c : conditions){
            flippedConditions.add(c.flip());
        }
        return new HashJoinPOP(right, left, flippedConditions, JoinRelType.LEFT);
    }else{
        return this;
    }
}
 
开发者ID:skhalifa,项目名称:QDrill,代码行数:11,代码来源:HashJoinPOP.java

示例7: flipIfRight

public MergeJoinPOP flipIfRight(){
  if(joinType == JoinRelType.RIGHT){
    List<JoinCondition> flippedConditions = Lists.newArrayList();
    for(JoinCondition c : conditions){
      flippedConditions.add(c.flip());
    }
    return new MergeJoinPOP(right, left, flippedConditions, JoinRelType.LEFT);
  }else{
    return this;
  }

}
 
开发者ID:skhalifa,项目名称:QDrill,代码行数:12,代码来源:MergeJoinPOP.java

示例8: checkBroadcastConditions

protected boolean checkBroadcastConditions(RelOptPlanner planner, JoinRel join, RelNode left, RelNode right) {
  final RelMetadataQuery mq = join.getCluster().getMetadataQuery();
  // right node is the one that is being considered to be broadcasted
  final double rightRowCount = mq.getRowCount(right);
  if (rightRowCount < PrelUtil.getSettings(join.getCluster()).getBroadcastThreshold()
      && ! left.getTraitSet().getTrait(DistributionTraitDef.INSTANCE).equals(DistributionTrait.SINGLETON)
      && (join.getJoinType() == JoinRelType.INNER || join.getJoinType() == JoinRelType.LEFT)) {
    // DX-3862:  For broadcast joins, the cost should not just consider the traits and join type.  If the broadcast table is small enough,
    // we shouldn't need to worry too much and allow broadcast join and see what the planner picks.
    final PlannerSettings plannerSettings = PrelUtil.getSettings(join.getCluster());
    if (rightRowCount <= plannerSettings.getOptions().getOption(PlannerSettings.BROADCAST_MIN_THRESHOLD)) {
      logger.debug("Enable broadcast plan? true (rightRowCount %d smaller than minimum broadcast threshold)", rightRowCount);
      return true;
    }

    // In this case, the broadcast table is big-ish.  So, we should check to see if it is reasonable to do broadcast.
    // The broadcasted table will be sent at most (numEndPoints * maxWidthPerNode) times, (rightRowCount) rows.  We add a
    // penalty to broadcast (broadcastFactor).
    final double broadcastFactor = plannerSettings.getBroadcastFactor();
    final double leftRowCount = mq.getRowCount(left);

    final int numEndPoints = plannerSettings.numEndPoints();
    final long maxWidthPerNode = plannerSettings.getNumCoresPerExecutor();
    final long maxWidthPerQuery = plannerSettings.getOptions().getOption(ExecConstants.MAX_WIDTH_GLOBAL);
    final long sliceTarget = plannerSettings.getSliceTarget();
    final double minFactor = Doubles.min(leftRowCount * 1.0 / sliceTarget, numEndPoints * maxWidthPerNode, maxWidthPerQuery);
    final boolean enableBroadCast = (minFactor * broadcastFactor < leftRowCount);
    logger.debug("Enable broadcast plan? %s minFactor %d (numEndPoints %d, maxWidthPerNode %d, rightRowCount %d, broadcastFactor %d, leftRowCount %d, sliceTarget %d, maxWidthPerQuery %d)",
        enableBroadCast, minFactor, numEndPoints, maxWidthPerNode, rightRowCount, broadcastFactor, leftRowCount, sliceTarget, maxWidthPerQuery);
    return enableBroadCast;
  }
  return false;
}
 
开发者ID:dremio,项目名称:dremio-oss,代码行数:33,代码来源:JoinPruleBase.java

示例9: setupHashJoinProbe

@Override
public void setupHashJoinProbe(
    FunctionContext functionContext,
    VectorAccessible buildBatch,
    VectorAccessible probeBatch,
    VectorAccessible outgoing,
    HashTable hashTable,
    JoinRelType joinRelType,
    List<BuildInfo> buildInfos,
    List<ArrowBuf> startIndices,
    int targetRecordsPerBatch) {

  links = new ArrowBuf[buildInfos.size()];
  matches = new BitSet[buildInfos.size()];
  matchMaxes = new int[buildInfos.size()];

  for (int i =0; i < links.length; i++) {
    links[i] = buildInfos.get(i).getLinks();
    matches[i] = buildInfos.get(i).getKeyMatchBitVector();
    matchMaxes[i] = buildInfos.get(i).getRecordCount();
  }

  starts = new ArrowBuf[startIndices.size()];
  for (int i = 0; i < starts.length; i++) {
    starts[i] = startIndices.get(i);
  }

  this.probeBatch = probeBatch;
  this.projectUnmatchedProbe = joinRelType == JoinRelType.LEFT || joinRelType == JoinRelType.FULL;
  this.projectUnmatchedBuild = joinRelType == JoinRelType.RIGHT || joinRelType == JoinRelType.FULL;
  this.hashTable = hashTable;
  this.targetRecordsPerBatch = targetRecordsPerBatch;

  doSetup(functionContext, buildBatch, probeBatch, outgoing);
}
 
开发者ID:dremio,项目名称:dremio-oss,代码行数:35,代码来源:HashJoinProbeTemplate.java

示例10: noMoreToConsumeRight

@Override
public void noMoreToConsumeRight() throws Exception {
  state.is(State.CAN_CONSUME_R);

  if (hashTable.size() == 0 && !(joinType == JoinRelType.LEFT || joinType == JoinRelType.FULL)) {
    // nothing needs to be read on the left side as right side is empty
    state = State.DONE;
    return;
  }
  this.hashJoinProbe = setupHashJoinProbe();
  state = State.CAN_CONSUME_L;
}
 
开发者ID:dremio,项目名称:dremio-oss,代码行数:12,代码来源:HashJoinOperator.java

示例11: VectorizedProbe

public VectorizedProbe(
    BufferAllocator allocator,
    final ExpandableHyperContainer buildBatch,
    final VectorAccessible probeBatch,
    final List<FieldVector> probeOutputs,
    final List<FieldVector> buildOutputs,
    JoinRelType joinRelType,
    List<BuildInfo> buildInfos,
    List<ArrowBuf> startIndices,
    JoinTable table,
    PivotDef pivot,
    int targetRecordsPerBatch,
    final NullComparator nullMask){

  this.nullMask = nullMask;
  this.pivot = pivot;
  this.allocator = allocator;
  this.table = table;
  this.links = new ArrowBuf[buildInfos.size()];
  this.matches = new BitSet[buildInfos.size()];
  this.matchMaxes = new int[buildInfos.size()];

  for (int i =0; i < links.length; i++) {
    links[i] = buildInfos.get(i).getLinks();
    matches[i] = buildInfos.get(i).getKeyMatchBitVector();
    matchMaxes[i] = buildInfos.get(i).getRecordCount();
  }

  this.starts = new ArrowBuf[startIndices.size()];
  for (int i = 0; i < starts.length; i++) {
    starts[i] = startIndices.get(i);
  }

  this.projectUnmatchedBuild = joinRelType == JoinRelType.RIGHT || joinRelType == JoinRelType.FULL;
  this.projectUnmatchedProbe = joinRelType == JoinRelType.LEFT || joinRelType == JoinRelType.FULL;
  this.targetRecordsPerBatch = targetRecordsPerBatch;
  this.projectProbeSv2 = allocator.buffer(targetRecordsPerBatch * 2);
  this.probeSv2Addr = projectProbeSv2.memoryAddress();
  // first 4 bytes (int) are for batch index and rest 2 bytes are offset within the batch
  this.projectBuildOffsetBuf = allocator.buffer(targetRecordsPerBatch * BUILD_RECORD_LINK_SIZE);
  this.projectBuildOffsetAddr = projectBuildOffsetBuf.memoryAddress();

  if(table.size() > 0){
    this.buildCopiers = projectUnmatchedProbe  ?
        ConditionalFieldBufferCopier6.getFourByteCopiers(VectorContainer.getHyperFieldVectors(buildBatch), buildOutputs) :
        FieldBufferCopier6.getFourByteCopiers(VectorContainer.getHyperFieldVectors(buildBatch), buildOutputs);
  }else {
    this.buildCopiers = Collections.emptyList();
  }

  this.probeCopiers = FieldBufferCopier.getCopiers(VectorContainer.getFieldVectors(probeBatch), probeOutputs);
}
 
开发者ID:dremio,项目名称:dremio-oss,代码行数:52,代码来源:VectorizedProbe.java


注:本文中的org.apache.calcite.rel.core.JoinRelType.LEFT属性示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。