@Override @JsonIgnore public Collection<Dimension> getDimensions() { return getInnerQueryUnchecked().getDimensions(); }
/** * Builds something to process a set of sql results and return them as the * same format as a GroupBy query to Druid. * * @param druidQuery The original query that was converted to a sql query. * @param apiToFieldMapper The mapping from api to physical name. * @param objectMapper The mapper for all JSON processing. * @param sqlTimeConverter The time converter used with making the query. */ public SqlResultSetProcessor( DruidAggregationQuery<?> druidQuery, ApiToFieldMapper apiToFieldMapper, ObjectMapper objectMapper, SqlTimeConverter sqlTimeConverter ) { this.druidQuery = druidQuery; this.apiToFieldMapper = apiToFieldMapper; this.objectMapper = objectMapper; this.sqlTimeConverter = sqlTimeConverter; this.sqlResults = new ArrayList<>(); this.columnToColumnName = HashBiMap.create(); this.groupByDimensionsCount = druidQuery.getDimensions().size(); }
/** * Gets all the dimensions from a druid query as fields for calcite. * * @param builder The RelBuilder created with Calcite. * @param druidQuery The query to find the having filter from. * @param apiToFieldMapper The mapping from api to physical name. * * @return the list of dimensions as {@link RexNode} for Calcite's builder. */ private List<RexNode> getDimensionFields( RelBuilder builder, DruidAggregationQuery<?> druidQuery, ApiToFieldMapper apiToFieldMapper ) { return druidQuery.getDimensions().stream() .map(Dimension::getApiName) .map(apiToFieldMapper) .map(builder::field) .collect(Collectors.toList()); }
/** * Produce the schema-defining columns for a given druid query. * * @return A stream of columns based on the signature of the Druid Query. */ default Stream<Column> buildSchemaColumns() { return Stream.of( getDimensions().stream() .map(DimensionColumn::new), Stream.concat( getAggregations().stream() .map(Aggregation::getName), getPostAggregations().stream() .map(PostAggregation::getName) ).map(MetricColumn::new) ).flatMap(Function.identity()); } }
int groupBys = druidQuery.getDimensions().size() + timePartFunctions; sorts.add(builder.field(timestampColumn)); sorts.addAll(builder.fields().subList(druidQuery.getDimensions().size(), groupBys)); List<RexNode> unorderedDimensions = druidQuery.getDimensions().stream() .map(Dimension::getApiName) .map(apiToFieldMapper)
); } else { cardinalityWeight = innerQuery.getDimensions().stream() .mapToLong(Dimension::getCardinality) .filter(cardinality -> cardinality > 0)
/** * Wraps a query as a GroupBy Query. * * @param query The query to wrap. */ public SqlAggregationQuery(DruidAggregationQuery<?> query) { this( query.getDataSource(), query.getGranularity(), query.getDimensions(), query.getFilter(), query.getAggregations(), query.getPostAggregations(), query.getIntervals(), query.getContext() ); }
innerQuery.getDataSource(), innerQuery.getGranularity(), innerQuery.getDimensions(), innerQuery.getFilter(), (Having) null,