You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ja...@apache.org on 2019/09/30 19:58:19 UTC

[incubator-pinot] branch refactor_transform_fetcher created (now 27cad48)

This is an automated email from the ASF dual-hosted git repository.

jackie pushed a change to branch refactor_transform_fetcher
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git.


      at 27cad48  Refactor TransformBlockDataFetcher into RowBasedBlockValueFetcher

This branch includes the following new commits:

     new 27cad48  Refactor TransformBlockDataFetcher into RowBasedBlockValueFetcher

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org


[incubator-pinot] 01/01: Refactor TransformBlockDataFetcher into RowBasedBlockValueFetcher

Posted by ja...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jackie pushed a commit to branch refactor_transform_fetcher
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git

commit 27cad489e56ff370892dfb061cc4e72dd4193415
Author: Jackie (Xiaotian) Jiang <xa...@linkedin.com>
AuthorDate: Mon Sep 30 12:56:44 2019 -0700

    Refactor TransformBlockDataFetcher into RowBasedBlockValueFetcher
    
    Add BlockValSet.isSingleValue() interface
    Remove the old value fetcher implementations
---
 .../apache/pinot/core/common/BaseBlockValSet.java  |   9 +-
 .../org/apache/pinot/core/common/BlockValSet.java  |   2 +
 .../core/common/RowBasedBlockValueFetcher.java     | 217 +++++++++++++
 .../core/operator/blocks/ProjectionBlock.java      |   9 +-
 .../core/operator/docvalsets/MultiValueSet.java    |   5 +
 .../operator/docvalsets/ProjectionBlockValSet.java |  75 ++---
 .../core/operator/docvalsets/SingleValueSet.java   |   5 +
 .../operator/docvalsets/TransformBlockValSet.java  |  10 +
 .../operator/query/SelectionOrderByOperator.java   |  18 +-
 .../transform/TransformBlockDataFetcher.java       | 351 ---------------------
 .../function/DistinctAggregationFunction.java      |   9 +-
 .../core/query/selection/SelectionFetcher.java     | 125 --------
 .../comparator/CompositeDocIdValComparator.java    |  85 -----
 .../comparator/DocIdDoubleValComparator.java       |  44 ---
 .../comparator/DocIdFloatValComparator.java        |  44 ---
 .../comparator/DocIdIntValComparator.java          |  44 ---
 .../comparator/DocIdLongValComparator.java         |  44 ---
 .../selection/comparator/IDocIdValComparator.java  |  24 --
 .../iterator/BytesSelectionColumnIterator.java     |  50 ---
 .../DoubleArraySelectionColumnIterator.java        |  45 ---
 .../iterator/DoubleSelectionColumnIterator.java    |  42 ---
 .../FloatArraySelectionColumnIterator.java         |  45 ---
 .../iterator/FloatSelectionColumnIterator.java     |  42 ---
 .../iterator/IntArraySelectionColumnIterator.java  |  45 ---
 .../iterator/IntSelectionColumnIterator.java       |  42 ---
 .../iterator/LongArraySelectionColumnIterator.java |  45 ---
 .../iterator/LongSelectionColumnIterator.java      |  42 ---
 .../iterator/SelectionColumnIterator.java          |  31 --
 .../SelectionMultiValueColumnIterator.java         |  44 ---
 ...SelectionSingleValueColumnWithDictIterator.java |  49 ---
 .../StringArraySelectionColumnIterator.java        |  45 ---
 .../iterator/StringSelectionColumnIterator.java    |  50 ---
 32 files changed, 286 insertions(+), 1451 deletions(-)

diff --git a/pinot-core/src/main/java/org/apache/pinot/core/common/BaseBlockValSet.java b/pinot-core/src/main/java/org/apache/pinot/core/common/BaseBlockValSet.java
index 88f2579..252a4f0 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/common/BaseBlockValSet.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/common/BaseBlockValSet.java
@@ -18,20 +18,13 @@
  */
 package org.apache.pinot.core.common;
 
-import org.apache.pinot.common.data.FieldSpec;
-
-
 /**
  * Abstract base class implementation for BlockValSet
  */
 public abstract class BaseBlockValSet implements BlockValSet {
-  @Override
-  public BlockValIterator iterator() {
-    throw new UnsupportedOperationException();
-  }
 
   @Override
-  public FieldSpec.DataType getValueType() {
+  public BlockValIterator iterator() {
     throw new UnsupportedOperationException();
   }
 
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockValSet.java b/pinot-core/src/main/java/org/apache/pinot/core/common/BlockValSet.java
index b39d126..98891e1 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockValSet.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/common/BlockValSet.java
@@ -27,6 +27,8 @@ public interface BlockValSet {
 
   DataType getValueType();
 
+  boolean isSingleValue();
+
   /**
    * DOCUMENT ID BASED APIs
    */
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/common/RowBasedBlockValueFetcher.java b/pinot-core/src/main/java/org/apache/pinot/core/common/RowBasedBlockValueFetcher.java
new file mode 100644
index 0000000..72a7694
--- /dev/null
+++ b/pinot-core/src/main/java/org/apache/pinot/core/common/RowBasedBlockValueFetcher.java
@@ -0,0 +1,217 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pinot.core.common;
+
+import java.io.Serializable;
+import org.apache.pinot.common.data.FieldSpec.DataType;
+
+
+public class RowBasedBlockValueFetcher {
+  private final ValueFetcher[] _valueFetchers;
+
+  public RowBasedBlockValueFetcher(BlockValSet[] blockValSets) {
+    int numColumns = blockValSets.length;
+    _valueFetchers = new ValueFetcher[numColumns];
+    for (int i = 0; i < numColumns; i++) {
+      _valueFetchers[i] = createFetcher(blockValSets[i]);
+    }
+  }
+
+  public Serializable[] getRow(int docId) {
+    int numColumns = _valueFetchers.length;
+    Serializable[] row = new Serializable[numColumns];
+    for (int i = 0; i < numColumns; i++) {
+      row[i] = _valueFetchers[i].getValue(docId);
+    }
+    return row;
+  }
+
+  private ValueFetcher createFetcher(BlockValSet blockValSet) {
+    DataType valueType = blockValSet.getValueType();
+    if (blockValSet.isSingleValue()) {
+      switch (valueType) {
+        case INT:
+          return new IntSingleValueFetcher(blockValSet.getIntValuesSV());
+        case LONG:
+          return new LongSingleValueFetcher(blockValSet.getLongValuesSV());
+        case FLOAT:
+          return new FloatSingleValueFetcher(blockValSet.getFloatValuesSV());
+        case DOUBLE:
+          return new DoubleSingleValueFetcher(blockValSet.getDoubleValuesSV());
+        case STRING:
+          return new StringSingleValueFetcher(blockValSet.getStringValuesSV());
+        case BYTES:
+          return new BytesValueFetcher(blockValSet.getBytesValuesSV());
+        default:
+          throw new IllegalStateException();
+      }
+    } else {
+      switch (valueType) {
+        case INT:
+          return new IntMultiValueFetcher(blockValSet.getIntValuesMV());
+        case LONG:
+          return new LongMultiValueFetcher(blockValSet.getLongValuesMV());
+        case FLOAT:
+          return new FloatMultiValueFetcher(blockValSet.getFloatValuesMV());
+        case DOUBLE:
+          return new DoubleMultiValueFetcher(blockValSet.getDoubleValuesMV());
+        case STRING:
+          return new StringMultiValueFetcher(blockValSet.getStringValuesMV());
+        default:
+          throw new IllegalStateException();
+      }
+    }
+  }
+
+  private interface ValueFetcher {
+    Serializable getValue(int docId);
+  }
+
+  private class IntSingleValueFetcher implements ValueFetcher {
+    private final int[] _values;
+
+    IntSingleValueFetcher(int[] values) {
+      _values = values;
+    }
+
+    public Integer getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class LongSingleValueFetcher implements ValueFetcher {
+    private final long[] _values;
+
+    LongSingleValueFetcher(long[] values) {
+      _values = values;
+    }
+
+    public Long getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class FloatSingleValueFetcher implements ValueFetcher {
+    private final float[] _values;
+
+    FloatSingleValueFetcher(float[] values) {
+      _values = values;
+    }
+
+    public Float getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class DoubleSingleValueFetcher implements ValueFetcher {
+    private final double[] _values;
+
+    DoubleSingleValueFetcher(double[] values) {
+      _values = values;
+    }
+
+    public Double getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class StringSingleValueFetcher implements ValueFetcher {
+    private final String[] _values;
+
+    StringSingleValueFetcher(String[] values) {
+      _values = values;
+    }
+
+    public String getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class BytesValueFetcher implements ValueFetcher {
+    private final byte[][] _values;
+
+    BytesValueFetcher(byte[][] values) {
+      _values = values;
+    }
+
+    public byte[] getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class IntMultiValueFetcher implements ValueFetcher {
+    private final int[][] _values;
+
+    IntMultiValueFetcher(int[][] values) {
+      _values = values;
+    }
+
+    public int[] getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class LongMultiValueFetcher implements ValueFetcher {
+    private final long[][] _values;
+
+    LongMultiValueFetcher(long[][] values) {
+      _values = values;
+    }
+
+    public long[] getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class FloatMultiValueFetcher implements ValueFetcher {
+    private final float[][] _values;
+
+    FloatMultiValueFetcher(float[][] values) {
+      _values = values;
+    }
+
+    public float[] getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class DoubleMultiValueFetcher implements ValueFetcher {
+    private final double[][] _values;
+
+    DoubleMultiValueFetcher(double[][] values) {
+      _values = values;
+    }
+
+    public double[] getValue(int docId) {
+      return _values[docId];
+    }
+  }
+
+  private class StringMultiValueFetcher implements ValueFetcher {
+    private final String[][] _values;
+
+    StringMultiValueFetcher(String[][] values) {
+      _values = values;
+    }
+
+    public String[] getValue(int docId) {
+      return _values[docId];
+    }
+  }
+}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
index 48dda48..1179885 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
@@ -63,13 +63,10 @@ public class ProjectionBlock implements Block {
     throw new UnsupportedOperationException();
   }
 
-  // TODO: let selection operator use DataBlockCache as well
-  public Block getBlock(String column) {
-    return _blockMap.get(column);
-  }
-
   public BlockValSet getBlockValueSet(String column) {
-    return new ProjectionBlockValSet(_dataBlockCache, column, _blockMap.get(column).getMetadata().getDataType());
+    BlockMetadata blockMetadata = _blockMap.get(column).getMetadata();
+    return new ProjectionBlockValSet(_dataBlockCache, column, blockMetadata.getDataType(),
+        blockMetadata.isSingleValue());
   }
 
   public DocIdSetBlock getDocIdSetBlock() {
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/MultiValueSet.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/MultiValueSet.java
index 37cc021..cde916a 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/MultiValueSet.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/MultiValueSet.java
@@ -45,4 +45,9 @@ public final class MultiValueSet extends BaseBlockValSet {
   public DataType getValueType() {
     return _dataType;
   }
+
+  @Override
+  public boolean isSingleValue() {
+    return false;
+  }
 }
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/ProjectionBlockValSet.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/ProjectionBlockValSet.java
index ac9f89e..d19ed6e 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/ProjectionBlockValSet.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/ProjectionBlockValSet.java
@@ -18,7 +18,7 @@
  */
 package org.apache.pinot.core.operator.docvalsets;
 
-import org.apache.pinot.common.data.FieldSpec;
+import org.apache.pinot.common.data.FieldSpec.DataType;
 import org.apache.pinot.core.common.BaseBlockValSet;
 import org.apache.pinot.core.common.DataBlockCache;
 import org.apache.pinot.core.operator.ProjectionOperator;
@@ -32,7 +32,8 @@ import org.apache.pinot.core.operator.ProjectionOperator;
 public class ProjectionBlockValSet extends BaseBlockValSet {
   private final DataBlockCache _dataBlockCache;
   private final String _column;
-  private final FieldSpec.DataType _dataType;
+  private final DataType _dataType;
+  private final boolean _singleValue;
 
   /**
    * Constructor for the class.
@@ -42,64 +43,48 @@ public class ProjectionBlockValSet extends BaseBlockValSet {
    * @param dataBlockCache data block cache
    * @param column Projection column.
    */
-  public ProjectionBlockValSet(DataBlockCache dataBlockCache, String column, FieldSpec.DataType dataType) {
+  public ProjectionBlockValSet(DataBlockCache dataBlockCache, String column, DataType dataType, boolean singleValue) {
     _dataBlockCache = dataBlockCache;
     _column = column;
     _dataType = dataType;
+    _singleValue = singleValue;
   }
 
   @Override
-  public int[] getIntValuesSV() {
-    return _dataBlockCache.getIntValuesForSVColumn(_column);
+  public DataType getValueType() {
+    return _dataType;
   }
 
   @Override
-  public int[][] getIntValuesMV() {
-    return _dataBlockCache.getIntValuesForMVColumn(_column);
+  public boolean isSingleValue() {
+    return _singleValue;
   }
 
   @Override
-  public long[] getLongValuesSV() {
-    return _dataBlockCache.getLongValuesForSVColumn(_column);
+  public int[] getDictionaryIdsSV() {
+    return _dataBlockCache.getDictIdsForSVColumn(_column);
   }
 
   @Override
-  public long[][] getLongValuesMV() {
-    return _dataBlockCache.getLongValuesForMVColumn(_column);
+  public int[] getIntValuesSV() {
+    return _dataBlockCache.getIntValuesForSVColumn(_column);
   }
 
   @Override
-  public float[] getFloatValuesSV() {
-    return _dataBlockCache.getFloatValuesForSVColumn(_column);
+  public long[] getLongValuesSV() {
+    return _dataBlockCache.getLongValuesForSVColumn(_column);
   }
 
   @Override
-  public float[][] getFloatValuesMV() {
-    return _dataBlockCache.getFloatValuesForMVColumn(_column);
+  public float[] getFloatValuesSV() {
+    return _dataBlockCache.getFloatValuesForSVColumn(_column);
   }
 
-  /**
-   * Returns an array of single values for the given doc Ids.
-   * Caller chooses T based on data type.
-   *
-   * @return Array of single-values from dataBlockCache.
-   */
   @Override
   public double[] getDoubleValuesSV() {
     return _dataBlockCache.getDoubleValuesForSVColumn(_column);
   }
 
-  /**
-   * Returns an array of multi-values for the given doc Ids.
-   * Caller chooses T based on data type.
-   *
-   * @return Array of multi-values from dataBlockCache.
-   */
-  @Override
-  public double[][] getDoubleValuesMV() {
-    return _dataBlockCache.getDoubleValuesForMVColumn(_column);
-  }
-
   @Override
   public String[] getStringValuesSV() {
     return _dataBlockCache.getStringValuesForSVColumn(_column);
@@ -111,23 +96,33 @@ public class ProjectionBlockValSet extends BaseBlockValSet {
   }
 
   @Override
-  public String[][] getStringValuesMV() {
-    return _dataBlockCache.getStringValuesForMVColumn(_column);
+  public int[][] getDictionaryIdsMV() {
+    return _dataBlockCache.getDictIdsForMVColumn(_column);
   }
 
   @Override
-  public FieldSpec.DataType getValueType() {
-    return _dataType;
+  public int[][] getIntValuesMV() {
+    return _dataBlockCache.getIntValuesForMVColumn(_column);
   }
 
   @Override
-  public int[] getDictionaryIdsSV() {
-    return _dataBlockCache.getDictIdsForSVColumn(_column);
+  public long[][] getLongValuesMV() {
+    return _dataBlockCache.getLongValuesForMVColumn(_column);
   }
 
   @Override
-  public int[][] getDictionaryIdsMV() {
-    return _dataBlockCache.getDictIdsForMVColumn(_column);
+  public float[][] getFloatValuesMV() {
+    return _dataBlockCache.getFloatValuesForMVColumn(_column);
+  }
+
+  @Override
+  public double[][] getDoubleValuesMV() {
+    return _dataBlockCache.getDoubleValuesForMVColumn(_column);
+  }
+
+  @Override
+  public String[][] getStringValuesMV() {
+    return _dataBlockCache.getStringValuesForMVColumn(_column);
   }
 
   @Override
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/SingleValueSet.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/SingleValueSet.java
index ea47430..9fa04ab 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/SingleValueSet.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/SingleValueSet.java
@@ -49,6 +49,11 @@ public final class SingleValueSet extends BaseBlockValSet {
   }
 
   @Override
+  public boolean isSingleValue() {
+    return true;
+  }
+
+  @Override
   public void getIntValues(int[] inDocIds, int inStartPos, int inDocIdsSize, int[] outValues, int outStartPos) {
     int inEndPos = inStartPos + inDocIdsSize;
     ReaderContext context = _reader.createContext();
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/TransformBlockValSet.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/TransformBlockValSet.java
index b8b6b22..516cd94 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/TransformBlockValSet.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/docvalsets/TransformBlockValSet.java
@@ -48,6 +48,11 @@ public class TransformBlockValSet extends BaseBlockValSet {
   }
 
   @Override
+  public boolean isSingleValue() {
+    return _transformFunction.getResultMetadata().isSingleValue();
+  }
+
+  @Override
   public int[] getDictionaryIdsSV() {
     return _transformFunction.transformToDictIdsSV(_projectionBlock);
   }
@@ -78,6 +83,11 @@ public class TransformBlockValSet extends BaseBlockValSet {
   }
 
   @Override
+  public byte[][] getBytesValuesSV() {
+    return _transformFunction.transformToBytesValuesSV(_projectionBlock);
+  }
+
+  @Override
   public int[][] getDictionaryIdsMV() {
     return _transformFunction.transformToDictIdsMV(_projectionBlock);
   }
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/query/SelectionOrderByOperator.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/query/SelectionOrderByOperator.java
index eee2ceb..422638a 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/query/SelectionOrderByOperator.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/query/SelectionOrderByOperator.java
@@ -28,16 +28,15 @@ import org.apache.pinot.common.request.transform.TransformExpressionTree;
 import org.apache.pinot.common.utils.DataSchema;
 import org.apache.pinot.common.utils.primitive.ByteArray;
 import org.apache.pinot.core.common.BlockValSet;
+import org.apache.pinot.core.common.RowBasedBlockValueFetcher;
 import org.apache.pinot.core.indexsegment.IndexSegment;
 import org.apache.pinot.core.operator.BaseOperator;
 import org.apache.pinot.core.operator.ExecutionStatistics;
 import org.apache.pinot.core.operator.blocks.IntermediateResultsBlock;
 import org.apache.pinot.core.operator.blocks.TransformBlock;
-import org.apache.pinot.core.operator.transform.TransformBlockDataFetcher;
 import org.apache.pinot.core.operator.transform.TransformOperator;
 import org.apache.pinot.core.operator.transform.TransformResultMetadata;
 import org.apache.pinot.core.query.selection.SelectionOperatorUtils;
-import org.apache.pinot.core.segment.index.readers.Dictionary;
 
 
 public class SelectionOrderByOperator extends BaseOperator<IntermediateResultsBlock> {
@@ -48,8 +47,6 @@ public class SelectionOrderByOperator extends BaseOperator<IntermediateResultsBl
   private final List<SelectionSort> _sortSequence;
   private final List<TransformExpressionTree> _expressions;
   private final TransformResultMetadata[] _expressionMetadata;
-  private final Dictionary[] _dictionaries;
-  private final BlockValSet[] _blockValSets;
   private final DataSchema _dataSchema;
   private final int _numRowsToKeep;
   private final PriorityQueue<Serializable[]> _rows;
@@ -65,17 +62,12 @@ public class SelectionOrderByOperator extends BaseOperator<IntermediateResultsBl
 
     int numExpressions = _expressions.size();
     _expressionMetadata = new TransformResultMetadata[numExpressions];
-    _dictionaries = new Dictionary[numExpressions];
-    _blockValSets = new BlockValSet[numExpressions];
     String[] columnNames = new String[numExpressions];
     DataSchema.ColumnDataType[] columnDataTypes = new DataSchema.ColumnDataType[numExpressions];
     for (int i = 0; i < numExpressions; i++) {
       TransformExpressionTree expression = _expressions.get(i);
       TransformResultMetadata expressionMetadata = _transformOperator.getResultMetadata(expression);
       _expressionMetadata[i] = expressionMetadata;
-      if (expressionMetadata.hasDictionary()) {
-        _dictionaries[i] = _transformOperator.getDictionary(expression);
-      }
       columnNames[i] = expression.toString();
       columnDataTypes[i] =
           DataSchema.ColumnDataType.fromDataType(expressionMetadata.getDataType(), expressionMetadata.isSingleValue());
@@ -142,17 +134,17 @@ public class SelectionOrderByOperator extends BaseOperator<IntermediateResultsBl
     TransformBlock transformBlock;
     while ((transformBlock = _transformOperator.nextBlock()) != null) {
       int numExpressions = _expressions.size();
+      BlockValSet[] blockValSets = new BlockValSet[numExpressions];
       for (int i = 0; i < numExpressions; i++) {
         TransformExpressionTree expression = _expressions.get(i);
-        _blockValSets[i] = transformBlock.getBlockValueSet(expression);
+        blockValSets[i] = transformBlock.getBlockValueSet(expression);
       }
-      TransformBlockDataFetcher dataFetcher =
-          new TransformBlockDataFetcher(_blockValSets, _dictionaries, _expressionMetadata);
+      RowBasedBlockValueFetcher blockValueFetcher = new RowBasedBlockValueFetcher(blockValSets);
 
       int numDocsFetched = transformBlock.getNumDocs();
       numDocsScanned += numDocsFetched;
       for (int i = 0; i < numDocsFetched; i++) {
-        SelectionOperatorUtils.addToPriorityQueue(dataFetcher.getRow(i), _rows, _numRowsToKeep);
+        SelectionOperatorUtils.addToPriorityQueue(blockValueFetcher.getRow(i), _rows, _numRowsToKeep);
       }
     }
 
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/TransformBlockDataFetcher.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/TransformBlockDataFetcher.java
deleted file mode 100644
index 08d0bbf..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/TransformBlockDataFetcher.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.operator.transform;
-
-import java.io.Serializable;
-import org.apache.pinot.common.data.FieldSpec.DataType;
-import org.apache.pinot.core.common.BlockValSet;
-import org.apache.pinot.core.segment.index.readers.Dictionary;
-
-
-public class TransformBlockDataFetcher {
-
-  private final Fetcher[] _fetchers;
-
-  public TransformBlockDataFetcher(BlockValSet[] blockValSets, Dictionary[] dictionaries,
-      TransformResultMetadata[] expressionResultMetadata) {
-    _fetchers = new Fetcher[blockValSets.length];
-    for (int i = 0; i < blockValSets.length; i++) {
-      if (dictionaries.length == 0 && expressionResultMetadata.length == 0) {
-        _fetchers[i] = createSVNoDictionaryFetcher(blockValSets[i]);
-      } else {
-        _fetchers[i] = createFetcher(blockValSets[i], dictionaries[i], expressionResultMetadata[i]);
-      }
-    }
-  }
-
-  public Serializable[] getRow(int docId) {
-    Serializable[] row = new Serializable[_fetchers.length];
-    for (int i = 0; i < _fetchers.length; i++) {
-      row[i] = _fetchers[i].getValue(docId);
-    }
-    return row;
-  }
-
-  /**
-   * Create SV non-dictionary based fetcher
-   * @param blockValSet column value set
-   * @return fetcher
-   */
-  private Fetcher createSVNoDictionaryFetcher(BlockValSet blockValSet) {
-    switch (blockValSet.getValueType()) {
-      case INT:
-        return new SVIntValueFetcher(blockValSet.getIntValuesSV());
-      case LONG:
-        return new SVLongValueFetcher(blockValSet.getLongValuesSV());
-      case FLOAT:
-        return new SVFloatValueFetcher(blockValSet.getFloatValuesSV());
-      case DOUBLE:
-        return new SVDoubleValueFetcher(blockValSet.getDoubleValuesSV());
-      case BOOLEAN:
-      case STRING:
-        return new SVStringValueFetcher(blockValSet.getStringValuesSV());
-      case BYTES:
-        return new SVBytesValueFetcher(blockValSet.getBytesValuesSV());
-    }
-
-    throw new UnsupportedOperationException();
-  }
-
-  private Fetcher createFetcher(BlockValSet blockValSet, Dictionary dictionary,
-      TransformResultMetadata expressionResultMetadata) {
-    if (expressionResultMetadata.hasDictionary()) {
-      if (expressionResultMetadata.isSingleValue()) {
-        return new DictionaryBasedSVValueFetcher(dictionary, blockValSet.getDictionaryIdsSV(),
-            expressionResultMetadata.getDataType());
-      } else {
-        switch (expressionResultMetadata.getDataType()) {
-          case INT:
-            return new DictionaryBasedMVIntValueFetcher(dictionary, blockValSet.getDictionaryIdsMV());
-          case LONG:
-            return new DictionaryBasedMVLongValueFetcher(dictionary, blockValSet.getDictionaryIdsMV());
-          case FLOAT:
-            return new DictionaryBasedMVFloatValueFetcher(dictionary, blockValSet.getDictionaryIdsMV());
-          case DOUBLE:
-            return new DictionaryBasedMVDoubleValueFetcher(dictionary, blockValSet.getDictionaryIdsMV());
-          case BOOLEAN:
-          case STRING:
-            return new DictionaryBasedMVStringValueFetcher(dictionary, blockValSet.getDictionaryIdsMV());
-          case BYTES:
-            return new DictionaryBasedMVBytesValueFetcher(dictionary, blockValSet.getDictionaryIdsMV());
-        }
-      }
-    } else {
-      switch (expressionResultMetadata.getDataType()) {
-        case INT:
-          return new SVIntValueFetcher(blockValSet.getIntValuesSV());
-        case LONG:
-          return new SVLongValueFetcher(blockValSet.getLongValuesSV());
-        case FLOAT:
-          return new SVFloatValueFetcher(blockValSet.getFloatValuesSV());
-        case DOUBLE:
-          return new SVDoubleValueFetcher(blockValSet.getDoubleValuesSV());
-        case BOOLEAN:
-        case STRING:
-          return new SVStringValueFetcher(blockValSet.getStringValuesSV());
-        case BYTES:
-          return new SVBytesValueFetcher(blockValSet.getBytesValuesSV());
-      }
-    }
-    throw new UnsupportedOperationException();
-  }
-}
-
-interface Fetcher {
-
-  Serializable getValue(int docId);
-}
-
-class SVIntValueFetcher implements Fetcher {
-
-  private int[] _values;
-
-  SVIntValueFetcher(int[] values) {
-    _values = values;
-  }
-
-  public Serializable getValue(int docId) {
-    return _values[docId];
-  }
-}
-
-class SVLongValueFetcher implements Fetcher {
-
-  private long[] _values;
-
-  SVLongValueFetcher(long[] values) {
-    _values = values;
-  }
-
-  public Serializable getValue(int docId) {
-    return _values[docId];
-  }
-}
-
-class SVFloatValueFetcher implements Fetcher {
-
-  private float[] _values;
-
-  SVFloatValueFetcher(float[] values) {
-    _values = values;
-  }
-
-  public Serializable getValue(int docId) {
-    return _values[docId];
-  }
-}
-
-class SVDoubleValueFetcher implements Fetcher {
-
-  private double[] _values;
-
-  SVDoubleValueFetcher(double[] values) {
-    _values = values;
-  }
-
-  public Serializable getValue(int docId) {
-    return _values[docId];
-  }
-}
-
-class SVStringValueFetcher implements Fetcher {
-
-  private String[] _values;
-
-  SVStringValueFetcher(String[] values) {
-    _values = values;
-  }
-
-  public Serializable getValue(int docId) {
-    return _values[docId];
-  }
-}
-
-class SVBytesValueFetcher implements Fetcher {
-
-  private byte[][] _values;
-
-  SVBytesValueFetcher(byte[][] values) {
-    _values = values;
-  }
-
-  public Serializable getValue(int docId) {
-    return _values[docId];
-  }
-}
-
-class DictionaryBasedSVValueFetcher implements Fetcher {
-
-  private Dictionary _dictionary;
-  private int[] _dictionaryIds;
-  private DataType _dataType;
-
-  DictionaryBasedSVValueFetcher(Dictionary dictionary, int[] dictionaryIds, DataType dataType) {
-
-    _dictionary = dictionary;
-    _dictionaryIds = dictionaryIds;
-    _dataType = dataType;
-  }
-
-  public Serializable getValue(int docId) {
-    return (Serializable) _dictionary.get(_dictionaryIds[docId]);
-  }
-}
-
-class DictionaryBasedMVIntValueFetcher implements Fetcher {
-
-  private Dictionary _dictionary;
-  private int[][] _dictionaryIdsArray;
-
-  DictionaryBasedMVIntValueFetcher(Dictionary dictionary, int[][] dictionaryIdsArray) {
-
-    _dictionary = dictionary;
-    _dictionaryIdsArray = dictionaryIdsArray;
-  }
-
-  public Serializable getValue(int docId) {
-    int[] dictIds = _dictionaryIdsArray[docId];
-    int[] values = new int[dictIds.length];
-    for (int i = 0; i < dictIds.length; i++) {
-      int dictId = dictIds[i];
-      values[i] = _dictionary.getIntValue(dictId);
-    }
-    return values;
-  }
-}
-
-class DictionaryBasedMVLongValueFetcher implements Fetcher {
-
-  private Dictionary _dictionary;
-  private int[][] _dictionaryIdsArray;
-
-  DictionaryBasedMVLongValueFetcher(Dictionary dictionary, int[][] dictionaryIdsArray) {
-
-    _dictionary = dictionary;
-    _dictionaryIdsArray = dictionaryIdsArray;
-  }
-
-  public Serializable getValue(int docId) {
-    int[] dictIds = _dictionaryIdsArray[docId];
-    long[] values = new long[dictIds.length];
-    for (int i = 0; i < dictIds.length; i++) {
-      int dictId = dictIds[i];
-      values[i] = _dictionary.getLongValue(dictId);
-    }
-    return values;
-  }
-}
-
-class DictionaryBasedMVFloatValueFetcher implements Fetcher {
-
-  private Dictionary _dictionary;
-  private int[][] _dictionaryIdsArray;
-
-  DictionaryBasedMVFloatValueFetcher(Dictionary dictionary, int[][] dictionaryIdsArray) {
-
-    _dictionary = dictionary;
-    _dictionaryIdsArray = dictionaryIdsArray;
-  }
-
-  public Serializable getValue(int docId) {
-    int[] dictIds = _dictionaryIdsArray[docId];
-    float[] values = new float[dictIds.length];
-    for (int i = 0; i < dictIds.length; i++) {
-      int dictId = dictIds[i];
-      values[i] = _dictionary.getFloatValue(dictId);
-    }
-    return values;
-  }
-}
-
-class DictionaryBasedMVDoubleValueFetcher implements Fetcher {
-
-  private Dictionary _dictionary;
-  private int[][] _dictionaryIdsArray;
-
-  DictionaryBasedMVDoubleValueFetcher(Dictionary dictionary, int[][] dictionaryIdsArray) {
-
-    _dictionary = dictionary;
-    _dictionaryIdsArray = dictionaryIdsArray;
-  }
-
-  public Serializable getValue(int docId) {
-    int[] dictIds = _dictionaryIdsArray[docId];
-    double[] values = new double[dictIds.length];
-    for (int i = 0; i < dictIds.length; i++) {
-      int dictId = dictIds[i];
-      values[i] = _dictionary.getDoubleValue(dictId);
-    }
-    return values;
-  }
-}
-
-class DictionaryBasedMVStringValueFetcher implements Fetcher {
-
-  private Dictionary _dictionary;
-  private int[][] _dictionaryIdsArray;
-
-  DictionaryBasedMVStringValueFetcher(Dictionary dictionary, int[][] dictionaryIdsArray) {
-
-    _dictionary = dictionary;
-    _dictionaryIdsArray = dictionaryIdsArray;
-  }
-
-  public Serializable getValue(int docId) {
-    int[] dictIds = _dictionaryIdsArray[docId];
-    String[] values = new String[dictIds.length];
-    for (int i = 0; i < dictIds.length; i++) {
-      int dictId = dictIds[i];
-      values[i] = _dictionary.getStringValue(dictId);
-    }
-    return values;
-  }
-}
-
-class DictionaryBasedMVBytesValueFetcher implements Fetcher {
-
-  private Dictionary _dictionary;
-  private int[][] _dictionaryIdsArray;
-
-  DictionaryBasedMVBytesValueFetcher(Dictionary dictionary, int[][] dictionaryIdsArray) {
-
-    _dictionary = dictionary;
-    _dictionaryIdsArray = dictionaryIdsArray;
-  }
-
-  public Serializable getValue(int docId) {
-    int[] dictIds = _dictionaryIdsArray[docId];
-    byte[][] values = new byte[dictIds.length][];
-    for (int i = 0; i < dictIds.length; i++) {
-      int dictId = dictIds[i];
-      values[i] = _dictionary.getBytesValue(dictId);
-    }
-    return values;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAggregationFunction.java b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAggregationFunction.java
index cf68e1d..8f1a868 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAggregationFunction.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAggregationFunction.java
@@ -24,14 +24,12 @@ import org.apache.pinot.common.data.FieldSpec;
 import org.apache.pinot.common.function.AggregationFunctionType;
 import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
 import org.apache.pinot.core.common.BlockValSet;
+import org.apache.pinot.core.common.RowBasedBlockValueFetcher;
 import org.apache.pinot.core.data.table.Key;
-import org.apache.pinot.core.operator.transform.TransformBlockDataFetcher;
-import org.apache.pinot.core.operator.transform.TransformResultMetadata;
 import org.apache.pinot.core.query.aggregation.AggregationResultHolder;
 import org.apache.pinot.core.query.aggregation.DistinctTable;
 import org.apache.pinot.core.query.aggregation.ObjectAggregationResultHolder;
 import org.apache.pinot.core.query.aggregation.groupby.GroupByResultHolder;
-import org.apache.pinot.core.segment.index.readers.Dictionary;
 import org.apache.pinot.pql.parsers.pql2.ast.FunctionCallAstNode;
 
 
@@ -89,8 +87,7 @@ public class DistinctAggregationFunction implements AggregationFunction<Distinct
 
     // TODO: Follow up PR will make few changes to start using DictionaryBasedAggregationOperator
     // for DISTINCT queries without filter.
-    TransformBlockDataFetcher transformBlockDataFetcher =
-        new TransformBlockDataFetcher(blockValSets, new Dictionary[0], new TransformResultMetadata[0]);
+    RowBasedBlockValueFetcher blockValueFetcher = new RowBasedBlockValueFetcher(blockValSets);
 
     int rowIndex = 0;
     // TODO: Do early termination in the operator itself which should
@@ -99,7 +96,7 @@ public class DistinctAggregationFunction implements AggregationFunction<Distinct
     // has to communicate back that required number of records have
     // been collected
     while (rowIndex < length && _distinctTable.size() < _limit) {
-      Object[] columnData = transformBlockDataFetcher.getRow(rowIndex);
+      Object[] columnData = blockValueFetcher.getRow(rowIndex);
       _distinctTable.addKey(new Key(columnData));
       rowIndex++;
     }
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionFetcher.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionFetcher.java
deleted file mode 100644
index 94cde48..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionFetcher.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection;
-
-import java.io.Serializable;
-import org.apache.pinot.common.utils.DataSchema;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.query.selection.iterator.BytesSelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.DoubleArraySelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.DoubleSelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.FloatArraySelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.FloatSelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.IntArraySelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.IntSelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.LongArraySelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.LongSelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.SelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.SelectionSingleValueColumnWithDictIterator;
-import org.apache.pinot.core.query.selection.iterator.StringArraySelectionColumnIterator;
-import org.apache.pinot.core.query.selection.iterator.StringSelectionColumnIterator;
-
-
-/**
- * Selection fetcher is used for querying rows from given blocks and schema.
- * SelectionFetcher will initialize iterators on each data column and provide
- * the ability to return a Serializable array as a row for a given docId.
- *
- */
-public class SelectionFetcher {
-  private final int _numColumns;
-  private final SelectionColumnIterator[] _selectionColumnIterators;
-
-  public SelectionFetcher(Block[] blocks, DataSchema dataSchema) {
-    _numColumns = blocks.length;
-    _selectionColumnIterators = new SelectionColumnIterator[_numColumns];
-
-    for (int i = 0; i < _numColumns; i++) {
-      Block block = blocks[i];
-      DataSchema.ColumnDataType columnDataType = dataSchema.getColumnDataType(i);
-      if (block.getMetadata().hasDictionary()) {
-        // With dictionary
-
-        switch (columnDataType) {
-          // Single value
-          case INT:
-          case LONG:
-          case FLOAT:
-          case DOUBLE:
-          case STRING:
-          case BYTES:
-            _selectionColumnIterators[i] = new SelectionSingleValueColumnWithDictIterator(block);
-            break;
-          // Multi value
-          case INT_ARRAY:
-            _selectionColumnIterators[i] = new IntArraySelectionColumnIterator(block);
-            break;
-          case FLOAT_ARRAY:
-            _selectionColumnIterators[i] = new FloatArraySelectionColumnIterator(block);
-            break;
-          case LONG_ARRAY:
-            _selectionColumnIterators[i] = new LongArraySelectionColumnIterator(block);
-            break;
-          case DOUBLE_ARRAY:
-            _selectionColumnIterators[i] = new DoubleArraySelectionColumnIterator(block);
-            break;
-          case STRING_ARRAY:
-            _selectionColumnIterators[i] = new StringArraySelectionColumnIterator(block);
-            break;
-          default:
-            throw new UnsupportedOperationException();
-        }
-      } else {
-        // No dictionary
-
-        switch (columnDataType) {
-          case INT:
-            _selectionColumnIterators[i] = new IntSelectionColumnIterator(block);
-            break;
-          case LONG:
-            _selectionColumnIterators[i] = new LongSelectionColumnIterator(block);
-            break;
-          case FLOAT:
-            _selectionColumnIterators[i] = new FloatSelectionColumnIterator(block);
-            break;
-          case DOUBLE:
-            _selectionColumnIterators[i] = new DoubleSelectionColumnIterator(block);
-            break;
-          case STRING:
-            _selectionColumnIterators[i] = new StringSelectionColumnIterator(block);
-            break;
-          case BYTES:
-            _selectionColumnIterators[i] = new BytesSelectionColumnIterator(block);
-            break;
-          // TODO: add multi value support
-          default:
-            throw new UnsupportedOperationException();
-        }
-      }
-    }
-  }
-
-  public Serializable[] getRow(int docId) {
-    final Serializable[] row = new Serializable[_numColumns];
-    for (int i = 0; i < _numColumns; i++) {
-      row[i] = _selectionColumnIterators[i].getValue(docId);
-    }
-    return row;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/CompositeDocIdValComparator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/CompositeDocIdValComparator.java
deleted file mode 100644
index e463c7f..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/CompositeDocIdValComparator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.comparator;
-
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import org.apache.pinot.common.request.SelectionSort;
-import org.apache.pinot.core.common.Block;
-
-
-/**
- * Comparator to order the doc id based on sort sequence across multiple blocks
- */
-public final class CompositeDocIdValComparator implements Comparator<Integer> {
-  private final List<SelectionSort> sortSequence;
-  private final Block[] blocks;
-  IDocIdValComparator[] docIdValComparators;
-  boolean[] eligibleToCompare;
-
-  public CompositeDocIdValComparator(List<SelectionSort> sortSequence, Block[] blocks) {
-    this.sortSequence = sortSequence;
-    this.blocks = blocks;
-    docIdValComparators = new IDocIdValComparator[blocks.length];
-    eligibleToCompare = new boolean[blocks.length];
-    Arrays.fill(eligibleToCompare, true);
-    for (int i = 0; i < sortSequence.size(); ++i) {
-      if (!blocks[i].getMetadata().isSingleValue()) {
-        eligibleToCompare[i] = false;
-        continue;
-      }
-
-      if (blocks[i].getMetadata().hasDictionary()) {
-        docIdValComparators[i] = new DocIdIntValComparator(blocks[i], sortSequence.get(i).isIsAsc());
-      } else {
-        switch (blocks[i].getMetadata().getDataType()) {
-          case INT:
-            docIdValComparators[i] = new DocIdIntValComparator(blocks[i], sortSequence.get(i).isIsAsc());
-            break;
-          case LONG:
-            docIdValComparators[i] = new DocIdLongValComparator(blocks[i], sortSequence.get(i).isIsAsc());
-            break;
-          case FLOAT:
-            docIdValComparators[i] = new DocIdFloatValComparator(blocks[i], sortSequence.get(i).isIsAsc());
-            break;
-          case DOUBLE:
-            docIdValComparators[i] = new DocIdDoubleValComparator(blocks[i], sortSequence.get(i).isIsAsc());
-            break;
-          default:
-            eligibleToCompare[i] = false;
-        }
-      }
-    }
-  }
-
-  @Override
-  public int compare(Integer docId1, Integer docId2) {
-    int ret = 0;
-    for (int i = 0; i < sortSequence.size(); ++i) {
-      if (eligibleToCompare[i]) {
-        ret = docIdValComparators[i].compare(docId1, docId2);
-        if (ret != 0) {
-          return ret;
-        }
-      }
-    }
-    return ret;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdDoubleValComparator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdDoubleValComparator.java
deleted file mode 100644
index 1bf25c8..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdDoubleValComparator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.comparator;
-
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-public class DocIdDoubleValComparator implements IDocIdValComparator {
-
-  int orderToggleMultiplier = 1;
-  private final BlockSingleValIterator blockValSetIterator;
-
-  public DocIdDoubleValComparator(Block block, boolean ascending) {
-    blockValSetIterator = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-    if (!ascending) {
-      orderToggleMultiplier = -1;
-    }
-  }
-
-  public int compare(int docId1, int docId2) {
-    blockValSetIterator.skipTo(docId1);
-    double val1 = blockValSetIterator.nextDoubleVal();
-    blockValSetIterator.skipTo(docId2);
-    double val2 = blockValSetIterator.nextDoubleVal();
-    return Double.compare(val1, val2) * orderToggleMultiplier;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdFloatValComparator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdFloatValComparator.java
deleted file mode 100644
index 3b54545..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdFloatValComparator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.comparator;
-
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-public class DocIdFloatValComparator implements IDocIdValComparator {
-
-  int orderToggleMultiplier = 1;
-  private final BlockSingleValIterator blockValSetIterator;
-
-  public DocIdFloatValComparator(Block block, boolean ascending) {
-    blockValSetIterator = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-    if (!ascending) {
-      orderToggleMultiplier = -1;
-    }
-  }
-
-  public int compare(int docId1, int docId2) {
-    blockValSetIterator.skipTo(docId1);
-    float val1 = blockValSetIterator.nextFloatVal();
-    blockValSetIterator.skipTo(docId2);
-    float val2 = blockValSetIterator.nextFloatVal();
-    return Float.compare(val1, val2) * orderToggleMultiplier;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdIntValComparator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdIntValComparator.java
deleted file mode 100644
index e4880e3..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdIntValComparator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.comparator;
-
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-public class DocIdIntValComparator implements IDocIdValComparator {
-
-  int orderToggleMultiplier = 1;
-  private final BlockSingleValIterator blockValSetIterator;
-
-  public DocIdIntValComparator(Block block, boolean ascending) {
-    blockValSetIterator = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-    if (ascending) {
-      orderToggleMultiplier = -1;
-    }
-  }
-
-  public int compare(int docId1, int docId2) {
-    blockValSetIterator.skipTo(docId1);
-    int val1 = blockValSetIterator.nextIntVal();
-    blockValSetIterator.skipTo(docId2);
-    int val2 = blockValSetIterator.nextIntVal();
-    return Integer.compare(val1, val2) * orderToggleMultiplier;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdLongValComparator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdLongValComparator.java
deleted file mode 100644
index 5a7db74..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/DocIdLongValComparator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.comparator;
-
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-public class DocIdLongValComparator implements IDocIdValComparator {
-
-  int orderToggleMultiplier = 1;
-  private final BlockSingleValIterator blockValSetIterator;
-
-  public DocIdLongValComparator(Block block, boolean ascending) {
-    blockValSetIterator = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-    if (!ascending) {
-      orderToggleMultiplier = -1;
-    }
-  }
-
-  public int compare(int docId1, int docId2) {
-    blockValSetIterator.skipTo(docId1);
-    long val1 = blockValSetIterator.nextLongVal();
-    blockValSetIterator.skipTo(docId2);
-    long val2 = blockValSetIterator.nextLongVal();
-    return Long.compare(val1, val2) * orderToggleMultiplier;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/IDocIdValComparator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/IDocIdValComparator.java
deleted file mode 100644
index ea059ea..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/comparator/IDocIdValComparator.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.comparator;
-
-public interface IDocIdValComparator {
-
-  int compare(int docId1, int docId2);
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/BytesSelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/BytesSelectionColumnIterator.java
deleted file mode 100644
index 3666bdc..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/BytesSelectionColumnIterator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import com.clearspring.analytics.util.Preconditions;
-import java.io.Serializable;
-import org.apache.pinot.common.data.FieldSpec;
-import org.apache.pinot.common.utils.BytesUtils;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-/**
- * Iterator on bytes no dictionary column selection query.
- *
- */
-public class BytesSelectionColumnIterator implements SelectionColumnIterator {
-  private final FieldSpec.DataType _dataType;
-  protected BlockSingleValIterator bvIter;
-
-  public BytesSelectionColumnIterator(Block block) {
-    _dataType = block.getMetadata().getDataType();
-    Preconditions
-        .checkArgument(_dataType.equals(FieldSpec.DataType.BYTES),
-            "Illegal data type for BytesSelectionColumnIterator: " + _dataType);
-    bvIter = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    return bvIter.nextBytesVal();
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/DoubleArraySelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/DoubleArraySelectionColumnIterator.java
deleted file mode 100644
index fdefb11..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/DoubleArraySelectionColumnIterator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-
-
-/**
- * Iterator on double array column selection query.
- *
- */
-public class DoubleArraySelectionColumnIterator extends SelectionMultiValueColumnIterator {
-
-  public DoubleArraySelectionColumnIterator(Block block) {
-    super(block);
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    int dictSize = bvIter.nextIntVal(dictIds);
-    double[] rawIntRow = new double[dictSize];
-    for (int dictIdx = 0; dictIdx < dictSize; ++dictIdx) {
-      rawIntRow[dictIdx] = (Double) (dict.get(dictIds[dictIdx]));
-    }
-    return rawIntRow;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/DoubleSelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/DoubleSelectionColumnIterator.java
deleted file mode 100644
index 001e7d5..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/DoubleSelectionColumnIterator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-/**
- * Iterator on double no dictionary column selection query.
- *
- */
-public class DoubleSelectionColumnIterator implements SelectionColumnIterator {
-  protected BlockSingleValIterator bvIter;
-
-  public DoubleSelectionColumnIterator(Block block) {
-    bvIter = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    return bvIter.nextDoubleVal();
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/FloatArraySelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/FloatArraySelectionColumnIterator.java
deleted file mode 100644
index 6c83259..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/FloatArraySelectionColumnIterator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-
-
-/**
- * Iterator on float array column selection query.
- *
- */
-public class FloatArraySelectionColumnIterator extends SelectionMultiValueColumnIterator {
-
-  public FloatArraySelectionColumnIterator(Block block) {
-    super(block);
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    int dictSize = bvIter.nextIntVal(dictIds);
-    float[] rawIntRow = new float[dictSize];
-    for (int dictIdx = 0; dictIdx < dictSize; ++dictIdx) {
-      rawIntRow[dictIdx] = (Float) (dict.get(dictIds[dictIdx]));
-    }
-    return rawIntRow;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/FloatSelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/FloatSelectionColumnIterator.java
deleted file mode 100644
index bf4934b..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/FloatSelectionColumnIterator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-/**
- * Iterator on float no dictionary column selection query.
- *
- */
-public class FloatSelectionColumnIterator implements SelectionColumnIterator {
-  protected BlockSingleValIterator bvIter;
-
-  public FloatSelectionColumnIterator(Block block) {
-    bvIter = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    return bvIter.nextFloatVal();
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/IntArraySelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/IntArraySelectionColumnIterator.java
deleted file mode 100644
index 1151599..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/IntArraySelectionColumnIterator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-
-
-/**
- * Iterator on int array column selection query.
- *
- */
-public class IntArraySelectionColumnIterator extends SelectionMultiValueColumnIterator {
-
-  public IntArraySelectionColumnIterator(Block block) {
-    super(block);
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    int dictSize = bvIter.nextIntVal(dictIds);
-    int[] rawIntRow = new int[dictSize];
-    for (int dictIdx = 0; dictIdx < dictSize; ++dictIdx) {
-      rawIntRow[dictIdx] = (Integer) (dict.get(dictIds[dictIdx]));
-    }
-    return rawIntRow;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/IntSelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/IntSelectionColumnIterator.java
deleted file mode 100644
index abf15c4..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/IntSelectionColumnIterator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-/**
- * Iterator on int no dictionary column selection query.
- *
- */
-public class IntSelectionColumnIterator implements SelectionColumnIterator {
-  protected BlockSingleValIterator bvIter;
-
-  public IntSelectionColumnIterator(Block block) {
-    bvIter = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    return bvIter.nextIntVal();
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/LongArraySelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/LongArraySelectionColumnIterator.java
deleted file mode 100644
index 10c616f..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/LongArraySelectionColumnIterator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-
-
-/**
- * Iterator on long array column selection query.
- *
- */
-public class LongArraySelectionColumnIterator extends SelectionMultiValueColumnIterator {
-
-  public LongArraySelectionColumnIterator(Block block) {
-    super(block);
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    int dictSize = bvIter.nextIntVal(dictIds);
-    long[] rawIntRow = new long[dictSize];
-    for (int dictIdx = 0; dictIdx < dictSize; ++dictIdx) {
-      rawIntRow[dictIdx] = (Long) (dict.get(dictIds[dictIdx]));
-    }
-    return rawIntRow;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/LongSelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/LongSelectionColumnIterator.java
deleted file mode 100644
index f77e243..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/LongSelectionColumnIterator.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-
-
-/**
- * Iterator on long no dictionary column selection query.
- *
- */
-public class LongSelectionColumnIterator implements SelectionColumnIterator {
-  protected BlockSingleValIterator bvIter;
-
-  public LongSelectionColumnIterator(Block block) {
-    bvIter = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    return bvIter.nextLongVal();
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionColumnIterator.java
deleted file mode 100644
index 3aab108..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionColumnIterator.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-
-
-/**
- * Column iterator interface for selection query on a column.
- *
- */
-public interface SelectionColumnIterator {
-
-  Serializable getValue(int docId);
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionMultiValueColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionMultiValueColumnIterator.java
deleted file mode 100644
index f4fd22f..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionMultiValueColumnIterator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockMultiValIterator;
-import org.apache.pinot.core.segment.index.readers.Dictionary;
-
-
-/**
- * Iterator on multi-value column selection query.
- *
- */
-public abstract class SelectionMultiValueColumnIterator implements SelectionColumnIterator {
-  protected BlockMultiValIterator bvIter;
-  protected Dictionary dict;
-  protected int[] dictIds;
-
-  public SelectionMultiValueColumnIterator(Block block) {
-    bvIter = (BlockMultiValIterator) block.getBlockValueSet().iterator();
-    dict = block.getMetadata().getDictionary();
-    dictIds = new int[block.getMetadata().getMaxNumberOfMultiValues()];
-  }
-
-  @Override
-  public abstract Serializable getValue(int docId);
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionSingleValueColumnWithDictIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionSingleValueColumnWithDictIterator.java
deleted file mode 100644
index 3139cfa..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/SelectionSingleValueColumnWithDictIterator.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.common.data.FieldSpec;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-import org.apache.pinot.core.segment.index.readers.Dictionary;
-import org.apache.pinot.common.utils.BytesUtils;
-
-
-/**
- * Iterator on single-value column with dictionary for selection query.
- *
- */
-public class SelectionSingleValueColumnWithDictIterator implements SelectionColumnIterator {
-  protected BlockSingleValIterator _blockSingleValIterator;
-  protected Dictionary _dictionary;
-  private final FieldSpec.DataType _dataType;
-
-  public SelectionSingleValueColumnWithDictIterator(Block block) {
-    _blockSingleValIterator = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-    _dataType = block.getMetadata().getDataType();
-    _dictionary = block.getMetadata().getDictionary();
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    _blockSingleValIterator.skipTo(docId);
-    return (Serializable) _dictionary.get(_blockSingleValIterator.nextIntVal());
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/StringArraySelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/StringArraySelectionColumnIterator.java
deleted file mode 100644
index 00ee405..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/StringArraySelectionColumnIterator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import java.io.Serializable;
-import org.apache.pinot.core.common.Block;
-
-
-/**
- * Iterator on string array column selection query.
- *
- */
-public class StringArraySelectionColumnIterator extends SelectionMultiValueColumnIterator {
-
-  public StringArraySelectionColumnIterator(Block block) {
-    super(block);
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    int dictSize = bvIter.nextIntVal(dictIds);
-    String[] rawIntRow = new String[dictSize];
-    for (int dictIdx = 0; dictIdx < dictSize; ++dictIdx) {
-      rawIntRow[dictIdx] = (String) (dict.get(dictIds[dictIdx]));
-    }
-    return rawIntRow;
-  }
-}
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/StringSelectionColumnIterator.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/StringSelectionColumnIterator.java
deleted file mode 100644
index 3cde6a4..0000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/iterator/StringSelectionColumnIterator.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.pinot.core.query.selection.iterator;
-
-import com.clearspring.analytics.util.Preconditions;
-import java.io.Serializable;
-import org.apache.pinot.common.data.FieldSpec;
-import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockSingleValIterator;
-import org.apache.pinot.common.utils.BytesUtils;
-
-
-/**
- * Iterator on double no dictionary column selection query.
- *
- */
-public class StringSelectionColumnIterator implements SelectionColumnIterator {
-  private final FieldSpec.DataType _dataType;
-  protected BlockSingleValIterator bvIter;
-
-  public StringSelectionColumnIterator(Block block) {
-    _dataType = block.getMetadata().getDataType();
-    Preconditions
-        .checkArgument(_dataType.equals(FieldSpec.DataType.STRING),
-            "Illegal data type for StringSelectionColumnIterator: " + _dataType);
-    bvIter = (BlockSingleValIterator) block.getBlockValueSet().iterator();
-  }
-
-  @Override
-  public Serializable getValue(int docId) {
-    bvIter.skipTo(docId);
-    return bvIter.nextStringVal();
-  }
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org