public static byte[][] getQueryPartitionKeys( final NumericIndexStrategy strategy, final MultiDimensionalNumericData queryData, final IndexMetaData... hints) { final QueryRanges queryRanges = strategy.getQueryRanges(queryData, hints); return queryRanges.getPartitionQueryRanges().stream().map( input -> input.getPartitionKey()).toArray(i -> new byte[i][]); }
public QueryRanges asQueryRanges() { return new QueryRanges( Collections2.transform( partitionKeys, new Function<SinglePartitionInsertionIds, SinglePartitionQueryRanges>() { @Override public SinglePartitionQueryRanges apply(final SinglePartitionInsertionIds input) { return new SinglePartitionQueryRanges( input.getPartitionKey(), Collections2.transform( input.getSortKeys(), new Function<byte[], ByteArrayRange>() { @Override public ByteArrayRange apply(final byte[] input) { return new ByteArrayRange(input, input, false); } })); } })); }
public QueryRanges(final byte[][] partitionKeys) { partitionRanges = fromPartitionKeys(partitionKeys); }
protected Scan getMultiScanner(final FilterList filterList) { // Single scan w/ multiple ranges final Scan multiScanner = scanProvider.get(); final List<ByteArrayRange> ranges = readerParams.getQueryRanges().getCompositeQueryRanges(); final MultiRowRangeFilter filter = operations.getMultiRowRangeFilter(ranges); if (filter != null) { filterList.addFilter(filter); final List<RowRange> rowRanges = filter.getRowRanges(); multiScanner.setStartRow(rowRanges.get(0).getStartRow()); final RowRange stopRowRange = rowRanges.get(rowRanges.size() - 1); byte[] stopRowExclusive; if (stopRowRange.isStopRowInclusive()) { // because the end is always exclusive, to make an inclusive // stop row into exlusive all we need to do is add a traling 0 stopRowExclusive = HBaseUtils.getInclusiveEndKey(stopRowRange.getStopRow()); } else { stopRowExclusive = stopRowRange.getStopRow(); } multiScanner.setStopRow(stopRowExclusive); } return multiScanner; }
targetResolutionPerDimensionForHierarchicalIndex, maxSplits, indexMetadata).getCompositeQueryRanges(); } else { ranges = targetResolutionPerDimensionForHierarchicalIndex, -1, indexMetadata).getCompositeQueryRanges();
public QueryRanges(final List<QueryRanges> queryRangesList) { // group by partition final Map<ByteArray, Collection<ByteArrayRange>> sortRangesPerPartition = new HashMap<>(); for (final QueryRanges qr : queryRangesList) { for (final SinglePartitionQueryRanges r : qr.getPartitionQueryRanges()) { final Collection<ByteArrayRange> ranges = sortRangesPerPartition.get(new ByteArray(r.getPartitionKey())); if (ranges == null) { sortRangesPerPartition.put( new ByteArray(r.getPartitionKey()), new ArrayList<>(r.getSortKeyRanges())); } else { ranges.addAll(r.getSortKeyRanges()); } } } partitionRanges = new ArrayList<>(sortRangesPerPartition.size()); for (final Entry<ByteArray, Collection<ByteArrayRange>> e : sortRangesPerPartition.entrySet()) { Collection<ByteArrayRange> mergedRanges; if (e.getValue() != null) { mergedRanges = ByteArrayRange.mergeIntersections(e.getValue(), MergeOperation.UNION); } else { mergedRanges = null; } partitionRanges.add(new SinglePartitionQueryRanges(e.getKey().getBytes(), mergedRanges)); } }
@Override public QueryRanges getQueryRanges( final MultiDimensionalNumericData indexedRange, final int maxRangeDecomposition, final IndexMetaData... hints) { // a null return here should be interpreted as negative to positive // infinite return new QueryRanges(null, null); }
targetResolutionPerDimensionForHierarchicalIndex, maxSplits, indexMetadata).getCompositeQueryRanges(); } else { ranges = targetResolutionPerDimensionForHierarchicalIndex, -1, indexMetadata).getCompositeQueryRanges();
public QueryRanges(final byte[][] partitionKeys, final QueryRanges queryRanges) { if ((queryRanges == null) || (queryRanges.partitionRanges == null) || queryRanges.partitionRanges.isEmpty()) { partitionRanges = fromPartitionKeys(partitionKeys); } else if ((partitionKeys == null) || (partitionKeys.length == 0)) { partitionRanges = queryRanges.partitionRanges; } else { partitionRanges = new ArrayList<>(partitionKeys.length * queryRanges.partitionRanges.size()); for (final byte[] partitionKey : partitionKeys) { for (final SinglePartitionQueryRanges sortKeyRange : queryRanges.partitionRanges) { byte[] newPartitionKey; if (partitionKey == null) { newPartitionKey = sortKeyRange.getPartitionKey(); } else if (sortKeyRange.getPartitionKey() == null) { newPartitionKey = partitionKey; } else { newPartitionKey = ByteArrayUtils.combineArrays(partitionKey, sortKeyRange.getPartitionKey()); } partitionRanges.add( new SinglePartitionQueryRanges(newPartitionKey, sortKeyRange.getSortKeyRanges())); } } } }
readerParams.getQueryRanges().getPartitionQueryRanges();
public ReaderParams<T> build() { if (queryRanges == null) { queryRanges = new QueryRanges(); } if (additionalAuthorizations == null) { additionalAuthorizations = new String[0]; } return new ReaderParams<>( index, adapterStore, internalAdapterStore, adapterIds, maxResolutionSubsamplingPerDimension, aggregation, fieldSubsets, isMixedVisibility, isAuthorizationsLimiting, isServersideAggregation, isClientsideRowMerging, queryRanges, filter, limit, maxRangeDecomposition, coordinateRanges, constraints, rowTransformer, additionalAuthorizations); } }
scanProvider, operations, readerParams.getQueryRanges().getCompositeQueryRanges(), partitionKeyLength);
final boolean async) { final Collection<SinglePartitionQueryRanges> ranges = readerParams.getQueryRanges().getPartitionQueryRanges();
@Override public QueryRanges getQueryRanges( final MultiDimensionalNumericData indexedRange, final int maxRangeDecomposition, final IndexMetaData... hints) { final List<BinnedNumericDataset> binnedQueries = BinnedNumericDataset.applyBins(indexedRange, baseDefinitions); return new QueryRanges( BinnedSFCUtils.getQueryRanges(binnedQueries, sfc, maxRangeDecomposition, tier)); }
getMultiRowRangeFilter(readerParams.getQueryRanges().getCompositeQueryRanges()); if (multiFilter != null) { requestBuilder.setRangeFilter(ByteString.copyFrom(multiFilter.toByteArray())); byte[] endRow = null; final List<ByteArrayRange> ranges = readerParams.getQueryRanges().getCompositeQueryRanges(); if ((ranges != null) && !ranges.isEmpty()) { final ByteArrayRange aggRange = ByteArrayUtils.getSingleRange(ranges);
final boolean async) { final Collection<SinglePartitionQueryRanges> ranges = readerParams.getQueryRanges().getPartitionQueryRanges();
public BaseRowPrefixQuery( final Index index, final byte[] partitionKey, final byte[] sortKeyPrefix, final ScanCallback<T, ?> scanCallback, final DifferingFieldVisibilityEntryCount differingVisibilityCounts, final FieldVisibilityCount visibilityCounts, final DataIndexRetrieval dataIndexRetrieval, final String[] authorizations) { super( index, authorizations, scanCallback, differingVisibilityCounts, visibilityCounts, dataIndexRetrieval); final ByteArrayRange sortKeyPrefixRange = new ByteArrayRange(sortKeyPrefix, sortKeyPrefix, false); final List<SinglePartitionQueryRanges> ranges = new ArrayList<>(); final Collection<ByteArrayRange> sortKeys = Collections.singleton(sortKeyPrefixRange); ranges.add(new SinglePartitionQueryRanges(partitionKey, sortKeys)); queryRanges = new QueryRanges(ranges); }
readerParams.getIndex().getIndexStrategy(), null, maxRangeDecomposition).getCompositeQueryRanges()); if (multiFilter != null) { requestBuilder.setRangeFilter(ByteString.copyFrom(multiFilter.toByteArray())); byte[] endRow = null; final List<ByteArrayRange> ranges = readerParams.getQueryRanges().getCompositeQueryRanges(); if ((ranges != null) && !ranges.isEmpty()) { final ByteArrayRange aggRange = ByteArrayUtils.getSingleRange(ranges);
List<MemoryStoreEntry> retVal = new ArrayList<>(); final Collection<SinglePartitionQueryRanges> partitionRanges = readerParams.getQueryRanges().getPartitionQueryRanges(); if ((partitionRanges == null) || partitionRanges.isEmpty()) { retVal.addAll(internalData);
public QueryRanges getQueryRanges() { return new QueryRanges( new ByteArrayRange( NumericFieldIndexStrategy.toIndexByte(lowerValue.doubleValue()), NumericFieldIndexStrategy.toIndexByte(upperValue.doubleValue()))); }