PromQL has two fundamental data types for time series results.
Instant vector — a single value per series at one point in time.
When you query a metric name (with or without label matchers), you get an instant vector:
http_requests_total{job="demo"}
Each series returns its most recent value. This is what you see in Table view in the expression browser.
Range vector — a list of values per series over a time window.
Add a duration in square brackets to get a range vector:
http_requests_total{job="demo"}[5m]
This returns all the raw samples collected in the last 5 minutes for each matching series. You cannot graph a range vector directly — it must be passed to a function like rate() or increase() first.
Supported time units:s (seconds), m (minutes), h (hours), d (days), w (weeks), y (years).
You can combine them: 1h30m means 90 minutes.
Why does this matter?
Functions like rate(), irate(), and increase() require a range vector as input and return an instant vector as output. Understanding this distinction is key to writing correct PromQL.