Class DimensionRangeShardSpec

    • Field Detail

      • UNKNOWN_NUM_CORE_PARTITIONS

        public static final int UNKNOWN_NUM_CORE_PARTITIONS
        See Also:
        Constant Field Values
    • Constructor Detail

      • DimensionRangeShardSpec

        public DimensionRangeShardSpec​(List<String> dimensions,
                                       @Nullable
                                       StringTuple start,
                                       @Nullable
                                       StringTuple end,
                                       int partitionNum,
                                       @Nullable
                                       Integer numCorePartitions)
        Parameters:
        dimensions - partition dimensions
        start - inclusive start of this range
        end - exclusive end of this range
        partitionNum - unique ID for this shard
    • Method Detail

      • getDimensions

        public List<String> getDimensions()
      • getPartitionNum

        public int getPartitionNum()
        Description copied from interface: ShardSpec
        Returns the partition ID of this segment.
      • getNumCorePartitions

        public int getNumCorePartitions()
      • isNumCorePartitionsUnknown

        public boolean isNumCorePartitionsUnknown()
      • getDomainDimensions

        public List<String> getDomainDimensions()
        Description copied from interface: ShardSpec
        Get dimensions who have possible range for the rows this shard contains.
        Returns:
        list of dimensions who has its possible range. Dimensions with unknown possible range are not listed
      • possibleInDomain

        public boolean possibleInDomain​(Map<String,​com.google.common.collect.RangeSet<String>> domain)
        Set[:i] is the cartesian product of Set[0],...,Set[i - 1] EffectiveDomain[:i] is defined as QueryDomain[:i] INTERSECTION SegmentRange[:i] i = 1 If EffectiveDomain[:i] == {start[:i]} || EffectiveDomain == {end[:i]}: if i == index.dimensions.size: ACCEPT segment else: REPEAT with i = i + 1 else if EffectiveDomain[:i] == {}: PRUNE segment else: ACCEPT segment Example: Index on (Hour, Minute, Second). Index.size is 3 I) start = (3, 25, 10) end = (5, 10, 30) query domain = {3} * [0, 10] * {10, 20, 30, 40} EffectiveDomain[:1] == {3} == start[:1] EffectiveDomain[:2] == {3} * ([0, 10] INTERSECTION [25, INF)) == {} -> PRUNE II) start = (3, 25, 10) end = (5, 15, 30) query domain = {4} * [0, 10] * {10, 20, 30, 40} EffectiveDomain[:1] == {4} (!= {} && != start[:1] && != {end[:1]}) -> ACCEPT III) start = (3, 25, 10) end = (5, 15, 30) query domain = {5} * [0, 10] * {10, 20, 30, 40} EffectiveDomain[:1] == {5} == end[:1] EffectiveDomain[:2] == {5} * ([0, 10] INTERSECTION (-INF, 15]) == {5} * [0, 10] (! ={} && != {end[:2]}) -> ACCEPT IV) start = (3, 25, 10) end = (5, 15, 30) query domain = {5} * [15, 40] * {10, 20, 30, 40} EffectiveDomain[:1] == {5} == end[:1] EffectiveDomain[:2] == {5} * ([15, 40] INTERSECTION (-INF, 15]) == {5} * {15} == {end[:2]} EffectiveDomain[:3] == {5} * {15} * ({10, 20, 30, 40} * (-INF, 30]) == {5} * {15} * {10, 20, 30} != {} -> ACCEPT V) start = (3, 25, 10) end = (5, 15, 30) query domain = {5} * [15, 40] * {50} EffectiveDomain[:1] == {5} == end[:1] EffectiveDomain[:2] == {5} * ([15, 40] INTERSECTION (-INF, 15]) == {5} * {15} == {end[:2]} EffectiveDomain[:3] == {5} * {15} * ({40} * (-INF, 30]) == {5} * {15} * {} == {} -> PRUNE
        Parameters:
        domain - The domain inferred from the query. Assumed to be non-emtpy
        Returns:
        true if segment needs to be considered for query, false if it can be pruned
      • getType

        public String getType()
        Description copied from interface: ShardSpec
        Get the type name of this ShardSpec.
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object