Class SingleDimensionShardSpec

All Implemented Interfaces:
ShardSpec

public class SingleDimensionShardSpec extends DimensionRangeShardSpec
ShardSpec for range partitioning based on a single dimension
  • Field Details

    • UNKNOWN_NUM_CORE_PARTITIONS

      public static final int UNKNOWN_NUM_CORE_PARTITIONS
      See Also:
  • Constructor Details

    • SingleDimensionShardSpec

      public SingleDimensionShardSpec(String dimension, @Nullable String start, @Nullable String end, int partitionNum, @Nullable Integer numCorePartitions)
      Parameters:
      dimension - partition dimension
      start - inclusive start of this range
      end - exclusive end of this range
      partitionNum - unique ID for this shard
  • Method Details

    • getSerializableObject

      public Map<String,Object> getSerializableObject()
      Returns a Map to be used for serializing objects of this class. This is to ensure that a new field added in DimensionRangeShardSpec does not get serialized when serializing a SingleDimensionShardSpec.
      Returns:
      A map containing only the keys "dimension", "start", "end", "partitionNum" and "numCorePartitions".
    • getDimension

      public String getDimension()
    • getStart

      @Nullable public String getStart()
    • getEnd

      @Nullable public String getEnd()
    • possibleInDomain

      public boolean possibleInDomain(Map<String,com.google.common.collect.RangeSet<String>> domain)
      Description copied from class: DimensionRangeShardSpec
      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
      Specified by:
      possibleInDomain in interface ShardSpec
      Overrides:
      possibleInDomain in class DimensionRangeShardSpec
      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
    • createChunk

      public <T> PartitionChunk<T> createChunk(T obj)
      Specified by:
      createChunk in interface ShardSpec
      Overrides:
      createChunk in class DimensionRangeShardSpec
    • getType

      public String getType()
      Description copied from interface: ShardSpec
      Get the type name of this ShardSpec.
      Specified by:
      getType in interface ShardSpec
      Overrides:
      getType in class DimensionRangeShardSpec
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class DimensionRangeShardSpec
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class DimensionRangeShardSpec
    • toString

      public String toString()
      Overrides:
      toString in class DimensionRangeShardSpec