Standard query API
Use instant and range queries, labels, series, metadata and exemplar endpoints through the Prometheus HTTP API
Run the metrics queries, dashboards and ad hoc analysis your team already knows while PulsusDB plans the read path across raw samples and ClickHouse® rollups
sum by (service) (rate(http_requests_total[5m]))SELECT service,
toStartOfInterval(ts, 60) AS bucket,
sum(value) AS samples
FROM metric_samples
PREWHERE metric_name = 'http_requests_total'
GROUP BY service, bucket
PulsusDB exposes the standard Prometheus HTTP API for metrics. It resolves series, chooses the right raw or rollup source, pushes exact work into the ClickHouse database and evaluates the remaining PromQL semantics in its own engine
Use instant and range queries, labels, series, metadata and exemplar endpoints through the Prometheus HTTP API
Selectors, vector matching, subqueries, aggregations and functions retain Prometheus query behaviour
Eligible range selectors use the appropriate ClickHouse rollup while the response grid still follows the requested range
X-Pulsus-Explain reveals generated SQL, planner stages and whether raw samples or a rollup served the query
Move from a simple selector to a complex expression and inspect the representative ClickHouse SQL shape PulsusDB produces at each level
An instant vector selector resolves matching labels to fingerprints, then reads only those series from the metric sample table
up{job="api"} SELECT fingerprint, unix_milli, value
FROM metric_samples
PREWHERE metric_name = 'up'
WHERE unix_milli > {eval_time - lookback}
AND unix_milli <= {eval_time}
AND fingerprint IN (101, 205, 990)
ORDER BY fingerprint, unix_milli A selector, regular-expression matcher, range function and grouping expression become a narrow sample read before PromQL semantics finish in the stateless engine
sum by (service) (rate(http_requests_total{status=~"5.."}[5m])) SELECT fingerprint, unix_milli, value
FROM metric_samples
PREWHERE metric_name = 'http_requests_total'
WHERE unix_milli > {start - 300000 - lookback}
AND unix_milli <= {end}
AND fingerprint IN (
SELECT fingerprint FROM metric_series
WHERE metric_name = 'http_requests_total'
AND match(JSONExtractString(labels, 'status'), '(?-s)^(?:5..)$')
)
ORDER BY fingerprint, unix_milli Two windows and four range-vector branches calculate error-budget burn per service. Vector matching keeps only services breaching the threshold in both windows, filtering out brief spikes
(
(
sum by (service) (rate(http_requests_total{env="prod",status=~"5.."}[6h]))
/
sum by (service) (rate(http_requests_total{env="prod"}[6h]))
) / 0.001 > 6
)
and on (service)
(
(
sum by (service) (rate(http_requests_total{env="prod",status=~"5.."}[30m]))
/
sum by (service) (rate(http_requests_total{env="prod"}[30m]))
) / 0.001 > 6
) -- Representative 6h leaf; the 30m leaf remains on the raw tier
WITH resolved AS (
SELECT fingerprint, labels FROM metric_series
WHERE metric_name = 'http_requests_total'
AND JSONExtractString(labels, 'env') = 'prod'
AND ({branch} = 'total' OR
match(JSONExtractString(labels, 'status'), '(?-s)^(?:5..)$'))
), tiered AS (
SELECT fingerprint, toUnixTimestamp(ts) * 1000 AS unix_milli,
finalizeAggregation(argMinMergeState(first_value)) AS first_value,
finalizeAggregation(argMaxMergeState(last_value)) AS last_value
FROM metric_samples_1h
WHERE ts >= {start} AND ts < {raw_boundary}
AND fingerprint IN (SELECT fingerprint FROM resolved)
GROUP BY fingerprint, ts
UNION ALL
SELECT fingerprint, unix_milli, value, value
FROM metric_samples
PREWHERE metric_name = 'http_requests_total'
WHERE unix_milli >= {raw_boundary} AND unix_milli <= {end}
AND fingerprint IN (SELECT fingerprint FROM resolved)
)
SELECT tiered.*, resolved.labels
FROM tiered INNER JOIN resolved USING (fingerprint)
ORDER BY fingerprint, unix_milli PulsusDB only pushes work into the ClickHouse database when it can preserve the language’s semantics. Everything else remains the query engine’s job
Build a PromQL plan from the same selectors, modifiers and operators your dashboards already send
→Resolve matching series, constrain the time window and select an eligible rollup where it remains exact
→Let ClickHouse software do safe work, then evaluate the rest with Prometheus-compatible semantics
Use PulsusDB’s documented API directly. Compatibility aliases remain optional, so the platform is not defined by another product’s routing conventions
See the compatibility matrix ↗/api/v1/queryInstant query/api/v1/query_rangeRange query/api/v1/seriesSeries discovery