@Override public Optional<? extends DruidAggregationQuery> getInnerQuery() { return (Optional<? extends DruidAggregationQuery>) this.dataSource.getQuery(); }
@Override @JsonIgnore public Set<String> getNames() { return super.getNames(); } }
/** * Build a data source from a table. * * @param table A fact table or fact table view * * @return A table datasource for a fact table or a union data source for a fact table view */ private DataSource buildTableDataSource(ConstrainedTable table) { if (table.getDataSourceNames().size() == 1) { return new TableDataSource(table); } else { return new UnionDataSource(table); } }
@Override public SqlAggregationQuery withInnermostDataSource(DataSource dataSource) { Optional<DruidFactQuery<?>> innerQuery = (Optional<DruidFactQuery<?>>) this.dataSource.getQuery(); return !innerQuery.isPresent() ? withDataSource(dataSource) : withDataSource(new QueryDataSource(innerQuery.get().withInnermostDataSource(dataSource))); }
@Override public LookbackQuery withIntervals(Collection<Interval> intervals) { return new LookbackQuery( new QueryDataSource(getInnerQueryUnchecked().withIntervals(intervals)), granularity, filter, aggregations, postAggregations, intervals, context, true, lookbackOffsets, lookbackPrefixes, having, limitSpec ); }
/** * Constructor. * * @param query Query that defines the DataSource. */ public QueryDataSource(DruidFactQuery<?> query) { super(DefaultDataSourceType.QUERY, query.getDataSource().getPhysicalTable()); this.query = query; }
@Override public LookbackQuery withInnermostDataSource(DataSource dataSource) { Optional<DruidFactQuery<?>> innerQuery = (Optional<DruidFactQuery<?>>) this.dataSource.getQuery(); return (innerQuery == null) ? withDataSource(dataSource) : withDataSource(new QueryDataSource(innerQuery.get().withInnermostDataSource(dataSource))); }
/** * Update the postAggregations of the nested inner query. The PostAggregations of the LookbackQuery(outer query) * remain unchanged * * @param postAggregations A Collection of PostAggregations * * @return A LookbackQuery whose datasource is built using the provided postAggregations */ public LookbackQuery withInnerQueryPostAggregations(Collection<PostAggregation> postAggregations) { return new LookbackQuery(new QueryDataSource(getInnerQueryUnchecked().withPostAggregations(postAggregations)), granularity, filter, aggregations, getLookbackPostAggregations(), intervals, context, false, lookbackOffsets, lookbackPrefixes, having, limitSpec); }
/** * Get the query that defines the data source. Empty queries become null for serialization. * * @return the serializable version of the query. */ @JsonInclude(JsonInclude.Include.NON_NULL) @JsonProperty("query") private DruidQuery<?> getQueryForSerialization() { return getQuery().orElse(null); }
/** * Checks if a {@link Dimension} exists in a {@link DataSource}. * * @param dimension The dimension to look for in the datasource. * @param dataSource The datasource to look through for the dimension. * * @return true if the dimension was found. */ default boolean dimensionExistsInDataSource(Dimension dimension, DataSource dataSource) { return dataSource.getPhysicalTable() .getDimensions() .stream() .anyMatch(dimension::equals); }
@Override @JsonProperty(value = "dataSources") public Set<String> getNames() { return super.getNames(); } }
@Override public GroupByQuery withInnermostDataSource(DataSource dataSource) { Optional<DruidFactQuery<?>> innerQuery = (Optional<DruidFactQuery<?>>) this.dataSource.getQuery(); return !innerQuery.isPresent() ? withDataSource(dataSource) : withDataSource(new QueryDataSource(innerQuery.get().withInnermostDataSource(dataSource))); }
@Override public LookbackQuery withAggregations(Collection<Aggregation> aggregations) { return withDataSource(new QueryDataSource(getInnerQueryUnchecked().withAggregations(aggregations))); }
/** * If this query is nestable, and has a nested query return it. * * @return the nested query or empty if there is no nested query */ @JsonIgnore default Optional<? extends DruidQuery> getInnerQuery() { return getDataSource().getQuery(); }
@Override @JsonIgnore public Set<String> getNames() { return query.getInnermostQuery().getDataSource().getNames(); }
@Override public LookbackQuery withAllIntervals(Collection<Interval> intervals) { Optional<DruidFactQuery<?>> innerQuery = (Optional<DruidFactQuery<?>>) this.dataSource.getQuery(); return !innerQuery.isPresent() ? withIntervals(intervals) : withDataSource(new QueryDataSource(innerQuery.get().withAllIntervals(intervals))).withIntervals(intervals); }
@Override public LookbackQuery withFilter(Filter filter) { return withDataSource(new QueryDataSource(getInnerQueryUnchecked().withFilter(filter))); }
@Override public GroupByQuery withAllIntervals(Collection<Interval> intervals) { Optional<DruidFactQuery<?>> innerQuery = (Optional<DruidFactQuery<?>>) this.dataSource.getQuery(); return !innerQuery.isPresent() ? withIntervals(intervals) : withDataSource(new QueryDataSource(innerQuery.get().withAllIntervals(intervals))).withIntervals(intervals); }
@Override public LookbackQuery withGranularity(Granularity granularity) { return withDataSource(new QueryDataSource(getInnerQueryUnchecked().withGranularity(granularity))); }
@Override public SqlAggregationQuery withAllIntervals(Collection<Interval> intervals) { Optional<DruidFactQuery<?>> innerQuery = (Optional<DruidFactQuery<?>>) this.dataSource.getQuery(); return !innerQuery.isPresent() ? withIntervals(intervals) : withDataSource(new QueryDataSource(innerQuery.get().withAllIntervals(intervals))).withIntervals(intervals); }