Documentation

SQL 参考文档

InfluxDB Cloud Serverless 使用 Apache Arrow DataFusion 实现的 SQL。

标识符

标识符是一个标记,它指的是 InfluxDB 数据库对象的名称,例如 测量 或列名 (时间标签键字段键).

引用

标识符上使用双引号,以将其视为区分大小写的。 在字符串字面量上使用单引号。

一般报价指南:

  • 单引号RFC3339和类似RFC3339的时间值。
  • 不要引用 Unix 纪元时间值(转换为时间戳的整数)。
  • 双引号混合大小写,驼峰式命名或区分大小写的标识符。
  • 对包含特殊字符或空格字符的标识符使用双引号。
引用示例
-- Double-quote identifiers that contain whitespace
SELECT "water temperature", "buoy location" FROM buoy

-- Double-quote measurement names with special characters
SELECT * FROM "h2o-temperature"

-- Double-quote identifiers that should be treated as case-sensitive
SELECT "pH" FROM "Water"

注意: 我们建议始终使用双引号括住标识符,无论大小写是否敏感。

未引用的标识符 区分大小写,并且匹配任何具有相同字符的度量、标签键或字段键,尽管大小写不同。 例如,如果您在一个名为 phpH 的度量中有两个字段,则未引用的标识符 pH 将匹配两者。 要以区分大小写的方式查询,请使用双引号标识符。

字面量

字面量是一个未被标识符表示的显式值。

字符串字面量

字符串字面量用单引号括起来。

'santa_monica'
'pH'
'average temperature'

数值字面量

数字字面量是正数或负数,可以是精确数字或浮点数字。

-- Integers
10
+10
-10

-- Unsigned integers
10::BIGINT UNSIGNED
+10::BIGINT UNSIGNED

-- Floats
10.78654
-100.56

日期和时间字面量

支持以下日期和时间文字:

'2022-01-31T06:30:30.123Z'     -- (RFC3339) 
'2022-01-31T06:30:30.123'      -- (RFC3339-like)
'2022-01-31 06:30:30.123'      -- (RFC3339-like)
'2022-01-31 06:30:30'          -- ((RFC3339-like, no fractional seconds) 
1643610630123000000::TIMESTAMP -- (Unix epoch nanosecond cast to a timestamp)

布尔字面量

布尔字面量可以是 TRUEFALSE

持续时间单位

间隔字面量指定一段时间的长度或单位。

INTERVAL '4 minutes'
INTERVAL '12 days 6 hours 30 minutes'

支持以下时间单位:

  • 纳秒
  • 微秒
  • 毫秒
  • 分钟
  • 小时
  • 天数
  • 周数
  • 月份
  • 年份
  • 世纪

运算符

运算符是保留字或字符,它们执行某些操作,包括比较和算术运算。

算术运算符

算术运算符接受两个数值(可以是字面量或变量),并执行计算以返回一个单一的数值。

操作符描述示例结果
+加法2 + 24
-减法4 - 22
*乘法2 * 36
/除法6 / 32
%取模7 % 21

比较运算符

比较运算符评估左操作数和右操作数之间的关系,并返回 TRUEFALSE

操作符含义示例
=等于123 = 123
<>不等于123 <> 456
!=不等于123 != 456
>大于3 > 2
>=大于或等于3 >= 2
<小于1 < 2
<=小于或等于1 <= 2
~匹配正则表达式'abc' ~ 'a.*'
~\*匹配一个正则表达式 (不区分大小写)'Abc' ~\* 'A.*'
!~不匹配正则表达式'abc' !~ 'd.*'
!~\*不匹配正则表达式 (不区分大小写)'Abc' !~\* 'a.*'

逻辑运算符

操作符含义
AND如果两个操作数都为真,则返回真。否则,返回假。
BETWEEN如果左操作数在右操作数的范围内,则返回真。
EXISTS如果操作数不为 null,返回 true。
IN如果左操作数在右操作数列表中,则返回true。
LIKE如果左操作数匹配右操作数模式字符串,则返回true。
NOT否定后续表达式。
OR如果任何操作数为真,返回真。否则,返回假。

位运算符

按位运算符对位模式或二进制数字执行按位操作。

操作符含义示例结果
&按位与5 & 31
|按位或5 | 37
^按位异或5 ^ 36
>>位移运算右移5 >> 30
<<按位左移5 << 340

其他运算符

操作符含义示例结果
||连接字符串'Hello' || ' world'Hello world
AT TIME ZONE应用时区偏移查看示例

关键词

以下保留关键字不能用作标识符。

AND
ALL
ANALYZE
AS
ASC
AT TIME ZONE
BETWEEN
BOTTOM
CASE
DESC
DISTINCT
EXISTS
EXPLAIN
FROM
GROUP BY
HAVING
IN
INNER JOIN
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
EXISTS
NOT IN
OR
ORDER BY
FULL OUTER JOIN
RIGHT JOIN
SELECT
TOP
TYPE
UNION
UNION ALL
WHERE
WITH

条件表达式

条件表达式根据输入值评估条件。 支持以下条件表达式:

表达式描述
CASE允许使用WHEN-THEN-ELSE语句。
COALESCE返回指定列表中的第一个非NULL表达式。
NULLIF如果value1 = value2,则返回NULL值。否则返回value1。

语句和子句

InfluxDB SQL 支持以下基本查询语法:

[ WITH with_query [, ] ]  
SELECT [ ALL | DISTINCT ] select_expr [, ]  
[ FROM from_item [, ] ]  
[ JOIN join_item [, ] ]  
[ WHERE condition ]  
[ GROUP BY grouping_element [, ] ]  
[ HAVING condition]  
[ UNION [ ALL ] ]
[ ORDER BY expression [ ASC | DESC ][, ] ]  
[ LIMIT count ]  

SELECT 语句和 FROM 子句

使用 SQL SELECT 语句从特定的测量或测量中查询数据。FROM 子句总是与 SELECT 语句一起出现。

示例

SELECT * FROM "h2o_feet"

WHERE子句

使用 WHERE 子句根据 fieldstagstimestamps 过滤结果。 使用谓词来评估每一行。 评估为 TRUE 的行将返回到结果集中。 评估为 FALSE 的行将从结果集中省略。

示例

SELECT * FROM "h2o_feet" WHERE "water_level" <= 9
SELECT 
  * 
FROM 
  "h2o_feet" 
WHERE 
  "location" = 'santa_monica' 
  AND "level description" = 'below 3 feet'

JOIN 子句

使用 JOIN 子句来连接来自多个测量(表)的数据。有关连接的更多信息,请参见 JOIN clause。支持以下连接类型:

内部连接

左 [外] 连接

右 [外部] 连接

FULL [OUTER] 连接

按照组聚合的子句

使用 GROUP BY 子句根据指定的列值对查询结果进行分组。 GROUP BY 需要SELECT 语句中使用聚合函数或选择函数。

示例

SELECT 
  MEAN("water_level"), 
  "location" 
FROM 
  "h2o_feet" 
GROUP BY 
  "location"

HAVING 子句

使用 HAVING 子句根据指定条件过滤查询结果。 HAVING 子句必须 之后 紧跟 GROUP BY 子句,但 在前 ORDER BY 子句之前。

示例

SELECT 
  MEAN("water_level"), 
  "location" 
FROM 
  "h2o_feet" 
GROUP BY 
  "location" 
HAVING 
  MEAN("water_level") > 4
ORDER BY
  "location"

UNION子句

UNION 子句将两个或多个 SELECT 语句的结果合并,不返回任何重复行。 UNION ALL 返回所有结果,包括重复项。

示例

SELECT 
  'pH' 
FROM 
  "h2o_pH" 
UNION ALL 
SELECT 
  "location" 
FROM 
  "h2o_quality"

ORDER BY 子句

ORDER BY 子句根据指定的列和顺序对结果进行排序。
根据字段、标签和时间戳对数据进行排序。
支持以下排序:

  • ASC: 升序 (默认)
  • DESC: 降序

示例

SELECT 
  "water_level", 
  "location" 
FROM 
  "h2o_feet" 
ORDER BY 
  "location", 
  "time" DESC

LIMIT 子句

LIMIT 子句限制返回的行数。定义的限制应该是一个非负整数。

示例

SELECT 
  "water_level", 
  "location" 
FROM 
  "h2o_feet" 
LIMIT 
  10

WITH 子句

WITH 子句提供了一种为更大查询编写辅助语句的方法。它可以帮助将大型复杂查询分解为更简单的形式。

WITH summary_data as
(SELECT degrees, location, time 
  FROM average_temperature)
SELECT * FROM summary_data

OVER 子句

OVER 子句用于 SQL 窗口函数。 窗口函数 在一组与当前行以某种方式相关的表行中执行计算。 虽然类似于聚合函数,但窗口函数将结果输出到行中,保持它们各自的独立性。

SELECT 
  time, 
  water_level 
FROM 
  (
    SELECT 
      time, 
      "water_level", 
      row_number() OVER (
        order by 
          water_level desc
      ) as rn 
    FROM 
      h2o_feet
  ) 
WHERE 
  rn <= 3;

评论

使用注释来描述和添加细节或说明到你的查询中。

  • 单行注释使用双破折号 -- 符号。单行注释以换行结束。
  • 多行注释以 /* 开始,以 */ 结束。
-- Single-line comment

/* 
 * Multi-line comment
 */

模式信息

InfluxDB Cloud Serverless 支持以下元数据模式查询:

SHOW tables

SHOW columns FROM <measurement>

函数

以下是按类型列出的支持的函数列表。

聚合函数

聚合函数对列中一组数据值执行计算或运算,并返回单个值。

功能描述
COUNT()返回字段或标签键的行数
AVG()返回列的平均值
SUM()返回列的总和
MEAN()返回列的平均值
MIN()返回所选列的最小值
MAX()返回所选列的最大值

示例


SELECT COUNT("water_level") 
FROM "h2o_feet"

SELECT AVG("water_level"), "location"
FROM "h2o_feet" 
GROUP BY "location"

SELECT SUM("water_level"), "location"
FROM "h2o_feet" 
GROUP BY "location"

选择器函数

选择器函数是InfluxDB特有的。它们的行为类似于聚合函数,因为它们接收一行数据并计算为单个值。然而,选择器的独特之处在于它们除了计算值之外还返回时间值。简而言之,选择器返回一个聚合值以及一个时间戳。

功能描述
SELECTOR_FIRST()返回所选列的第一个值和时间戳。
SELECTOR_LAST()返回所选列和时间戳的最后一个值。
SELECTOR_MIN()返回所选列和时间戳的最小值。
SELECTOR_MAX()返回所选列和时间戳的最大值。

示例

SELECT 
SELECTOR_MAX("pH", time)['value'],
SELECTOR_MAX("pH", time)['time']
FROM "h2o_pH"

SELECT 
SELECTOR_LAST("water_level", time)['value'],
SELECTOR_LAST("water_level", time)['time']
FROM "h2o_feet"
WHERE time >= timestamp '2019-09-10T00:00:00Z' AND time <= timestamp '2019-09-19T00:00:00Z'

日期和时间函数

功能描述
DATE_BIN()将输入的时间戳按指定的时间间隔进行分箱。
DATE_TRUNC()根据指定的日期部分截断时间戳表达式,例如小时、天或月。
DATE_PART()返回日期的指定部分。
NOW()返回当前时间(UTC)。

示例

SELECT DATE_BIN(INTERVAL '1 hour', time, '2019-09-18T00:00:00Z') AS "_time",
SUM(water_level)
FROM "h2o_feet"
GROUP BY "_time"
SELECT DATE_TRUNC('month',time) AS "date",
SUM(water_level)
FROM "h2o_feet"
GROUP BY time

近似函数

功能描述
APPROX_MEDIAN返回输入值的近似中位数。
APPROX_DISTINCT返回不同值的近似计数。仅对字符串实现。
APPROX_PERCENTILE_CONT返回输入值的近似百分位数。
APPROX_PERCENTILE_CONT_WITH_WEIGHT返回加权输入值的近似百分位数。

数学函数

功能描述
ABS()绝对值
ACOS()反余弦
ASIN()反正弦
ATAN()反正切
ATAN2()y/x的反正切
CEIL()返回大于或等于指定数字的最小整数值
COS()余弦
EXP()指数
FLOOR()小于或等于指定数字的最接近整数
LN()自然对数
LOG10()以10为底的对数
LOG2()以2为底的对数
POWER()返回一个数字的幂值
ROUND()四舍五入到最接近的整数
SIGNUM()参数的符号 (-1, 0, +1)
SINE()正弦
SQRT()返回一个数字的平方根
TAN()正切
TRUNC()将数字截断到指定的小数位数

条件函数

功能描述
COALESCE返回第一个非空参数。如果所有参数都是空的,则COALESCE将返回空值。
NULLIF如果value1等于value2,则返回null值,否则返回value1。

正则表达式函数

功能描述
REGEXP_MATCH将正则表达式与字符串进行匹配并返回匹配的子字符串。
REGEXP_REPLACE用新子字符串替换匹配正则表达式的子字符串。


Flux的未来

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

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看:

InfluxDB 云端无服务器