private static HiveDruidSplit[] distributeScanQuery(String address, ScanQuery query, Path dummyPath) throws IOException { final boolean isFetch = query.getLimit() < Long.MAX_VALUE; if (isFetch) { return new HiveDruidSplit[] {new HiveDruidSplit(DruidStorageHandlerUtils.JSON_MAPPER.writeValueAsString(query),
public ScanQueryLimitRowIterator( QueryRunner<ScanResultValue> baseRunner, QueryPlus<ScanResultValue> queryPlus, Map<String, Object> responseContext ) { ScanQuery query = (ScanQuery) queryPlus.getQuery(); resultFormat = query.getResultFormat(); limit = query.getLimit(); Sequence<ScanResultValue> baseSequence = baseRunner.run(queryPlus, responseContext); yielder = baseSequence.toYielder( null, new YieldingAccumulator<ScanResultValue, ScanResultValue>() { @Override public ScanResultValue accumulate(ScanResultValue accumulated, ScanResultValue in) { yield(); return in; } } ); }
@Override public Sequence<ScanResultValue> run( final QueryPlus<ScanResultValue> queryPlus, final Map<String, Object> responseContext ) { // Ensure "legacy" is a non-null value, such that all other nodes this query is forwarded to will treat it // the same way, even if they have different default legacy values. final ScanQuery scanQuery = ((ScanQuery) queryPlus.getQuery()).withNonNullLegacy(scanQueryConfig); final QueryPlus<ScanResultValue> queryPlusWithNonNullLegacy = queryPlus.withQuery(scanQuery); if (scanQuery.getLimit() == Long.MAX_VALUE) { return runner.run(queryPlusWithNonNullLegacy, responseContext); } return new BaseSequence<>( new BaseSequence.IteratorMaker<ScanResultValue, ScanQueryLimitRowIterator>() { @Override public ScanQueryLimitRowIterator make() { return new ScanQueryLimitRowIterator(runner, queryPlusWithNonNullLegacy, responseContext); } @Override public void cleanup(ScanQueryLimitRowIterator iterFromMake) { CloseQuietly.close(iterFromMake); } } ); } };
public static ScanQueryBuilder copy(ScanQuery query) { return new ScanQueryBuilder() .dataSource(query.getDataSource()) .intervals(query.getQuerySegmentSpec()) .virtualColumns(query.getVirtualColumns()) .resultFormat(query.getResultFormat()) .batchSize(query.getBatchSize()) .limit(query.getLimit()) .filters(query.getFilter()) .columns(query.getColumns()) .legacy(query.isLegacy()) .context(query.getContext()); }