Expand description
Table semantic layer vocabulary.
A thin layer of semantic metadata attached to a table via table_options, so
machine consumers (LLM agents, alert/dashboard builders, MCP servers, ETL) can
align a table with the observability concept it stands for without guessing
from column names. See docs/rfcs/2026-05-28-table-semantic-layer.md.
The vocabulary is intentionally small: a key earns its place only when it records something a consumer cannot cheaply and reliably recover from the schema/data itself. Keys whose value is already in the metric name by convention, is a constant, or duplicates an existing column are deliberately omitted rather than stamped for completeness.
All public keys share the SEMANTIC_PREFIX namespace and are string-valued.
is_semantic_option_key gates them through
crate::requests::validate_table_option, so they are accepted both on the
ingestion auto-create path and on explicit CREATE TABLE ... WITH (...) DDL.
Enums§
- Entity
Role - The role a set of columns plays for an entity:
id(identifying attributes),descriptive, orscope. Columns may be tags or fields; DDL validation only requires that they exist and render as stable strings (has_stable_string_form).
Constants§
- METADATA_
QUALITY_ DECLARED - METADATA_
QUALITY_ INFERRED - SEMANTIC_
ENTITY_ PREFIX - Reserved prefix for the entity-identity sub-namespace:
greptime.semantic.entity.<type>.{id|descriptive|scope}. Unlike the rest of the vocabulary (a closed whitelist), entity types are open-ended (service,host,k8s.pod,process,agent, custom, …), so keys here are validated by prefix + shape rather than membership. Seedocs/rfcs/2026-06-25-entity-relationships-and-graph-query.md. - SEMANTIC_
ENTITY_ SERVICE_ ID - The well-known entity-identity key auto-stamped on OTLP trace tables; its value
is the
service_nametag column, declaring the logicalserviceentity. - SEMANTIC_
METRIC_ METADATA_ QUALITY METADATA_QUALITY_DECLAREDwhen the protocol stated the type, orMETADATA_QUALITY_INFERREDwhen guessed from a name suffix.- SEMANTIC_
METRIC_ ORIGINAL_ NAME - Pre-translation OTel name when the table name was Prometheus-ised; the key a consumer uses to look the metric up in the OTel semantic conventions.
- SEMANTIC_
METRIC_ TEMPORALITY cumulative/delta(OTel only). Invisible in the metric name, so it is unrecoverable from the table alone.- SEMANTIC_
METRIC_ TYPE - Instrument kind:
counter/gauge/histogram/summary/updown_counter/gauge_histogram/info/stateset. - SEMANTIC_
METRIC_ UNIT - UCUM unit, e.g.
s,By,{request}. Discarded by the row encoders, so it is unrecoverable once ingested. - SEMANTIC_
OPTION_ KEYS - Every recognised public semantic table-option key. The set is a closed
whitelist: keys under
SEMANTIC_PREFIXthat are not listed here are rejected, so an unknown key likegreptime.semantic.unknown_keydoes not silently land in a table’s options. Adding a key to the vocabulary means adding it here. - SEMANTIC_
PER_ TABLE_ INDEX_ KEY - Internal
QueryContextextension key carrying the per-table semantic index (a{table_name -> {semantic_key: value}}JSON blob) from the ingestion encode path to the auto-create site. Deliberately OUTSIDESEMANTIC_PREFIXso it is not a valid table option and never leaks into a table’s options. - SEMANTIC_
PIPELINE - Internal ingestion pipeline / data model, e.g.
greptime_trace_v1. The signal-agnostic successor to the engine-specifictable_data_modeloption. - SEMANTIC_
PREFIX - Reserved prefix for every public semantic table-option key.
- SEMANTIC_
SIGNAL_ TYPE - Signal kind: one of
SIGNAL_TYPE_TRACE/SIGNAL_TYPE_LOG/SIGNAL_TYPE_METRIC/SIGNAL_TYPE_EVENT. - SEMANTIC_
SOURCE - Ingestion ecosystem, e.g.
SOURCE_OPENTELEMETRY/SOURCE_PROMETHEUS. - SEMANTIC_
SOURCE_ VERSION - Source protocol version, e.g. Prometheus remote write
1.0/2.0. - SEMANTIC_
TRACE_ CONVENTIONS - Semantic-conventions version the rows conform to (e.g. the OTel schema URL),
or
SEMANTIC_VALUE_UNKNOWN/SEMANTIC_VALUE_MIXEDwhen not single-valued. - SEMANTIC_
VALUE_ MIXED - Sentinel for a single-valued key that saw conflicting sources.
- SEMANTIC_
VALUE_ UNKNOWN - Sentinel for a key that cannot be determined at stamp time.
- SIGNAL_
TYPE_ EVENT - SIGNAL_
TYPE_ LOG - SIGNAL_
TYPE_ METRIC - SIGNAL_
TYPE_ TRACE - SOURCE_
ELASTICSEARCH - SOURCE_
INFLUXDB - SOURCE_
LOKI - SOURCE_
OPENTELEMETRY - SOURCE_
OPENTSDB - SOURCE_
PROMETHEUS
Functions§
- has_
stable_ string_ form - Returns true if a column of
data_typerenders as a stable string — the requirement for entity id/descriptive/scope columns. The read-time derivation casts them to strings, so a type without a stable string form would fail only when the graph is scanned; DDL validation rejects it up front instead. - is_
entity_ option_ key - Returns true if
keyis a well-formed entity-identity option key. - is_
semantic_ option_ key - Returns true if
keyis a recognised semantic table-option key. - is_
valid_ 🔒entity_ type - Returns true if
tyis a syntactically valid entity type, e.g.service,host,k8s.pod,service.instance. An entity type is one or more dot-separated segments, each a non-empty[a-z0-9_]+token. The dotted form carries the two-entity-layer convention (servicevsservice.instance). - parse_
entity_ columns - Tokenizes an entity option’s comma-separated column list (trimmed, empty
tokens dropped).
validate_semantic_optionrejects empty tokens at DDL time, so readers only ever drop what validation already refused. - parse_
entity_ option_ key - Parses a well-formed entity-identity option key of the shape
greptime.semantic.entity.<type>.{id|descriptive|scope}into(entity_type, role). The<type>may itself contain dots; the role is the final dot-separated segment. This is the single parser of the key format — DDL validation and the read-time derivation both go through it. - validate_
semantic_ option - Validates a
greptime.semantic.*option’svalueagainst its allowed domain.