文档文档

执行基本 InfluxQL 查询

InfluxQL (Influx 查询语言) 是一种类似 SQL 的查询语言,用于与 InfluxDB 交互并处理时间序列数据。

InfluxDB v1 到 InfluxDB 3 数据模型

InfluxQL 是围绕 InfluxDB v1 数据模型设计的,但仍可用于查询 InfluxDB 3 Core 中的数据。当使用 InfluxDB 3 Core InfluxQL 实现时,数据模型在以下方面有所不同

  • InfluxDB v1 的数据库和保留策略组合被合并为一个 InfluxDB 3 数据库实体。
  • InfluxDB v1 的 measurement 相当于 InfluxDB 3 的 table

从 InfluxDB 查询数据的基本 InfluxQL 查询最常见的包含以下子句

* 必需
  • * SELECT:指定要从返回的字段、标签和计算,或使用通配符别名 (*) 选择表中的所有字段和标签。它至少需要一个字段键或通配符别名 (*)。有关更多信息,请参阅SELECT 语句的显著行为
  • * FROM:指定要从中查询的。它需要一个或多个逗号分隔的measurement 表达式
  • WHERE:根据字段值标签值时间戳过滤数据。仅返回满足指定条件的数据——例如,在时间范围内、包含特定标签值或包含指定范围之外的字段值。
SELECT
  temp,
  hum,
  room
FROM home
WHERE
  time >= '2022-01-01T08:00:00Z'
  AND time <= '2022-01-01T20:00:00Z'

结果集

如果至少有一行满足查询,InfluxDB 3 Core 将在查询结果集中返回行数据。如果查询使用 GROUP BY 子句,则结果集包括以下内容

  • 查询的 SELECT 子句中列出的列
  • 一个 time 列,其中包含记录或组的时间戳
  • 一个 iox::measurement 列,其中包含记录的名称
  • 查询的 GROUP BY 子句中列出的列;结果集中的每一行都包含用于分组的值

GROUP BY 结果列

如果查询使用 GROUP BY 并且 WHERE 子句没有按时间过滤,则分组基于默认时间范围

基本查询示例

示例数据

以下示例使用家庭传感器数据。要运行示例查询并返回结果,请在运行示例查询之前,将示例数据写入到您的 InfluxDB 3 Core 数据库。

查询时间边界内的数据

  • 使用 SELECT 子句指定要返回的标签和字段。至少指定一个字段键。要返回所有标签和字段,请使用通配符别名 (*)。
  • FROM 子句中指定要查询的
  • WHERE 子句中指定时间边界。包含基于时间的谓词,将 time 列的值与时间戳进行比较。使用 AND 逻辑运算符将多个谓词链接在一起。
SELECT *
FROM home
WHERE
  time >= '2022-01-01T08:00:00Z'
  AND time <= '2022-01-01T12:00:00Z'

查询时间边界可以是相对的或绝对的。

使用相对时间边界查询

使用绝对时间边界查询

查询没有时间边界的数据

要查询没有时间边界的数据,请不要在 WHERE 子句中包含任何基于时间的谓词。如果未在 WHERE 子句中定义时间范围,则默认时间范围为 Unix 纪元 (1970-01-01T00:00:00Z) 到现在

没有时间范围地查询数据可能会返回超出预期的数据量。查询可能需要很长时间才能完成,并且结果可能会被截断。

SELECT * FROM home

查询特定字段和标签

要查询特定字段,请将它们包含在 SELECT 子句中。如果要查询多个字段或标签,请用逗号分隔每个字段或标签。如果字段或标签键包含特殊字符或空格,或者区分大小写,请用双引号将键括起来。

SELECT time, room, temp, hum FROM home

根据标签值查询字段

  • SELECT 子句中,包含您要查询的字段和您要基于其设置条件的标签。
  • WHERE 子句中,包含将标签标识符与字符串字面量进行比较的谓词。使用逻辑运算符将多个谓词链接在一起并应用多个条件。
SELECT * FROM home WHERE room = 'Kitchen'

根据字段值查询点

  • SELECT 子句中,包含您要查询的字段。
  • WHERE 子句中,包含将字段标识符与值或表达式进行比较的谓词。使用逻辑运算符 (AND, OR) 将多个谓词链接在一起并应用多个条件。
SELECT co, time FROM home WHERE co >= 10 OR co <= -10

为查询的字段和标签设置别名

要为您查询的字段和标签设置别名或重命名,请使用 AS 子句。在要设置别名的标签、字段或表达式之后,传递 AS,后跟别名名称作为标识符(如果别名包含空格或特殊字符,则用双引号 (") 括起来)——例如

SELECT temp AS temperature, hum AS "humidity (%)" FROM home

当在 InfluxQL 中为列设置别名时,使用 AS 子句和一个标识符。当SQL 中为列设置别名时,您可以使用 AS 子句来定义别名,但这不是必需的。


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在一样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时的数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、只读副本、增强的安全性以及数据压缩功能,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看