Variable | Meaning |
---|---|
METRIC |
Metric name (i.e. cpu_usage_system ) |
NAME |
Name for the metric value (corresponds to AS "NAME" in SQL) |
LABEL[#] |
Label name |
VALUE[#] |
Value of the label |
INTERVAL |
Interval (e.g. '10s' for SQL or $__interval variable in Grafana) |
TIMESTAMP[#] |
Timestamp value (e.g. 2021-01-01T01:00:00.000Z in SQL) |
Idiom Link | PromQL | SQL | SQL with Time Boundaries |
---|---|---|---|
IDIOM-1 |
avg(
METRIC{LABEL1=VALUE1,LABEL2=VALUE2}
)
|
SELECT time_bucket('INTERVAL', time) AS time,
AVG(value) AS NAME
FROM METRIC
WHERE time >= 'TIMESTAMP1' AND
time < 'TIMESTAMP2' AND
labels ? ('LABEL1' == 'VALUE2') AND
labels ? ('LABEL2' == 'VALUE2')
GROUP BY 1
ORDER BY 1;
|
|
IDIOM-2 |
avg(
METRIC{LABEL1=VALUE1,LABEL2=VALUE2}
)
by(LABEL1)
|
SELECT time_bucket('INTERVAL', time) AS time,
VAL(LABEL1_id) AS LABEL1,
AVG(value) AS NAME
FROM METRIC
WHERE time >= 'TIMESTAMP1' AND
time < 'TIMESTAMP2' AND
labels ? ('LABEL1' == 'VALUE2') AND
labels ? ('LABEL2' == 'VALUE2')
GROUP BY 1,
2
ORDER BY 1;
|
|
IDIOM-3 |
metrics()
|
SELECT metric_name AS metric
FROM metric;
|
|
IDIOM-4 |
label_names()
|
SELECT key AS label
FROM label_key
WHERE key != '__name__';
|
|
IDIOM-5 |
label_names(METRIC)
|
SELECT key AS label
FROM label_key_position
WHERE key != '__name__' AND
metric_name = 'METRIC';
|
|
IDIOM-6 |
label_values(LABEL)
|
SELECT value
FROM label
WHERE key = 'LABEL';
|
|
IDIOM-7 |
label_values(METRIC, LABEL)
|
SELECT l.value AS NAME
FROM label_key_position AS p
JOIN (
SELECT key,
value
FROM label
WHERE key = 'LABEL'
) AS l
ON p.key = l.key AND
p.metric_name = 'METRIC';
|
SELECT value "NAME"
FROM label
WHERE key = 'LABEL' AND
id IN (
SELECT UNNEST(labels)
FROM prom_data_series."METRIC" s
INNER JOIN (
SELECT series_id
FROM prom_data."METRIC"
WHERE time >= 'TIMESTAMP1' AND
time < 'TIMESTAMP2'
GROUP BY 1
) a
ON s.id = a.series_id
GROUP BY 1
);
|
IDIOM-8 |
label_values(
METRIC{LABEL1='VALUE1',LABEL2='VALUE2'},
LABEL3
)
|
TODO |
SELECT value "NAME"
FROM label
WHERE key = 'LABEL3' AND
id IN (
SELECT UNNEST(labels)
FROM prom_data_series."METRIC" s
INNER JOIN (
SELECT series_id
FROM prom_data."METRIC"
WHERE time >= 'TIMESTAMP1' AND
time < 'TIMESTAMP2'
GROUP BY 1
) a
ON s.id = a.series_id
WHERE (
SELECT id
FROM label
WHERE (key = 'LABEL1' AND value = 'VALUE1') OR
(key = 'LABEL2' AND value = 'VALUE2')
) = ANY(labels)
GROUP BY 1
);
|