diff --git a/docs/blocks-storage/querier.md b/docs/blocks-storage/querier.md index fdee99409dc..732324fec1f 100644 --- a/docs/blocks-storage/querier.md +++ b/docs/blocks-storage/querier.md @@ -265,7 +265,7 @@ querier: # Logical plan optimizers. Multiple optimizers can be provided as a # comma-separated list. Supported values: default, all, propagate-matchers, - # sort-matchers, merge-selects, detect-histogram-stats + # sort-matchers, merge-selects, detect-histogram-stats, projection # CLI flag: -querier.optimizers [optimizers: | default = "default"] diff --git a/docs/configuration/config-file-reference.md b/docs/configuration/config-file-reference.md index 4038797d983..91e9bc9088a 100644 --- a/docs/configuration/config-file-reference.md +++ b/docs/configuration/config-file-reference.md @@ -4779,7 +4779,7 @@ thanos_engine: # Logical plan optimizers. Multiple optimizers can be provided as a # comma-separated list. Supported values: default, all, propagate-matchers, - # sort-matchers, merge-selects, detect-histogram-stats + # sort-matchers, merge-selects, detect-histogram-stats, projection # CLI flag: -querier.optimizers [optimizers: | default = "default"] @@ -5550,7 +5550,7 @@ thanos_engine: # Logical plan optimizers. Multiple optimizers can be provided as a # comma-separated list. Supported values: default, all, propagate-matchers, - # sort-matchers, merge-selects, detect-histogram-stats + # sort-matchers, merge-selects, detect-histogram-stats, projection # CLI flag: -ruler.optimizers [optimizers: | default = "default"] diff --git a/pkg/engine/config.go b/pkg/engine/config.go index 7404c2a356d..31a7fefede8 100644 --- a/pkg/engine/config.go +++ b/pkg/engine/config.go @@ -5,10 +5,11 @@ import ( "fmt" "strings" + "github.com/prometheus-community/parquet-common/schema" "github.com/thanos-io/promql-engine/logicalplan" ) -var supportedOptimizers = []string{"default", "all", "propagate-matchers", "sort-matchers", "merge-selects", "detect-histogram-stats"} +var supportedOptimizers = []string{"default", "all", "propagate-matchers", "sort-matchers", "merge-selects", "detect-histogram-stats", "projection"} // ThanosEngineConfig contains the configuration to create engine. type ThanosEngineConfig struct { @@ -59,6 +60,11 @@ func getOptimizer(name string) ([]logicalplan.Optimizer, error) { return []logicalplan.Optimizer{logicalplan.MergeSelectsOptimizer{}}, nil case "detect-histogram-stats": return []logicalplan.Optimizer{logicalplan.DetectHistogramStatsOptimizer{}}, nil + case "projection": + po := logicalplan.ProjectionOptimizer{ + SeriesHashLabel: schema.SeriesHashColumn, + } + return []logicalplan.Optimizer{po}, nil default: return nil, fmt.Errorf("unknown optimizer %s", name) } diff --git a/schemas/cortex-config-schema.json b/schemas/cortex-config-schema.json index 83f8b05aadd..ea143135337 100644 --- a/schemas/cortex-config-schema.json +++ b/schemas/cortex-config-schema.json @@ -5994,7 +5994,7 @@ }, "optimizers": { "default": "default", - "description": "Logical plan optimizers. Multiple optimizers can be provided as a comma-separated list. Supported values: default, all, propagate-matchers, sort-matchers, merge-selects, detect-histogram-stats", + "description": "Logical plan optimizers. Multiple optimizers can be provided as a comma-separated list. Supported values: default, all, propagate-matchers, sort-matchers, merge-selects, detect-histogram-stats, projection", "type": "string", "x-cli-flag": "querier.optimizers" } @@ -7015,7 +7015,7 @@ }, "optimizers": { "default": "default", - "description": "Logical plan optimizers. Multiple optimizers can be provided as a comma-separated list. Supported values: default, all, propagate-matchers, sort-matchers, merge-selects, detect-histogram-stats", + "description": "Logical plan optimizers. Multiple optimizers can be provided as a comma-separated list. Supported values: default, all, propagate-matchers, sort-matchers, merge-selects, detect-histogram-stats, projection", "type": "string", "x-cli-flag": "ruler.optimizers" }