SQL 参考文档
InfluxDB Clustered 使用 Apache Arrow DataFusion 的 SQL 实现。
标识符
标识符是一个令牌,它引用 InfluxDB 数据库对象的名称,例如 measurement(度量) 或列名 (time(时间), tag keys(标签键), 或 field keys(字段键))。
引用
在 标识符 上使用双引号将其视为区分大小写。在字符串字面量上使用单引号。
通用引用指南
- 单引号引用 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"
注意: 我们建议始终双引号引用标识符,无论是否区分大小写。
未加引号的标识符不区分大小写,并且匹配任何具有相同字符的 measurement(度量)、标签键或字段键,无论大小写如何。例如,如果您的 measurement(度量)中有两个名为 ph
和 pH
的字段,则未加引号的标识符 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)
布尔字面量
布尔字面量可以是 TRUE
或 FALSE
。
持续时间单位
间隔字面量指定时间的长度或单位。
INTERVAL '4 minutes'
INTERVAL '12 days 6 hours 30 minutes'
支持以下时间单位
- 纳秒
- 微秒
- 毫秒
- 秒
- 分钟
- 小时
- 天
- 周
- 月
- 年
- 世纪
运算符
运算符是保留字或字符,用于执行某些操作,包括比较和算术。
算术运算符
算术运算符接受两个数值(字面量或变量),并执行返回单个数值的计算。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
+ | 加法 | 2 + 2 | 4 |
- | 减法 | 4 - 2 | 2 |
* | 乘法 | 2 * 3 | 6 |
/ | 除法 | 6 / 3 | 2 |
% | 取模 | 7 % 2 | 1 |
比较运算符
比较运算符评估左操作数和右操作数之间的关系,并返回 TRUE
或 FALSE
。
运算符 | 含义 | 示例 |
---|---|---|
= | 等于 | 123 = 123 |
<> | 不等于 | 123 <> 456 |
!= | 不等于 | 123 != 456 |
> | 大于 | 3 > 2 |
>= | 大于或等于 | 3 >= 2 |
< | 小于 | 1 < 2 |
<= | 小于或等于 | 1 <= 2 |
~ | 匹配正则表达式 | 'abc' ~ 'a.*' |
~\* | 匹配正则表达式(不区分大小写) | 'Abc' ~\* 'A.*' |
!~ | 不匹配正则表达式 | 'abc' !~ 'd.*' |
!~\* | 不匹配正则表达式(不区分大小写) | 'Abc' !~\* 'a.*' |
逻辑运算符
运算符 | 含义 |
---|---|
AND | 如果两个操作数都为 true,则返回 true。否则,返回 false。 |
BETWEEN | 如果左操作数在右操作数的范围内,则返回 true。 |
EXISTS | 如果操作数不为 null,则返回 true。 |
IN | 如果左操作数在右操作数列表中,则返回 true。 |
LIKE | 如果左操作数与右操作数模式字符串匹配,则返回 true。 |
NOT | 否定后续表达式。 |
OR | 如果任何操作数为 true,则返回 true。否则,返回 false。 |
位运算符
位运算符对位模式或二进制数字执行位运算。
运算符 | 含义 | 示例 | 结果 |
---|---|---|---|
& | 按位与 | 5 & 3 | 1 |
| | 按位或 | 5 | 3 | 7 |
^ | 按位异或 | 5 ^ 3 | 6 |
>> | 按位右移 | 5 >> 3 | 0 |
<< | 按位左移 | 5 << 3 | 40 |
其他运算符
运算符 | 含义 | 示例 | 结果 |
---|---|---|---|
|| | 连接字符串 | '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
语句从特定的 measurement(度量)或多个 measurement(度量)查询数据。FROM
子句始终伴随 SELECT
语句。
示例
SELECT * FROM "h2o_feet"
WHERE 子句
使用 WHERE
子句根据 fields(字段)
、tags(标签)
和 timestamps(时间戳)
筛选结果。使用谓词来评估每一行。评估结果为 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
子句连接来自多个 measurement(表)的数据。有关连接的更多信息,请参阅 JOIN 子句。支持以下连接类型
GROUP BY 子句
使用 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 Clustered 支持以下元数据模式查询
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 | 返回第一个非 null 参数。如果所有参数都为 null,则 COALESCE 将返回 null。 |
NULLIF | 如果 value1 等于 value2,则返回 null 值,否则返回 value1。 |
正则表达式函数
函数 | 描述 |
---|---|
REGEXP_MATCH | 将正则表达式与字符串匹配,并返回匹配的子字符串。 |
REGEXP_REPLACE | 用新的子字符串替换与正则表达式匹配的子字符串。 |
此页是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB Clustered 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度合同或支持合同的客户 可以联系 InfluxData 支持。