|
41 | 41 | import io.druid.query.aggregation.AggregatorFactory;
|
42 | 42 | import io.druid.query.aggregation.DoubleMaxAggregatorFactory;
|
43 | 43 | import io.druid.query.aggregation.DoubleMinAggregatorFactory;
|
| 44 | +import io.druid.query.aggregation.FilteredAggregatorFactory; |
44 | 45 | import io.druid.query.aggregation.PostAggregator;
|
45 | 46 | import io.druid.query.aggregation.cardinality.CardinalityAggregatorFactory;
|
46 | 47 | import io.druid.query.aggregation.hyperloglog.HyperUniquesAggregatorFactory;
|
|
54 | 55 | import io.druid.query.extraction.TimeFormatExtractionFn;
|
55 | 56 | import io.druid.query.filter.AndDimFilter;
|
56 | 57 | import io.druid.query.filter.DimFilter;
|
| 58 | +import io.druid.query.filter.ExtractionDimFilter; |
57 | 59 | import io.druid.query.filter.SelectorDimFilter;
|
58 | 60 | import io.druid.query.spec.MultipleIntervalSegmentSpec;
|
59 | 61 | import io.druid.query.timeseries.TimeseriesQuery;
|
@@ -158,9 +160,7 @@ private Sequence<Result<TopNResultValue>> runWithMerge(
|
158 | 160 | QueryRunnerTestHelper.NoopIntervalChunkingQueryRunnerDecorator()
|
159 | 161 | );
|
160 | 162 | final QueryRunner<Result<TopNResultValue>> mergeRunner = chest.mergeResults(runner);
|
161 |
| - return mergeRunner.run( |
162 |
| - query, context |
163 |
| - ); |
| 163 | + return mergeRunner.run(query, context); |
164 | 164 | }
|
165 | 165 |
|
166 | 166 | @Test
|
@@ -1611,7 +1611,6 @@ public void testTopNDimExtraction()
|
1611 | 1611 | }
|
1612 | 1612 |
|
1613 | 1613 |
|
1614 |
| - |
1615 | 1614 | @Test
|
1616 | 1615 | public void testTopNDimExtractionFastTopNOptimalWithReplaceMissing()
|
1617 | 1616 | {
|
@@ -3119,8 +3118,10 @@ public void testTopNOverPartialNullDimensionWithFilterOnNOTNullValue()
|
3119 | 3118 | );
|
3120 | 3119 | assertExpectedResults(expectedResults, query);
|
3121 | 3120 | }
|
| 3121 | + |
3122 | 3122 | @Test
|
3123 |
| - public void testAlphaNumericTopNWithNullPreviousStop(){ |
| 3123 | + public void testAlphaNumericTopNWithNullPreviousStop() |
| 3124 | + { |
3124 | 3125 | TopNQuery query = new TopNQueryBuilder()
|
3125 | 3126 | .dataSource(QueryRunnerTestHelper.dataSource)
|
3126 | 3127 | .granularity(QueryGranularity.ALL)
|
@@ -3149,4 +3150,106 @@ public void testAlphaNumericTopNWithNullPreviousStop(){
|
3149 | 3150 | );
|
3150 | 3151 | TestHelper.assertExpectedResults(expectedResults, runner.run(query, new HashMap<String, Object>()));
|
3151 | 3152 | }
|
| 3153 | + |
| 3154 | + @Test |
| 3155 | + public void testTopNWithExtractionFilter() |
| 3156 | + { |
| 3157 | + Map<String, String> extractionMap = new HashMap<>(); |
| 3158 | + extractionMap.put("spot", "spot0"); |
| 3159 | + MapLookupExtractor mapLookupExtractor = new MapLookupExtractor(extractionMap); |
| 3160 | + LookupExtractionFn lookupExtractionFn = new LookupExtractionFn(mapLookupExtractor, false, null, true); |
| 3161 | + |
| 3162 | + TopNQuery query = new TopNQueryBuilder().dataSource(QueryRunnerTestHelper.dataSource) |
| 3163 | + .granularity(QueryRunnerTestHelper.allGran) |
| 3164 | + .dimension(QueryRunnerTestHelper.marketDimension) |
| 3165 | + .metric("rows") |
| 3166 | + .threshold(3) |
| 3167 | + .intervals(QueryRunnerTestHelper.firstToThird) |
| 3168 | + .aggregators(QueryRunnerTestHelper.commonAggregators) |
| 3169 | + .postAggregators(Arrays.<PostAggregator>asList(QueryRunnerTestHelper.addRowsIndexConstant)) |
| 3170 | + .filters( |
| 3171 | + new ExtractionDimFilter( |
| 3172 | + QueryRunnerTestHelper.marketDimension, |
| 3173 | + "spot0", |
| 3174 | + lookupExtractionFn, |
| 3175 | + null |
| 3176 | + ) |
| 3177 | + ) |
| 3178 | + .build(); |
| 3179 | + |
| 3180 | + List<Result<TopNResultValue>> expectedResults = Arrays.asList( |
| 3181 | + new Result<>( |
| 3182 | + new DateTime("2011-04-01T00:00:00.000Z"), |
| 3183 | + new TopNResultValue( |
| 3184 | + Arrays.<Map<String, Object>>asList( |
| 3185 | + ImmutableMap.<String, Object>of( |
| 3186 | + QueryRunnerTestHelper.marketDimension, "spot", |
| 3187 | + "rows", 18L, |
| 3188 | + "index", 2231.8768157958984D, |
| 3189 | + "addRowsIndexConstant", 2250.8768157958984D, |
| 3190 | + "uniques", QueryRunnerTestHelper.UNIQUES_9 |
| 3191 | + ) |
| 3192 | + ) |
| 3193 | + ) |
| 3194 | + ) |
| 3195 | + ); |
| 3196 | + |
| 3197 | + assertExpectedResults(expectedResults, query); |
| 3198 | + } |
| 3199 | + |
| 3200 | + @Test |
| 3201 | + public void testTopNWithExtractionFilterAndFilteredAggregatorCaseNoExistingValue() |
| 3202 | + { |
| 3203 | + Map<String, String> extractionMap = new HashMap<>(); |
| 3204 | + extractionMap.put("", "NULL"); |
| 3205 | + |
| 3206 | + MapLookupExtractor mapLookupExtractor = new MapLookupExtractor(extractionMap); |
| 3207 | + LookupExtractionFn lookupExtractionFn = new LookupExtractionFn(mapLookupExtractor, false, null, true); |
| 3208 | + DimFilter extractionFilter = new ExtractionDimFilter("null_column", "NULL", lookupExtractionFn, null); |
| 3209 | + TopNQueryBuilder topNQueryBuilder = new TopNQueryBuilder() |
| 3210 | + .dataSource(QueryRunnerTestHelper.dataSource) |
| 3211 | + .granularity(QueryRunnerTestHelper.allGran) |
| 3212 | + .dimension("null_column") |
| 3213 | + .metric(QueryRunnerTestHelper.indexMetric) |
| 3214 | + .threshold(4) |
| 3215 | + .intervals(QueryRunnerTestHelper.fullOnInterval) |
| 3216 | + .aggregators( |
| 3217 | + Lists.newArrayList( |
| 3218 | + Iterables.concat( |
| 3219 | + QueryRunnerTestHelper.commonAggregators, Lists.newArrayList( |
| 3220 | + new FilteredAggregatorFactory( |
| 3221 | + new DoubleMaxAggregatorFactory("maxIndex", "index"), |
| 3222 | + extractionFilter |
| 3223 | + ), |
| 3224 | + new DoubleMinAggregatorFactory("minIndex", "index") |
| 3225 | + ) |
| 3226 | + ) |
| 3227 | + ) |
| 3228 | + ) |
| 3229 | + .postAggregators(Arrays.<PostAggregator>asList(QueryRunnerTestHelper.addRowsIndexConstant)); |
| 3230 | + TopNQuery topNQueryWithNULLValueExtraction = topNQueryBuilder |
| 3231 | + .filters(extractionFilter) |
| 3232 | + .build(); |
| 3233 | + |
| 3234 | + Map<String, Object> map = Maps.newHashMap(); |
| 3235 | + map.put("null_column", null); |
| 3236 | + map.put("rows", 1209L); |
| 3237 | + map.put("index", 503332.5071372986D); |
| 3238 | + map.put("addRowsIndexConstant", 504542.5071372986D); |
| 3239 | + map.put("uniques", QueryRunnerTestHelper.UNIQUES_9); |
| 3240 | + map.put("maxIndex", 1870.06103515625D); |
| 3241 | + map.put("minIndex", 59.02102279663086D); |
| 3242 | + List<Result<TopNResultValue>> expectedResults = Arrays.asList( |
| 3243 | + new Result<>( |
| 3244 | + new DateTime("2011-01-12T00:00:00.000Z"), |
| 3245 | + new TopNResultValue( |
| 3246 | + Arrays.asList( |
| 3247 | + map |
| 3248 | + ) |
| 3249 | + ) |
| 3250 | + ) |
| 3251 | + ); |
| 3252 | + assertExpectedResults(expectedResults, topNQueryWithNULLValueExtraction); |
| 3253 | + } |
| 3254 | + |
3152 | 3255 | }
|
0 commit comments