Class TranslatePromqlToEsqlPlan


public final class TranslatePromqlToEsqlPlan extends OptimizerRules.ParameterizedOptimizerRule<PromqlCommand,LogicalOptimizerContext>
Translates PromQL logical plan into ESQL plan.

This rule runs before TranslateTimeSeriesAggregate to convert PromQL-specific plan into standard ESQL nodes (TimeSeriesAggregate, Aggregate, Eval, etc.) that can then be further optimized.

Translation examples:

 PromQL: rate(http_requests[5m])
 Result: TimeSeriesAggregate[rate(value), groupBy=[step]]

 PromQL: sum by (cluster) (rate(http_requests[5m]))
 Result: TimeSeriesAggregate[sum(rate(value)), groupBy=[step, cluster]]

 PromQL: avg(sum by (cluster) (rate(http_requests[5m])))
 Result: Aggregate[avg(sum_result), groupBy=[step]]
           \_ TimeSeriesAggregate[sum(rate(value)), groupBy=[step, cluster]]

 PromQL: avg(ceil(sum by (cluster) (rate(http_requests[5m]))))
 Result: Aggregate[avg(ceil_result), groupBy=[step]]
           \_ Eval[ceil(sum_result)]
                 \_ TimeSeriesAggregate[sum(rate(value)), groupBy=[step, cluster]]

 PromQL: time() - avg(sum by (cluster) (rate(http_requests[5m])))
 Result: Eval[time() - avg_result]
           \_ Aggregate[avg(sum_result), groupBy=[step]]
                 \_ TimeSeriesAggregate[sum(rate(value)), groupBy=[step, cluster]]
 
Translation mechanism:

Recursive descent via translateNode(). Each node returns a TranslationResult:

  • plan the LogicalPlan built so far
  • expression reference to this node's output, composed into parent expressions
Example translations: