Skip to content

TS_INFO information retrieval command#142721

Open
leontyevdv wants to merge 54 commits intoelastic:mainfrom
leontyevdv:feat/ts-info-information-retrieval-command
Open

TS_INFO information retrieval command#142721
leontyevdv wants to merge 54 commits intoelastic:mainfrom
leontyevdv:feat/ts-info-information-retrieval-command

Conversation

@leontyevdv
Copy link
Contributor

@leontyevdv leontyevdv commented Feb 19, 2026

Adds the TS_INFO command, a time-series metadata introspection command built on top of METRICS_INFO (#141667). While METRICS_INFO returns one row per distinct metric across all time series, TS_INFO returns one row per (metric, time-series) combination, providing finer-grained visibility into individual time series.

TS_INFO produces the same 6 columns as METRICS_INFO plus an additional dimensions column:

TS k8s | METRICS_INFO | SORT metric_name
metric_name data_stream unit metric_type field_type dimension_fields
network.eth0.rx k8s packets gauge integer [cluster, pod, region]
network.eth0.tx k8s packets gauge integer [cluster, pod, region]
network.total_bytes_in k8s bytes counter long [cluster, pod, region]
network.total_cost k8s usd counter double [cluster, pod, region]

TS_INFO expands this to one row per time series, adding the dimensions column:

TS k8s | TS_INFO | KEEP metric_name, dimensions | WHERE metric_name == "network.eth0.rx" | SORT dimensions
metric_name dimensions
network.eth0.rx {"cluster": "prod", "pod": "one", "region": "[eu, us]"}
network.eth0.rx {"cluster": "prod", "pod": "three", "region": "[eu, us]"}
network.eth0.rx {"cluster": "prod", "pod": "two", "region": "[eu, us]"}
network.eth0.rx {"cluster": "qa", "pod": "one"}
network.eth0.rx {"cluster": "qa", "pod": "three"}
network.eth0.rx {"cluster": "qa", "pod": "two"}
network.eth0.rx {"cluster": "staging", "pod": "one", "region": "us"}
network.eth0.rx {"cluster": "staging", "pod": "three", "region": "us"}
network.eth0.rx {"cluster": "staging", "pod": "two", "region": "us"}

This PR contains generative tests for both METRICS_INFO and TS_INFO commands.

Closes #139296
Closes #141413

leontyevdv and others added 30 commits February 2, 2026 16:25
Add METRICS_INFO command to retrieve metrics-related metadata.

Part of elastic#139296
Add mata.unit to the k8s-mappings.json

Part of elastic#139296
# Conflicts:
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.interp
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.java
Regenerate ESQL parser to fix conflicts

Part of elastic#139296
Change METRICS_INFO to scan documents with unique _tsid to retrieve
metrics and dimensions metadata from them.

Part of elastic#139296
# Conflicts:
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
Fix a compilation error occurred due to the merge with main.

Part of elastic#139296
- Address review comments.
- Optimize DistinctByOperator
- Optimize collection of metrics and dimensions

Part of elastic#139296
Change grouping by adding a concept of MetricSignature and 2 steps of
grouping.

Part of elastic#139296
Add MetricsInfoOperatorTests

Part of elastic#139296
Ban PipelineBreakers before METRICS_INFO.

Part of elastic#139296
Make MetricsInfo a PipelineBreaker.
Add deduplication of information.
# Conflicts:
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
Make MetricsInfo a PipelineBreaker.
Add deduplication of information.
Change grouping to take into account a data stream name
# Conflicts:
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
# Conflicts:
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseLexer.interp
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseLexer.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/PlanWritables.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/LocalExecutionPlanner.java
Add INTERMEDIATE reduction
# Conflicts:
#	x-pack/plugin/esql/src/main/antlr/EsqlBaseLexer.tokens
#	x-pack/plugin/esql/src/main/antlr/EsqlBaseParser.tokens
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseLexer.interp
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseLexer.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.interp
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/LocalExecutionPlanner.java
#	x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/approximation/ApproximationSupportTests.java
#	x-pack/plugin/src/yamlRestTest/resources/rest-api-spec/test/esql/60_usage.yml
…eat/ts-info-information-retrieval-command

# Conflicts:
#	x-pack/plugin/esql/src/main/antlr/EsqlBaseLexer.tokens
#	x-pack/plugin/esql/src/main/antlr/EsqlBaseParser.tokens
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseLexer.interp
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseLexer.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.interp
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/telemetry/FeatureMetric.java
# Conflicts:
#	x-pack/plugin/esql/qa/server/multi-clusters/src/javaRestTest/java/org/elasticsearch/xpack/esql/ccq/MultiClusterSpecIT.java
#	x-pack/plugin/esql/src/main/antlr/EsqlBaseLexer.tokens
#	x-pack/plugin/esql/src/main/antlr/EsqlBaseParser.g4
#	x-pack/plugin/esql/src/main/antlr/EsqlBaseParser.tokens
#	x-pack/plugin/esql/src/main/antlr/lexer/Expression.g4
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/action/EsqlCapabilities.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/optimizer/rules/physical/ProjectAwayColumns.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseLexer.interp
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseLexer.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.interp
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParser.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParserBaseListener.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParserBaseVisitor.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParserListener.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/EsqlBaseParserVisitor.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/LogicalPlanBuilder.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/plan/PlanWritables.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/LocalExecutionPlanner.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/PlannerUtils.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/mapper/LocalMapper.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/planner/mapper/Mapper.java
#	x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/telemetry/FeatureMetric.java
#	x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/CsvTests.java
#	x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/analysis/VerifierTests.java
#	x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/approximation/ApproximationSupportTests.java
#	x-pack/plugin/esql/src/test/java/org/elasticsearch/xpack/esql/optimizer/PhysicalPlanOptimizerTests.java
@leontyevdv leontyevdv requested review from a team, dnhatn and kpatticha February 19, 2026 16:56
@leontyevdv leontyevdv self-assigned this Feb 19, 2026
@leontyevdv leontyevdv added >enhancement Team:Analytics Meta label for analytical engine team (ESQL/Aggs/Geo) :Analytics/ES|QL AKA ESQL Team:StorageEngine :StorageEngine/ES|QL Timeseries / metrics / PromQL / logsdb capabilities in ES|QL v9.4.0 labels Feb 19, 2026
@elasticsearchmachine
Copy link
Collaborator

Pinging @elastic/es-analytical-engine (Team:Analytics)

@elasticsearchmachine
Copy link
Collaborator

Pinging @elastic/es-storage-engine (Team:StorageEngine)

@elasticsearchmachine
Copy link
Collaborator

Hi @leontyevdv, I've created a changelog YAML for you.

@elasticsearchmachine
Copy link
Collaborator

Hi @leontyevdv, I've updated the changelog YAML for you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

:Analytics/ES|QL AKA ESQL >enhancement :StorageEngine/ES|QL Timeseries / metrics / PromQL / logsdb capabilities in ES|QL Team:Analytics Meta label for analytical engine team (ESQL/Aggs/Geo) Team:StorageEngine v9.4.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PromQL Generative tests: Use METRICS_INFO to get field info Time series information retrieval

2 participants

Comments