private Sequence<Cursor> makeCursorSequence(final Filter filter) { return adapter.makeCursors( filter, Intervals.ETERNITY, VIRTUAL_COLUMNS, Granularities.ALL, false, null ); }
VirtualColumn::getOutputName ), adapter.getAvailableDimensions(), adapter.getAvailableMetrics() return Sequences.concat( adapter .makeCursors( filter, intervals.get(0),
final int length = storageAdapter.getNumRows(); final Set<String> columnNames = new HashSet<>(); Iterables.addAll(columnNames, storageAdapter.getAvailableDimensions()); Iterables.addAll(columnNames, storageAdapter.getAvailableMetrics()); final ColumnCapabilities capabilities = columnHolder != null ? columnHolder.getCapabilities() : storageAdapter.getColumnCapabilities(columnName); analysis = analyzeComplexColumn(capabilities, columnHolder, storageAdapter.getColumnTypeName(columnName)); break; default: ColumnCapabilities timeCapabilities = storageAdapter.getColumnCapabilities(ColumnHolder.TIME_COLUMN_NAME); if (timeCapabilities == null) { timeCapabilities = new ColumnCapabilitiesImpl().setType(ValueType.LONG).setHasMultipleValues(false);
/** * 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); }
cardinality = storageAdapter.getDimensionCardinality(columnName); final DateTime start = storageAdapter.getMinTime(); final DateTime end = storageAdapter.getMaxTime(); storageAdapter.makeCursors( null, new Interval(start, end), min = storageAdapter.getMinValue(columnName); max = storageAdapter.getMaxValue(columnName);
final Sequence<Cursor> cursors = storageAdapter.makeCursors( Filters.toFilter(query.getDimFilter()), intervals.get(0), .stream() .allMatch(dimension -> { final ColumnCapabilities columnCapabilities = storageAdapter.getColumnCapabilities(dimension.getDimension()); return columnCapabilities != null && !columnCapabilities.hasMultipleValues(); });
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(); metrics = adapter.getAvailableMetrics(); } else { metrics = query.getMetrics();
@VisibleForTesting public Pair<Integer, Integer> computeStartEnd(int cardinality) { int startIndex = ignoreFirstN; if (previousStop != null) { if (idLookup == null) { throw new UnsupportedOperationException("Only DimensionSelectors which support idLookup() are supported yet"); } int lookupId = idLookup.lookupId(previousStop) + 1; if (lookupId < 0) { lookupId *= -1; } if (lookupId > ignoreFirstN + keepOnlyN) { startIndex = ignoreFirstN + keepOnlyN; } else { startIndex = Math.max(lookupId, startIndex); } } int endIndex = Math.min(ignoreFirstN + keepOnlyN, cardinality); if (ignoreAfterThreshold && query.getDimensionsFilter() == null && query.getIntervals().stream().anyMatch(interval -> interval.contains(storageAdapter.getInterval()))) { endIndex = Math.min(endIndex, startIndex + query.getThreshold()); } return Pair.of(startIndex, endIndex); } }
cardinality = 1; } else if (dims.length == 1) { columnCapabilities = storageAdapter.getColumnCapabilities(dims[0].getName()); cardinality = storageAdapter.getDimensionCardinality(dims[0].getName()); } else { columnCapabilities = null;
@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 )); }
public ColumnCapabilities getColumnCapabilitiesWithFallback(StorageAdapter adapter, String columnName) { final ColumnCapabilities virtualColumnCapabilities = getColumnCapabilities(columnName); if (virtualColumnCapabilities != null) { return virtualColumnCapabilities; } else { return adapter.getColumnCapabilities(columnName); } }
@Override public void skipTo(String previousStop) { Capabilities capabilities = storageAdapter.getCapabilities(); if (capabilities.dimensionValuesSorted()) { this.previousStop = previousStop; } }
cardinality = storageAdapter.getDimensionCardinality(columnName); final DateTime start = storageAdapter.getMinTime(); final DateTime end = storageAdapter.getMaxTime(); storageAdapter.makeCursors( null, new Interval(start, end), min = storageAdapter.getMinValue(columnName); max = storageAdapter.getMaxValue(columnName);
final Sequence<Cursor> cursors = storageAdapter.makeCursors( Filters.toFilter(query.getDimFilter()), intervals.get(0), .stream() .allMatch(dimension -> { final ColumnCapabilities columnCapabilities = storageAdapter.getColumnCapabilities(dimension.getDimension()); return columnCapabilities != null && !columnCapabilities.hasMultipleValues(); });
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) ); }
dims = DefaultDimensionSpec.toSpec(adapter.getAvailableDimensions()); } else { dims = query.getDimensions(); metrics = adapter.getAvailableMetrics(); } else { metrics = query.getMetrics();
@SuppressWarnings("ArgumentParameterSwap") @Override public Result<DateTime> apply(Cursor cursor) { if (cursor.isDone()) { return null; } final BaseLongColumnValueSelector timestampColumnSelector = cursor.getColumnSelectorFactory().makeColumnValueSelector(ColumnHolder.TIME_COLUMN_NAME); final DateTime timestamp = DateTimes.utc(timestampColumnSelector.getLong()); return new Result<>(adapter.getInterval().getStart(), timestamp); } };
cardinality = 1; } else if (dims.length == 1) { columnCapabilities = storageAdapter.getColumnCapabilities(dims[0].getName()); cardinality = storageAdapter.getDimensionCardinality(dims[0].getName()); } else { columnCapabilities = null;
final QueryableIndex index = segment.asQueryableIndex(); final StorageAdapter adapter = segment.asStorageAdapter(); final List<DimensionSpec> searchDims = getDimsToSearch(adapter.getAvailableDimensions(), query.getDimensions());