Class HashToRandomExchangePrel

java.lang.Object
org.apache.calcite.rel.AbstractRelNode
org.apache.calcite.rel.SingleRel
All Implemented Interfaces:
Cloneable, Iterable<Prel>, org.apache.calcite.plan.RelOptNode, org.apache.calcite.rel.RelNode, DrillRelNode, Prel

public class HashToRandomExchangePrel extends ExchangePrel
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.apache.calcite.rel.RelNode

    org.apache.calcite.rel.RelNode.Context
  • Field Summary

    Fields inherited from class org.apache.calcite.rel.SingleRel

    input

    Fields inherited from class org.apache.calcite.rel.AbstractRelNode

    digest, id, rowType, traitSet

    Fields inherited from interface org.apache.drill.exec.planner.physical.Prel

    DRILL_PHYSICAL
  • Constructor Summary

    Constructors
    Constructor
    Description
    HashToRandomExchangePrel(org.apache.calcite.plan.RelOptCluster cluster, org.apache.calcite.plan.RelTraitSet traitSet, org.apache.calcite.rel.RelNode input, List<DrillDistributionTrait.DistributionField> fields)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    org.apache.calcite.plan.RelOptCost
    computeSelfCost(org.apache.calcite.plan.RelOptPlanner planner, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
    HashToRandomExchange processes M input rows and hash partitions them based on computing a hash value on the distribution fields.
    This method creates a new UnorderedMux and Demux exchanges if mux operators are enabled.
    org.apache.calcite.rel.RelNode
    copy(org.apache.calcite.plan.RelTraitSet traitSet, List<org.apache.calcite.rel.RelNode> inputs)
     
    org.apache.calcite.rel.RelWriter
    explainTerms(org.apache.calcite.rel.RelWriter pw)
     
    A Prel's own SelectionVector mode - i.e whether it generates an SV2, SV4 or None
     
     
    Supported 'encodings' of a Prel indicates what are the acceptable modes of SelectionVector of its child Prel

    Methods inherited from class org.apache.drill.exec.planner.physical.ExchangePrel

    accept

    Methods inherited from class org.apache.drill.exec.planner.physical.SinglePrel

    iterator, needsFinalColumnReordering

    Methods inherited from class org.apache.calcite.rel.SingleRel

    childrenAccept, deriveRowType, estimateRowCount, getInput, getInputs, replaceInput

    Methods inherited from class org.apache.calcite.rel.AbstractRelNode

    accept, accept, collectVariablesSet, collectVariablesUsed, deepEquals, deepHashCode, equals, explain, getCluster, getConvention, getCorrelVariable, getDescription, getDigest, getExpectedInputRowType, getId, getInput, getRelDigest, getRelTypeName, getRowType, getTable, getTraitSet, getVariablesSet, hashCode, isEnforcer, isValid, metadata, onRegister, recomputeDigest, register, sole, toString

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator

    Methods inherited from interface org.apache.drill.exec.planner.physical.Prel

    prepareForLateralUnnestPipeline

    Methods inherited from interface org.apache.calcite.rel.RelNode

    accept, accept, childrenAccept, collectVariablesSet, collectVariablesUsed, deepEquals, deepHashCode, estimateRowCount, explain, explain, fieldIsNullable, getConvention, getCorrelVariable, getDigest, getExpectedInputRowType, getInput, getInputs, getRelDigest, getRelTypeName, getRowType, getTable, getVariablesSet, isEnforcer, isValid, metadata, onRegister, recomputeDigest, register, replaceInput

    Methods inherited from interface org.apache.calcite.plan.RelOptNode

    getCluster, getDescription, getId, getTraitSet
  • Constructor Details

    • HashToRandomExchangePrel

      public HashToRandomExchangePrel(org.apache.calcite.plan.RelOptCluster cluster, org.apache.calcite.plan.RelTraitSet traitSet, org.apache.calcite.rel.RelNode input, List<DrillDistributionTrait.DistributionField> fields)
  • Method Details

    • computeSelfCost

      public org.apache.calcite.plan.RelOptCost computeSelfCost(org.apache.calcite.plan.RelOptPlanner planner, org.apache.calcite.rel.metadata.RelMetadataQuery mq)
      HashToRandomExchange processes M input rows and hash partitions them based on computing a hash value on the distribution fields. If there are N nodes (endpoints), we can assume for costing purposes on average each sender will send M/N rows to 1 destination endpoint. (See DrillCostBase for symbol notations) Include impact of skewness of distribution : the more keys used, the less likely the distribution will be skewed. The hash cpu cost will be proportional to 1 / #_keys. C = CPU cost of hashing k fields of M/N rows + CPU cost of SV remover for M/N rows + Network cost of sending M/N rows to 1 destination. So, C = (h * 1/k * M/N) + (s * M/N) + (w * M/N) Total cost = N * C
      Specified by:
      computeSelfCost in interface org.apache.calcite.rel.RelNode
      Overrides:
      computeSelfCost in class org.apache.calcite.rel.AbstractRelNode
    • copy

      public org.apache.calcite.rel.RelNode copy(org.apache.calcite.plan.RelTraitSet traitSet, List<org.apache.calcite.rel.RelNode> inputs)
      Specified by:
      copy in interface org.apache.calcite.rel.RelNode
      Overrides:
      copy in class org.apache.calcite.rel.AbstractRelNode
    • getPhysicalOperator

      public PhysicalOperator getPhysicalOperator(PhysicalPlanCreator creator) throws IOException
      Throws:
      IOException
    • getFields

    • explainTerms

      public org.apache.calcite.rel.RelWriter explainTerms(org.apache.calcite.rel.RelWriter pw)
      Overrides:
      explainTerms in class org.apache.calcite.rel.SingleRel
    • constructMuxPrel

      public Prel constructMuxPrel(Prel child, OptionManager options)
      This method creates a new UnorderedMux and Demux exchanges if mux operators are enabled.
      Overrides:
      constructMuxPrel in class ExchangePrel
      Parameters:
      child - input to the new Unordered[Mux/Demux]Prel or new HashToRandomExchange node.
      options - options manager to check if mux is enabled.
    • getEncoding

      public BatchSchema.SelectionVectorMode getEncoding()
      Description copied from interface: Prel
      A Prel's own SelectionVector mode - i.e whether it generates an SV2, SV4 or None
    • getSupportedEncodings

      public BatchSchema.SelectionVectorMode[] getSupportedEncodings()
      Description copied from interface: Prel
      Supported 'encodings' of a Prel indicates what are the acceptable modes of SelectionVector of its child Prel
      Specified by:
      getSupportedEncodings in interface Prel
      Overrides:
      getSupportedEncodings in class SinglePrel