Search in sources :

Example 11 with Filter

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));
}
Also used : Filter(org.apache.druid.query.filter.Filter) Test(org.junit.Test)

Example 12 with 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);
}
Also used : Filter(org.apache.druid.query.filter.Filter) Test(org.junit.Test)

Example 13 with Filter

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;
}
Also used : DimFilter(org.apache.druid.query.filter.DimFilter) Filter(org.apache.druid.query.filter.Filter)

Example 14 with Filter

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);
}
Also used : ValueMatcher(org.apache.druid.query.filter.ValueMatcher) BaseVectorValueMatcher(org.apache.druid.query.filter.vector.BaseVectorValueMatcher) VectorValueMatcher(org.apache.druid.query.filter.vector.VectorValueMatcher) BooleanFilter(org.apache.druid.query.filter.BooleanFilter) Filter(org.apache.druid.query.filter.Filter)

Example 15 with Filter

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;
    }
}
Also used : Filter(org.apache.druid.query.filter.Filter) SegmentMissingException(org.apache.druid.segment.SegmentMissingException) ColumnInspector(org.apache.druid.segment.ColumnInspector) Granularity(org.apache.druid.java.util.common.granularity.Granularity) Interval(org.joda.time.Interval) Result(org.apache.druid.query.Result)

Aggregations

Filter (org.apache.druid.query.filter.Filter)127 Test (org.junit.Test)88 SelectorFilter (org.apache.druid.segment.filter.SelectorFilter)74 ExpressionDimFilter (org.apache.druid.query.filter.ExpressionDimFilter)64 JoinFilterPreAnalysis (org.apache.druid.segment.join.filter.JoinFilterPreAnalysis)63 OrFilter (org.apache.druid.segment.filter.OrFilter)52 AndFilter (org.apache.druid.segment.filter.AndFilter)47 BoundDimFilter (org.apache.druid.query.filter.BoundDimFilter)43 InDimFilter (org.apache.druid.query.filter.InDimFilter)43 BoundFilter (org.apache.druid.segment.filter.BoundFilter)42 FalseFilter (org.apache.druid.segment.filter.FalseFilter)41 SelectorDimFilter (org.apache.druid.query.filter.SelectorDimFilter)39 OrDimFilter (org.apache.druid.query.filter.OrDimFilter)36 JoinFilterSplit (org.apache.druid.segment.join.filter.JoinFilterSplit)35 ArrayList (java.util.ArrayList)19 DimFilter (org.apache.druid.query.filter.DimFilter)15 IndexedTableJoinable (org.apache.druid.segment.join.table.IndexedTableJoinable)13 AndDimFilter (org.apache.druid.query.filter.AndDimFilter)10 BooleanFilter (org.apache.druid.query.filter.BooleanFilter)10 Cursor (org.apache.druid.segment.Cursor)10