@Test public void testSearchIntervals() { SearchQuery searchQuery; Druids.SearchQueryBuilder builder = testBuilder() .dimensions(Collections.singletonList(qualityDimension)) .intervals("2011-01-12T00:00:00.000Z/2011-01-13T00:00:00.000Z"); Map<String, Set<String>> expectedResults = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); searchQuery = builder.query("otive").build(); expectedResults.put(qualityDimension, Sets.newHashSet("AutoMotive")); checkSearchQuery(searchQuery, expectedResults); }
@Test public void testSearchNoOverrappingIntervals() { SearchQuery searchQuery; Druids.SearchQueryBuilder builder = testBuilder() .dimensions(Collections.singletonList(qualityDimension)) .intervals("2011-01-10T00:00:00.000Z/2011-01-11T00:00:00.000Z"); Map<String, Set<String>> expectedResults = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); searchQuery = builder.query("business").build(); expectedResults.put(qualityDimension, new HashSet<>()); checkSearchQuery(searchQuery, expectedResults); }
@Test public void testSearchWithNumericSort() { SearchQuery searchQuery = Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query("a") .sortSpec(new SearchSortSpec(StringComparators.NUMERIC)) .build(); List<SearchHit> expectedHits = new ArrayList<>(); expectedHits.add(new SearchHit(QueryRunnerTestHelper.placementishDimension, "a", 93)); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "automotive", 93)); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "entertainment", 93)); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "health", 93)); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "mezzanine", 279)); expectedHits.add(new SearchHit(QueryRunnerTestHelper.marketDimension, "total_market", 186)); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "travel", 93)); expectedHits.add(new SearchHit(QueryRunnerTestHelper.partialNullDimension, "value", 186)); checkSearchQuery(searchQuery, expectedHits); }
@Test public void testSearchWithFilterEmptyResults() { List<SearchHit> expectedHits = new ArrayList<>(); DimFilter filter = new AndDimFilter( new SelectorDimFilter(QueryRunnerTestHelper.marketDimension, "total_market", null), new SelectorDimFilter(QueryRunnerTestHelper.qualityDimension, "automotive", null) ); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .filters(filter) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query("a") .build(), expectedHits ); }
@Test public void testSearchWithSingleFilter2() { List<SearchHit> expectedHits = new ArrayList<>(); expectedHits.add(new SearchHit(QueryRunnerTestHelper.marketDimension, "total_market", 186)); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .filters(QueryRunnerTestHelper.marketDimension, "total_market") .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .dimensions(QueryRunnerTestHelper.marketDimension) .query("a") .build(), expectedHits ); }
@Test public void testSearchWithDimensionProvider() { List<SearchHit> expectedHits = new ArrayList<>(); expectedHits.add(new SearchHit(QueryRunnerTestHelper.marketDimension, "total_market", 186)); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .dimensions("market") .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query("a") .build(), expectedHits ); }
@Test public void testDefaultSearchQueryMetricsMetricNamesAndUnits() { SearchQuery query = Druids .newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.dayGran) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .build(); CachingEmitter cachingEmitter = new CachingEmitter(); ServiceEmitter serviceEmitter = new ServiceEmitter("", "", cachingEmitter); SearchQueryMetrics queryMetrics = DefaultSearchQueryMetricsFactory.instance().makeMetrics(query); DefaultQueryMetricsTest.testQueryMetricsDefaultMetricNamesAndUnits(cachingEmitter, serviceEmitter, queryMetrics); } }
@Test public void testSearchNonExistingDimension() { List<SearchHit> expectedHits = new ArrayList<>(); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .dimensions("does_not_exist") .query("a") .build(), expectedHits ); }
@Test public void testSearchWithNotExistedDimension() { SearchQuery searchQuery = Druids.newSearchQueryBuilder() .dimensions( new DefaultDimensionSpec("asdf", "asdf") ) .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .build(); List<SearchHit> noHit = new ArrayList<>(); checkSearchQuery(searchQuery, noHit); }
@Test public void testSearchWithEmptyResults() { List<SearchHit> expectedHits = new ArrayList<>(); checkSearchQuery( Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query("abcd123") .build(), expectedHits ); }
private void testFilteredSearch(QueryRunner runner, List<Result<SearchResultValue>> expectedResults, String failMsg) { SearchQuery query = Druids.newSearchQueryBuilder() .dataSource(dataSource) .granularity(allGran) .filters(marketDimension, "spot") .intervals(fullOnInterval) .query("a") .build(); failMsg += " filtered search "; HashMap<String, Object> context = new HashMap<>(); Iterable<Result<SearchResultValue>> actualResults = runner.run(QueryPlus.wrap(query), context).toList(); TestHelper.assertExpectedResults(expectedResults, actualResults, failMsg); }
private void testFullOnSearch(QueryRunner runner, List<Result<SearchResultValue>> expectedResults, String failMsg) { SearchQuery query = Druids.newSearchQueryBuilder() .dataSource(dataSource) .granularity(allGran) .intervals(fullOnInterval) .query("a") .build(); failMsg += " search "; HashMap<String, Object> context = new HashMap<>(); Iterable<Result<SearchResultValue>> actualResults = runner.run(QueryPlus.wrap(query), context).toList(); TestHelper.assertExpectedResults(expectedResults, actualResults, failMsg); }
@Test public void testQuerySerialization() throws IOException { Query query = Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query("a") .build(); String json = jsonMapper.writeValueAsString(query); Query serdeQuery = jsonMapper.readValue(json, Query.class); Assert.assertEquals(query, serdeQuery); }
public static SearchQueryBuilder copy(SearchQuery query) { return new SearchQueryBuilder() .dataSource(query.getDataSource()) .filters(query.getDimensionsFilter()) .granularity(query.getGranularity()) .limit(query.getLimit()) .intervals(query.getQuerySegmentSpec()) .dimensions(query.getDimensions()) .query(query.getQuery()) .sortSpec(query.getSort()) .context(query.getContext()); }
@Test public void testFragmentSearch() { SearchQuery searchQuery = Druids.newSearchQueryBuilder() .dataSource(QueryRunnerTestHelper.dataSource) .granularity(QueryRunnerTestHelper.allGran) .intervals(QueryRunnerTestHelper.fullOnIntervalSpec) .query(new FragmentSearchQuerySpec(Arrays.asList("auto", "ve"))) .build(); List<SearchHit> expectedHits = new ArrayList<>(); expectedHits.add(new SearchHit(QueryRunnerTestHelper.qualityDimension, "automotive", 93)); checkSearchQuery(searchQuery, expectedHits); }
private SearchQuery makeFilteredSearchQuery() { return Druids.newSearchQueryBuilder() .dataSource(dataSource) .filters(new NotDimFilter(new SelectorDimFilter(marketDimension, "spot", null))) .granularity(allGran) .intervals(fullOnInterval) .query("a") .build(); } }
private Druids.SearchQueryBuilder testBuilder() { return Druids.newSearchQueryBuilder() .dataSource(dataSource) .granularity(allGran) .intervals(fullOnIntervalSpec); }
private static SearchQueryBuilder basicA(final BenchmarkSchemaInfo basicSchema) { final QuerySegmentSpec intervalSpec = new MultipleIntervalSegmentSpec(Collections.singletonList(basicSchema.getDataInterval())); return Druids.newSearchQueryBuilder() .dataSource("blah") .granularity(Granularities.ALL) .intervals(intervalSpec) .query("123"); }
@Override public SearchQuery withQuerySegmentSpec(QuerySegmentSpec spec) { return Druids.SearchQueryBuilder.copy(this).intervals(spec).build(); }
private SearchQuery makeSearchQuery() { return Druids.newSearchQueryBuilder() .dataSource(dataSource) .granularity(allGran) .intervals(fullOnInterval) .query("a") .build(); }