Files
greptimedb/src/operator
dennis zhuang 4eeb4052d6 feat(servers): stamp prometheus remote write v2 metadata as semantic table options (#8797)
* feat(servers): stamp prometheus remote write v2 metadata as semantic table options

Remote write 2.0 carries per-series metadata (type, unit, help) that the
v2 ingest decoded and dropped; tables kept the name-based 'inferred'
quality. Wire it into the semantic layer:

- generalize the OTLP per-table semantic index into a shared, schema-
  aware servers::semantic module: v2 lets each series override its
  target schema, so the index is keyed {schema -> table -> options} and
  the same metric name in two schemas no longer collapses;
- into_write_requests records metric type and unit per written table;
  an explicit type upgrades the table's metadata quality to declared,
  UNSPECIFIED series keep the request-level inferred stamp, and units
  are canonicalised from OpenMetrics words to the UCUM codes the
  vocabulary is defined in (unknown units are dropped, help text is not
  persisted);
- the consumer folds the index in on both auto-create paths: the
  operator row-insert path and the pending-rows batched create, which
  bypasses the former.

Table options are stamped at auto-create only; updating existing tables
from later metadata is future work (a metadata registry, see the native
histograms RFC).

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* chore: trim over-commenting in the remote write metadata path

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* fix: parse the per-table semantic index once per create round

The index was re-parsed from JSON for every table being created — a
first write creating N tables (a fleet's first scrape) paid
O(N x index size). Parsing now happens lazily once per create-planning
round, on both consumers: the operator row-insert auto-create (also
serving OTLP metrics) and the pending-rows batched create.

Also validate every non-zero metadata symbol reference up front, as the
remote write 2.0 spec requires: help_ref was never checked, and
unit_ref escaped checking when the metric type was UNSPECIFIED.

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* fix(servers): stamp remote-write v2 unit independently of metric type

OpenMetrics models TYPE and UNIT as independent MetricFamily metadata, and
the Prometheus v2 sender emits UNSPECIFIED-type series that still carry a
unit. The early return on UNSPECIFIED dropped that unit, which is
unrecoverable after table auto-create (units are not stored in rows).
Stamp the mapped unit whenever present; the type and the
metadata_quality=declared upgrade still require an explicit type.

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

* chore: trim restating comments in the v2 metadata path

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>

---------

Signed-off-by: Dennis Zhuang <killme2008@gmail.com>
2026-08-11 06:20:08 +00:00
..