InfluxDB 3 Core SQL 实现支持以下杂项函数,用于执行各种操作。
arrow_cast
将值转换为指定的 Arrow 数据类型。
arrow_cast(expression, datatype)
参数
- expression:要转换的表达式。可以是常量、列或函数,以及任何算术或字符串运算符的组合。
- datatype:要转换为的 Arrow 数据类型。
查看 arrow_cast 查询示例
以下示例使用了 InfluxDB 入门教程 中提供的示例数据集。
SELECT
arrow_cast(time, 'Int64') AS time,
arrow_cast(temp, 'Utf8') AS temp,
arrow_cast(co, 'Float64')AS co
FROM home
LIMIT 1
| time | temp | co |
|---|
| 1641024000000000000 | 21.0 | 0 |
arrow_typeof
返回表达式的底层 Arrow 数据类型。
参数
- expression:要评估的表达式。可以是常量、列或函数,以及任何算术或字符串运算符的组合。
查看 arrow_typeof 查询示例
以下示例使用了 InfluxDB 入门教程 中提供的示例数据集。
SELECT
arrow_typeof(time) AS time,
arrow_typeof(room) AS room,
arrow_typeof(temp) AS temp,
arrow_typeof(co) AS co
FROM home
LIMIT 1
| time | room | temp | co |
|---|
| Timestamp(Nanosecond, None) | Dictionary(Int32, Utf8) | Float64 | Int64 |
get_field
返回指定键的 map 或 struct 中的字段。
通常,get_field 会通过字段访问语法(如 my_struct['field_name'])间接调用,该语法会生成调用:get_field(my_struct, 'field_name')。
get_field(collection, field)
参数
- collection:从中检索字段的 map 或 struct。
- field:要从 map 或 struct 中检索的字段的名称。必须计算为字符串。
查看具有 struct 列的 get_field 示例
SELECT
get_field(influxdb_struct, 'version') AS influxdb_version
FROM
(VALUES (struct('influxdb' AS product, 'v1' AS version)),
(struct('influxdb' AS product, 'v2' AS version)),
(struct('influxdb' AS product, 'v3' AS version))
) AS data(influxdb_struct)
查看具有 map 列的 get_field 示例
SELECT
get_field(influxdb_map, 'version') AS influxdb_version
FROM
(VALUES (map {'product': 'influxdb', 'version': 'v1'}),
(map {'product': 'influxdb', 'version': 'v2'}),
(map {'product': 'influxdb', 'version': 'v3'})
) AS data(influxdb_map)
interpolate
通过插值现有值来填充指定聚合列中的 null 值。必须与 date_bin_gapfill 一起使用。
interpolate(aggregate_expression)
参数
- aggregate_expression:对指定表达式的聚合操作。该操作可以使用任何 聚合函数。表达式可以是常量、列或函数,以及聚合函数支持的任何算术运算符的组合。
date_bin_gapfill,locf
查看 interpolate 查询示例
以下示例使用了 InfluxDB 入门教程 中提供的示例数据集。
SELECT
date_bin_gapfill(INTERVAL '30 minutes', time) as _time,
room,
interpolate(avg(temp))
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T10:00:00Z'
GROUP BY _time, room
| _time | room | AVG(home.temp) |
|---|
| 2022-01-01T08:00:00Z | 厨房 | 21 |
| 2022-01-01T08:30:00Z | 厨房 | 22 |
| 2022-01-01T09:00:00Z | 厨房 | 23 |
| 2022-01-01T09:30:00Z | 厨房 | 22.85 |
| 2022-01-01T10:00:00Z | 厨房 | 22.7 |
| 2022-01-01T08:00:00Z | 客厅 | 21.1 |
| 2022-01-01T08:30:00Z | 客厅 | 21.25 |
| 2022-01-01T09:00:00Z | 客厅 | 21.4 |
| 2022-01-01T09:30:00Z | 客厅 | 21.6 |
| 2022-01-01T10:00:00Z | 客厅 | 21.8 |
locf
通过向前填充最后一个观测值来填充指定聚合列中的 null 值。必须与 date_bin_gapfill 一起使用。
LOCF 是“Last Observation Carried Forward”(最后一个观测值向前填充)的首字母缩写。
locf(aggregate_expression)
参数
- aggregate_expression:对指定表达式的聚合操作。该操作可以使用任何 聚合函数。表达式可以是常量、列或函数,以及聚合函数支持的任何算术运算符的组合。
date_bin_gapfill,interpolate
查看 locf 查询示例
以下示例使用了 InfluxDB 入门教程 中提供的示例数据集。
SELECT
date_bin_gapfill(INTERVAL '30 minutes', time) as _time,
room,
locf(avg(temp))
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T10:00:00Z'
GROUP BY _time, room
| _time | room | AVG(home.temp) |
|---|
| 2022-01-01T08:00:00Z | 厨房 | 21 |
| 2022-01-01T08:30:00Z | 厨房 | 21 |
| 2022-01-01T09:00:00Z | 厨房 | 23 |
| 2022-01-01T09:30:00Z | 厨房 | 23 |
| 2022-01-01T10:00:00Z | 厨房 | 22.7 |
| 2022-01-01T08:00:00Z | 客厅 | 21.1 |
| 2022-01-01T08:30:00Z | 客厅 | 21.1 |
| 2022-01-01T09:00:00Z | 客厅 | 21.4 |
| 2022-01-01T09:30:00Z | 客厅 | 21.4 |
| 2022-01-01T10:00:00Z | 客厅 | 21.8 |
version
返回查询引擎使用的 DataFusion 的版本。
version() 函数返回 DataFusion 查询引擎的版本,而不是 InfluxDB 产品版本。要确定您的 InfluxDB 版本,请参阅 确定版本。
查看 version 查询示例
| version() |
|---|
| Apache DataFusion 49.0.2, aarch64 on linux |
输出包括 DataFusion 版本、CPU 架构和操作系统。
支持和反馈
感谢您成为我们社区的一员!我们欢迎并鼓励您对 InfluxDB 3 Core 和本文档提供反馈和错误报告。要获得支持,请使用以下资源
具有年度合同或支持合同的客户可以 联系 InfluxData 支持。