From c4ba0ec470d768056763fa57bcd35949640a9c6d Mon Sep 17 00:00:00 2001 From: Steven Crawford Date: Fri, 27 Apr 2018 14:05:06 -0400 Subject: [PATCH 1/4] Add new 'true' filter which always returns true. --- .../java/io/druid/query/filter/DimFilter.java | 3 +- .../io/druid/query/filter/DimFilterUtils.java | 1 + .../io/druid/query/filter/TrueDimFilter.java | 54 ++++++++++++++ .../io/druid/segment/filter/TrueFilter.java | 74 +++++++++++++++++++ 4 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 processing/src/main/java/io/druid/query/filter/TrueDimFilter.java create mode 100644 processing/src/main/java/io/druid/segment/filter/TrueFilter.java diff --git a/processing/src/main/java/io/druid/query/filter/DimFilter.java b/processing/src/main/java/io/druid/query/filter/DimFilter.java index e925a2cf731c..295d329bf043 100644 --- a/processing/src/main/java/io/druid/query/filter/DimFilter.java +++ b/processing/src/main/java/io/druid/query/filter/DimFilter.java @@ -42,7 +42,8 @@ @JsonSubTypes.Type(name = "bound", value = BoundDimFilter.class), @JsonSubTypes.Type(name = "interval", value = IntervalDimFilter.class), @JsonSubTypes.Type(name = "like", value = LikeDimFilter.class), - @JsonSubTypes.Type(name = "expression", value = ExpressionDimFilter.class) + @JsonSubTypes.Type(name = "expression", value = ExpressionDimFilter.class), + @JsonSubTypes.Type(name = "true", value = TrueDimFilter.class) }) public interface DimFilter extends Cacheable { diff --git a/processing/src/main/java/io/druid/query/filter/DimFilterUtils.java b/processing/src/main/java/io/druid/query/filter/DimFilterUtils.java index 25c991662ed2..3b99b8c94123 100644 --- a/processing/src/main/java/io/druid/query/filter/DimFilterUtils.java +++ b/processing/src/main/java/io/druid/query/filter/DimFilterUtils.java @@ -37,6 +37,7 @@ public class DimFilterUtils { static final byte NOOP_CACHE_ID = -0x4; + static final byte TRUE_CACHE_ID = -0x5; static final byte SELECTOR_CACHE_ID = 0x0; static final byte AND_CACHE_ID = 0x1; static final byte OR_CACHE_ID = 0x2; diff --git a/processing/src/main/java/io/druid/query/filter/TrueDimFilter.java b/processing/src/main/java/io/druid/query/filter/TrueDimFilter.java new file mode 100644 index 000000000000..5294bfda573b --- /dev/null +++ b/processing/src/main/java/io/druid/query/filter/TrueDimFilter.java @@ -0,0 +1,54 @@ +/* + * Licensed to Metamarkets Group Inc. (Metamarkets) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. Metamarkets licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package io.druid.query.filter; + +import com.google.common.collect.RangeSet; +import io.druid.segment.filter.TrueFilter; + +import java.nio.ByteBuffer; + +/** + */ +public class TrueDimFilter implements DimFilter +{ + @Override + public byte[] getCacheKey() + { + return ByteBuffer.allocate(1).put(DimFilterUtils.TRUE_CACHE_ID).array(); + } + + @Override + public DimFilter optimize() + { + return this; + } + + @Override + public Filter toFilter() + { + return new TrueFilter(); + } + + @Override + public RangeSet getDimensionRangeSet(String dimension) + { + return null; + } +} diff --git a/processing/src/main/java/io/druid/segment/filter/TrueFilter.java b/processing/src/main/java/io/druid/segment/filter/TrueFilter.java new file mode 100644 index 000000000000..10ae4444c670 --- /dev/null +++ b/processing/src/main/java/io/druid/segment/filter/TrueFilter.java @@ -0,0 +1,74 @@ +/* + * Licensed to Metamarkets Group Inc. (Metamarkets) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. Metamarkets licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package io.druid.segment.filter; + +import io.druid.query.BitmapResultFactory; +import io.druid.query.filter.BitmapIndexSelector; +import io.druid.query.filter.Filter; +import io.druid.query.filter.ValueMatcher; +import io.druid.segment.ColumnSelector; +import io.druid.segment.ColumnSelectorFactory; + +/** + */ +public class TrueFilter implements Filter +{ + public TrueFilter() + { + } + + @Override + public T getBitmapResult(BitmapIndexSelector selector, BitmapResultFactory bitmapResultFactory) + { + return null; + } + + @Override + public ValueMatcher makeMatcher(ColumnSelectorFactory factory) + { + return TrueValueMatcher.instance(); + } + + @Override + public boolean supportsBitmapIndex(BitmapIndexSelector selector) + { + return false; + } + + @Override + public boolean supportsSelectivityEstimation( + ColumnSelector columnSelector, BitmapIndexSelector indexSelector + ) + { + return true; + } + + @Override + public double estimateSelectivity(BitmapIndexSelector indexSelector) + { + return 1; + } + + @Override + public String toString() + { + return "true"; + } +} From 69833f35da8d095edcf7917c66014830065f0ac8 Mon Sep 17 00:00:00 2001 From: Steven Crawford Date: Thu, 21 Jun 2018 15:39:39 -0400 Subject: [PATCH 2/4] Add support for bitmap index. --- .../src/main/java/io/druid/query/filter/DimFilterUtils.java | 2 +- .../src/main/java/io/druid/segment/filter/TrueFilter.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/processing/src/main/java/io/druid/query/filter/DimFilterUtils.java b/processing/src/main/java/io/druid/query/filter/DimFilterUtils.java index 3b99b8c94123..337a5819cdc7 100644 --- a/processing/src/main/java/io/druid/query/filter/DimFilterUtils.java +++ b/processing/src/main/java/io/druid/query/filter/DimFilterUtils.java @@ -37,7 +37,6 @@ public class DimFilterUtils { static final byte NOOP_CACHE_ID = -0x4; - static final byte TRUE_CACHE_ID = -0x5; static final byte SELECTOR_CACHE_ID = 0x0; static final byte AND_CACHE_ID = 0x1; static final byte OR_CACHE_ID = 0x2; @@ -53,6 +52,7 @@ public class DimFilterUtils static final byte LIKE_CACHE_ID = 0xC; static final byte COLUMN_COMPARISON_CACHE_ID = 0xD; static final byte EXPRESSION_CACHE_ID = 0xE; + static final byte TRUE_CACHE_ID = 0xF; public static final byte STRING_SEPARATOR = (byte) 0xFF; static byte[] computeCacheKey(byte cacheIdKey, List filters) diff --git a/processing/src/main/java/io/druid/segment/filter/TrueFilter.java b/processing/src/main/java/io/druid/segment/filter/TrueFilter.java index 10ae4444c670..22e347dcfde2 100644 --- a/processing/src/main/java/io/druid/segment/filter/TrueFilter.java +++ b/processing/src/main/java/io/druid/segment/filter/TrueFilter.java @@ -37,7 +37,7 @@ public TrueFilter() @Override public T getBitmapResult(BitmapIndexSelector selector, BitmapResultFactory bitmapResultFactory) { - return null; + return bitmapResultFactory.wrapAllTrue(Filters.allTrue(selector)); } @Override @@ -49,7 +49,7 @@ public ValueMatcher makeMatcher(ColumnSelectorFactory factory) @Override public boolean supportsBitmapIndex(BitmapIndexSelector selector) { - return false; + return true; } @Override From 6d945119a2464ac76462e8c7b585473ff184961d Mon Sep 17 00:00:00 2001 From: Steven Crawford Date: Fri, 22 Jun 2018 10:20:18 -0400 Subject: [PATCH 3/4] Adds documentation. --- docs/content/querying/filters.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/content/querying/filters.md b/docs/content/querying/filters.md index d158b893d36f..cd41e3e7ffff 100644 --- a/docs/content/querying/filters.md +++ b/docs/content/querying/filters.md @@ -494,4 +494,11 @@ The noop filter is a filter which applies no conditions to your query. Useful i ```json { "type" : "noop" } +``` + +### True Filter +The true filter is a filter which matches all values. It can be used to temporarily disable other filters without removing the filter. + +```json +{ "type" : "true" } ``` \ No newline at end of file From fc17516d5b6021e3b78a8871cd4cfb6259cd3e7d Mon Sep 17 00:00:00 2001 From: Steven Crawford Date: Mon, 25 Jun 2018 07:38:23 -0400 Subject: [PATCH 4/4] Removes No-op Filter --- docs/content/querying/filters.md | 8 -------- .../src/main/java/io/druid/query/filter/DimFilter.java | 1 - 2 files changed, 9 deletions(-) diff --git a/docs/content/querying/filters.md b/docs/content/querying/filters.md index cd41e3e7ffff..daa62f370ceb 100644 --- a/docs/content/querying/filters.md +++ b/docs/content/querying/filters.md @@ -488,14 +488,6 @@ Filtering on a set of ISO 8601 intervals: } ``` - -### Noop Filter -The noop filter is a filter which applies no conditions to your query. Useful if you need to disable other filters when queries are generated programatically. - -```json -{ "type" : "noop" } -``` - ### True Filter The true filter is a filter which matches all values. It can be used to temporarily disable other filters without removing the filter. diff --git a/processing/src/main/java/io/druid/query/filter/DimFilter.java b/processing/src/main/java/io/druid/query/filter/DimFilter.java index 3c3791f0c6e4..295d329bf043 100644 --- a/processing/src/main/java/io/druid/query/filter/DimFilter.java +++ b/processing/src/main/java/io/druid/query/filter/DimFilter.java @@ -43,7 +43,6 @@ @JsonSubTypes.Type(name = "interval", value = IntervalDimFilter.class), @JsonSubTypes.Type(name = "like", value = LikeDimFilter.class), @JsonSubTypes.Type(name = "expression", value = ExpressionDimFilter.class), - @JsonSubTypes.Type(name = "noop", value = NoopDimFilter.class), @JsonSubTypes.Type(name = "true", value = TrueDimFilter.class) }) public interface DimFilter extends Cacheable