use of org.apache.druid.query.filter.Filter in project druid by druid-io.
the class FilterCnfConversionTest method testPullNotPullableFilter.
@Test
public void testPullNotPullableFilter() {
final Filter filter = FilterTestUtils.or(FilterTestUtils.and(FilterTestUtils.selector("col1", "val1"), FilterTestUtils.selector("col2", "val2")), FilterTestUtils.and(FilterTestUtils.selector("col3", "val3"), FilterTestUtils.selector("col4", "val4")), FilterTestUtils.and(FilterTestUtils.selector("col5", "val5"), FilterTestUtils.selector("col6", "val6")), FilterTestUtils.selector("col7", "val7"));
assertFilter(filter, filter, CalciteCnfHelper.pull(filter));
}
use of org.apache.druid.query.filter.Filter in project druid by druid-io.
the class FilterCnfConversionTest method testFlatten.
@Test
public void testFlatten() {
final Filter filter = FilterTestUtils.and(FilterTestUtils.and(FilterTestUtils.and(FilterTestUtils.selector("col1", "1"), FilterTestUtils.selector("col2", "2"))), FilterTestUtils.selector("col3", "3"));
final Filter expected = FilterTestUtils.and(FilterTestUtils.selector("col1", "1"), FilterTestUtils.selector("col2", "2"), FilterTestUtils.selector("col3", "3"));
final Filter flattened = HiveCnfHelper.flatten(filter);
assertFilter(filter, expected, flattened);
}
use of org.apache.druid.query.filter.Filter in project druid by druid-io.
the class Filters method toNormalizedOrClauses.
/**
* @param filter the filter.
*
* @return The normalized or clauses for the provided filter.
*/
public static List<Filter> toNormalizedOrClauses(Filter filter) {
Filter normalizedFilter = Filters.toCnf(filter);
// List of candidates for pushdown
// CNF normalization will generate either
// - an AND filter with multiple subfilters
// - or a single non-AND subfilter which cannot be split further
List<Filter> normalizedOrClauses;
if (normalizedFilter instanceof AndFilter) {
normalizedOrClauses = new ArrayList<>(((AndFilter) normalizedFilter).getFilters());
} else {
normalizedOrClauses = Collections.singletonList(normalizedFilter);
}
return normalizedOrClauses;
}
use of org.apache.druid.query.filter.Filter in project druid by druid-io.
the class OrFilter method makeMatcher.
@Override
public ValueMatcher makeMatcher(ColumnSelectorFactory factory) {
final ValueMatcher[] matchers = new ValueMatcher[filters.size()];
int i = 0;
for (Filter filter : filters) {
matchers[i++] = filter.makeMatcher(factory);
}
return makeMatcher(matchers);
}
use of org.apache.druid.query.filter.Filter in project druid by druid-io.
the class TimeseriesQueryEngine method process.
/**
* Run a single-segment, single-interval timeseries query on a particular adapter. The query must have been
* scoped down to a single interval before calling this method.
*/
public Sequence<Result<TimeseriesResultValue>> process(final TimeseriesQuery query, final StorageAdapter adapter) {
if (adapter == null) {
throw new SegmentMissingException("Null storage adapter found. Probably trying to issue a query against a segment being memory unmapped.");
}
final Filter filter = Filters.convertToCNFFromQueryContext(query, Filters.toFilter(query.getFilter()));
final Interval interval = Iterables.getOnlyElement(query.getIntervals());
final Granularity gran = query.getGranularity();
final boolean descending = query.isDescending();
final ColumnInspector inspector = query.getVirtualColumns().wrapInspector(adapter);
final boolean doVectorize = QueryContexts.getVectorize(query).shouldVectorize(adapter.canVectorize(filter, query.getVirtualColumns(), descending) && VirtualColumns.shouldVectorize(query, query.getVirtualColumns(), adapter) && query.getAggregatorSpecs().stream().allMatch(aggregatorFactory -> aggregatorFactory.canVectorize(inspector)));
final Sequence<Result<TimeseriesResultValue>> result;
if (doVectorize) {
result = processVectorized(query, adapter, filter, interval, gran, descending);
} else {
result = processNonVectorized(query, adapter, filter, interval, gran, descending);
}
final int limit = query.getLimit();
if (limit < Integer.MAX_VALUE) {
return result.limit(limit);
} else {
return result;
}
}
Aggregations