@Override public List<SearchQueryExecutor> getExecutionPlan(SearchQuery query, Segment segment) { final StorageAdapter adapter = segment.asStorageAdapter(); final List<DimensionSpec> dimensionSpecs = getDimsToSearch(adapter.getAvailableDimensions(), query.getDimensions()); return ImmutableList.of(new CursorBasedExecutor( query, segment, filter, interval, dimensionSpecs )); }
/** * Split the given dimensions list into bitmap-supporting dimensions and non-bitmap supporting ones. * Note that the returned lists are free to modify. */ private static Pair<List<DimensionSpec>, List<DimensionSpec>> partitionDimensionList( StorageAdapter adapter, List<DimensionSpec> dimensions ) { final List<DimensionSpec> bitmapDims = new ArrayList<>(); final List<DimensionSpec> nonBitmapDims = new ArrayList<>(); final List<DimensionSpec> dimsToSearch = getDimsToSearch( adapter.getAvailableDimensions(), dimensions ); for (DimensionSpec spec : dimsToSearch) { ColumnCapabilities capabilities = adapter.getColumnCapabilities(spec.getDimension()); if (capabilities == null) { continue; } if (capabilities.hasBitmapIndexes()) { bitmapDims.add(spec); } else { nonBitmapDims.add(spec); } } return new Pair<>(bitmapDims, nonBitmapDims); }
final QueryableIndex index = segment.asQueryableIndex(); final StorageAdapter adapter = segment.asStorageAdapter(); final List<DimensionSpec> searchDims = getDimsToSearch(adapter.getAvailableDimensions(), query.getDimensions());
VirtualColumn::getOutputName ), adapter.getAvailableDimensions(), adapter.getAvailableMetrics()
Iterables.addAll(columnNames, storageAdapter.getAvailableDimensions()); Iterables.addAll(columnNames, storageAdapter.getAvailableMetrics());
private List<String> selectColumnValuesMatchingFilterUsingRowBasedColumnSelectorFactory( final DimFilter filter, final String selectColumn ) { // Generate rowType final Map<String, ValueType> rowSignature = new HashMap<>(); for (String columnName : Iterables.concat(adapter.getAvailableDimensions(), adapter.getAvailableMetrics())) { rowSignature.put(columnName, adapter.getColumnCapabilities(columnName).getType()); } // Perform test final SettableSupplier<InputRow> rowSupplier = new SettableSupplier<>(); final ValueMatcher matcher = makeFilter(filter).makeMatcher( VIRTUAL_COLUMNS.wrap(RowBasedColumnSelectorFactory.create(rowSupplier, rowSignature)) ); final List<String> values = new ArrayList<>(); for (InputRow row : rows) { rowSupplier.set(row); if (matcher.matches()) { values.add((String) row.getRaw(selectColumn)); } } return values; }
dims = DefaultDimensionSpec.toSpec(adapter.getAvailableDimensions()); } else { dims = query.getDimensions();
private static Pair<List<DimensionSpec>, List<DimensionSpec>> partitionDimensionList( StorageAdapter adapter, List<DimensionSpec> dimensions ) { final List<DimensionSpec> bitmapDims = Lists.newArrayList(); final List<DimensionSpec> nonBitmapDims = Lists.newArrayList(); final List<DimensionSpec> dimsToSearch = getDimsToSearch( adapter.getAvailableDimensions(), dimensions ); for (DimensionSpec spec : dimsToSearch) { ColumnCapabilities capabilities = adapter.getColumnCapabilities(spec.getDimension()); if (capabilities == null) { continue; } if (capabilities.hasBitmapIndexes()) { bitmapDims.add(spec); } else { nonBitmapDims.add(spec); } } return new Pair<List<DimensionSpec>, List<DimensionSpec>>( ImmutableList.copyOf(bitmapDims), ImmutableList.copyOf(nonBitmapDims) ); }
@Override public List<SearchQueryExecutor> getExecutionPlan(SearchQuery query, Segment segment) { final StorageAdapter adapter = segment.asStorageAdapter(); final List<DimensionSpec> dimensionSpecs = getDimsToSearch(adapter.getAvailableDimensions(), query.getDimensions()); return ImmutableList.of(new CursorBasedExecutor( query, segment, filter, interval, dimensionSpecs )); }
final QueryableIndex index = segment.asQueryableIndex(); final StorageAdapter adapter = segment.asStorageAdapter(); final List<DimensionSpec> searchDims = getDimsToSearch(adapter.getAvailableDimensions(), query.getDimensions());
VirtualColumn::getOutputName ), adapter.getAvailableDimensions(), adapter.getAvailableMetrics()
Iterables.addAll(columnNames, storageAdapter.getAvailableDimensions()); Iterables.addAll(columnNames, storageAdapter.getAvailableMetrics());
dims = DefaultDimensionSpec.toSpec(adapter.getAvailableDimensions()); } else { dims = query.getDimensions();