6.0 KiB
SQL selector functions are designed to work with time series data. They behave similarly to aggregate functions in that they take a collection of data and return a single value. However, selectors are unique in that they return a struct that contains a time value in addition to the computed value.
How do selector functions work?
Each selector function returns an Arrow struct
(similar to a JSON object) representing a single time and value from the
specified column in the each group.
What time and value get returned depend on the logic in the selector function.
For example, selector_first
returns the value of specified column in the first row of the group.
selector_max
returns the maximum value of the specified column in the group.
Selector struct schema
The struct returned from a selector function has two properties:
- time:
time
value in the selected row - value: value of the specified column in the selected row
{time: 2023-01-01T00:00:00Z, value: 72.1}
Selector functions in use
In your SELECT
statement, execute a selector function and use bracket notation
to reference properties of the returned struct to
populate the column value:
SELECT
selector_first(temp, time)['time'] AS time,
selector_first(temp, time)['value'] AS temp,
room
FROM home
GROUP BY room
Selector functions
selector_min
Returns the smallest value of a selected column and a timestamp.
selector_min(expression, timestamp)
Arguments
- expression: Expression to operate on. Can be a constant, column, or function, and any combination of string or arithmetic operators.
- timestamp: Time expression. Can be a constant, column, or function.
{{< expand-wrapper >}}
{{% expand "View selector_min
query example" %}}
The following example uses the NOAA Bay Area weather sample data.
SELECT
location,
selector_min(temp_min, time)['time'] AS time,
selector_min(temp_min, time)['value'] AS min_temp
FROM
weather
GROUP BY
location
| location | time | min_temp | +---------------+---------------------+----------+ | Concord | 2022-01-02T00:00:00 | 28.0 | | Hayward | 2021-01-26T00:00:00 | 32.0 | | San Francisco | 2022-01-02T00:00:00 | 35.0 |
{{% /expand %}} {{< /expand-wrapper >}}
selector_max
Returns the largest value of a selected column and a timestamp.
selector_max(expression, timestamp)
Arguments
- expression: Expression to operate on. Can be a constant, column, or function, and any combination of string or arithmetic operators.
- timestamp: Time expression. Can be a constant, column, or function.
{{< expand-wrapper >}}
{{% expand "View selector_max
query example" %}}
The following example uses the NOAA Bay Area weather sample data.
SELECT
location,
selector_max(temp_max, time)['time'] AS time,
selector_max(temp_max, time)['value'] AS max_temp
FROM
weather
GROUP BY
location
location | time | max_temp |
---|---|---|
Concord | 2020-09-07T00:00:00 | 112.0 |
Hayward | 2022-09-06T00:00:00 | 107.0 |
San Francisco | 2020-09-06T00:00:00 | 102.0 |
{{% /expand %}} {{< /expand-wrapper >}}
selector_first
Returns the first value ordered by time ascending.
selector_first(expression, timestamp)
Arguments
- expression: Expression to operate on. Can be a constant, column, or function, and any combination of string or arithmetic operators.
- timestamp: Time expression. Can be a constant, column, or function.
{{< expand-wrapper >}}
{{% expand "View selector_first
query example" %}}
The following example uses the NOAA Bay Area weather sample data.
SELECT
location,
selector_first(precip, time)['time'] AS time,
selector_first(precip, time)['value'] AS first_precip
FROM
(SELECT * FROM weather WHERE precip > 0)
GROUP BY
location
location | time | first_precip |
---|---|---|
Concord | 2020-01-08T00:00:00 | 0.01 |
Hayward | 2020-01-09T00:00:00 | 0.17 |
San Francisco | 2020-01-07T00:00:00 | 0.03 |
{{% /expand %}} {{< /expand-wrapper >}}
selector_last
Returns the last value ordered by time ascending.
selector_last(expression, timestamp)
Arguments
- expression: Expression to operate on. Can be a constant, column, or function, and any combination of string or arithmetic operators.
- timestamp: Time expression. Can be a constant, column, or function.
{{< expand-wrapper >}}
{{% expand "View selector_last
query example" %}}
The following example uses the NOAA Bay Area weather sample data.
SELECT
location,
selector_last(precip, time)['time'] AS time,
selector_last(precip, time)['value'] AS last_precip
FROM
(SELECT * FROM weather WHERE precip > 0)
GROUP BY
location
location | time | last_precip |
---|---|---|
Concord | 2022-12-31T00:00:00 | 3.04 |
Hayward | 2022-12-31T00:00:00 | 4.34 |
San Francisco | 2022-12-31T00:00:00 | 3.67 |
{{% /expand %}} {{< /expand-wrapper >}}