private static Map<String, DataSource> getDataSourceMap() {
   final Map<String, DataSource> dataSourceMap = new HashMap<String, DataSource>();
   dataSourceMap.put("column11", _indexSegment.getDataSource("column11"));
   dataSourceMap.put("column12", _indexSegment.getDataSource("column12"));
   dataSourceMap.put("met_impressionCount", _indexSegment.getDataSource("met_impressionCount"));
   return dataSourceMap;
 }
  public static DataSchema extractDataSchema(
      List<SelectionSort> sortSequence, List<String> selectionColumns, IndexSegment indexSegment) {
    final List<String> columns = new ArrayList<String>();

    if (sortSequence != null && !sortSequence.isEmpty()) {
      for (final SelectionSort selectionSort : sortSequence) {
        columns.add(selectionSort.getColumn());
      }
    }
    String[] selectionColumnArray = selectionColumns.toArray(new String[selectionColumns.size()]);
    Arrays.sort(selectionColumnArray);
    for (int i = 0; i < selectionColumnArray.length; ++i) {
      String selectionColumn = selectionColumnArray[i];
      if (!columns.contains(selectionColumn)) {
        columns.add(selectionColumn);
      }
    }
    final DataType[] dataTypes = new DataType[columns.size()];
    for (int i = 0; i < dataTypes.length; ++i) {
      DataSource ds = indexSegment.getDataSource(columns.get(i));
      DataSourceMetadata m = ds.getDataSourceMetadata();
      dataTypes[i] = m.getDataType();
      if (!m.isSingleValue()) {
        dataTypes[i] = DataType.valueOf(dataTypes[i] + "_ARRAY");
      }
    }
    return new DataSchema(columns.toArray(new String[0]), dataTypes);
  }