SQL 窗口函数
窗口函数允许您计算运行总计、移动平均或其他类似聚合的结果,而无需将行折叠成组。它们在其计算范围内对行的“窗口”执行计算,您可以以各种方式对其进行分区和排序,并为集合中的每一行返回一个计算值。
与非窗口聚合函数(将每个组组合成单行)不同,窗口函数保留每一行的标识,并为分区中的每一行计算一个附加值。
例如,以下查询使用家庭传感器示例数据,并返回每个温度读数,以及查询时间范围内每个房间的平均温度
SELECT
time,
room,
temp,
avg(temp) OVER (PARTITION BY room) AS avg_room_temp
FROM
home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T09:00:00Z'
ORDER BY
room,
time
时间 | 房间 | 温度 | 房间平均温度 |
---|
2022-01-01T08:00:00 | 厨房 | 21.0 | 22.0 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 22.0 |
2022-01-01T08:00:00 | 客厅 | 21.1 | 21.25 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 21.25 |
窗口框架
由于窗口函数对行进行操作,因此在行的分区中有一组行,窗口函数使用该组行来执行操作。这组行称为窗口帧。窗口帧边界可以使用相对于当前行的 RANGE
、ROW
或 GROUPS
帧单位来定义 - 例如
SELECT
time,
temp,
avg(temp) OVER (
ORDER BY time
RANGE INTERVAL '3 hours' PRECEDING
) AS 3h_moving_avg
FROM home
WHERE room = 'Kitchen'
SELECT
time,
temp,
avg(temp) OVER (
ROWS 3 PRECEDING
) AS moving_avg
FROM home
WHERE room = 'Kitchen'
SELECT
time,
room,
temp,
avg(temp) OVER (
ORDER BY room
GROUPS 1 PRECEDING
) AS moving_avg
FROM home
有关窗口帧如何工作的更多信息,请参阅 frame 子句。
如果您未指定窗口帧,则窗口函数将使用当前分区中的所有行来执行其操作。
function([expr])
OVER(
[PARTITION BY expr[, …]]
[ORDER BY expr [ ASC | DESC ][, …]]
[ frame_clause ]
)
OVER 子句
窗口函数使用直接跟随窗口函数的 OVER
子句
名称和参数。
OVER
子句在语法上区分窗口
函数与非窗口函数或聚合函数,并定义如何对行进行分组和排序以进行窗口操作。
PARTITION BY 子句
OVER
子句中的 PARTITION BY
子句将行划分为组或分区,这些组或分区共享 PARTITION BY
表达式的相同值。窗口函数对与当前行位于同一分区中的所有行进行操作。
ORDER BY 子句
OVER
子句内的 ORDER BY
子句控制窗口函数处理每个分区中行的顺序。当窗口子句包含 ORDER BY
子句时,窗口帧边界可以是显式的或隐式的,从而限制窗口帧大小在相对于当前行的两个方向上。
OVER
子句中的 ORDER BY
子句确定每个分区中行的处理顺序,并且与查询的 ORDER BY
子句分开。
Frame 子句
frame 子句定义窗口帧边界,可以是以下之一
{ RANGE | ROWS | GROUPS } frame_start
{ RANGE | ROWS | GROUPS } BETWEEN frame_start AND frame_end
Frame 单位
定义窗口帧时,可以使用以下帧单位之一
RANGE
使用在 ORDER BY
子句中指定的列的值,在相对于当前行值的value范围内定义帧边界。
使用 RANGE
帧单位时,必须包含一个带有仅一列的 ORDER BY
子句。
偏移量是当前行值与周围行值之间的差值。RANGE
支持以下偏移量类型
查看 RANGE
帧单位如何使用数值偏移量
要将数值偏移量与 RANGE
帧单位一起使用,您必须按数值类型列对分区进行排序。
... OVER (
ORDER BY wind_direction
RANGE BETWEEN 45 PRECEDING AND 45 FOLLOWING
)
窗口帧包括排序的列值在当前行值以下 45 和以上 45 之间的行
时间 | 城市 | 风向 |
---|
2025-02-17T13:00:00 | 罗马 | 33 |
2025-02-17T08:00:00 | 罗马 | 34 |
2025-02-17T23:00:00 | 罗马 | 49 |
2025-02-17T17:00:00 | 罗马 | 86 |
2025-02-17T11:00:00 | 罗马 | 93 |
2025-02-17T12:00:00 | 罗马 | 115 |
2025-02-17T10:00:00 | 罗马 | 156 |
查看 RANGE
帧单位如何使用间隔偏移量
要将间隔偏移量与 RANGE
帧单位一起使用,您必须按 time
或时间戳类型列对分区进行排序。
... OVER (
ORDER BY time
RANGE BETWEEN
INTERVAL '3 hours' PRECEDING
AND INTERVAL '1 hour' FOLLOWING
)
窗口帧包括时间戳在当前行时间戳之前三小时和之后一小时之间的行
时间 | 房间 | 温度 |
---|
2022-01-01T08:00:00 | 厨房 | 21.0 |
2022-01-01T09:00:00 | 厨房 | 23.0 |
2022-01-01T10:00:00 | 厨房 | 22.7 |
2022-01-01T11:00:00 | 厨房 | 22.4 |
2022-01-01T12:00:00 | 厨房 | 22.5 |
2022-01-01T13:00:00 | 厨房 | 22.8 |
2022-01-01T14:00:00 | 厨房 | 22.8 |
2022-01-01T15:00:00 | 厨房 | 22.7 |
ROWS
使用相对于当前行的行位置定义窗口帧边界。偏移量是与当前行的行位置的差值。ROWS
支持以下偏移量类型
查看 ROWS
帧单位如何工作
使用 ROWS
帧单位时,相对于当前行的行位置确定帧边界 - 例如
... OVER (
ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING
)
窗口帧包括当前行之前的两行和之后的一行
时间 | 城市 | 风向 |
---|
2025-02-17T08:00:00 | 罗马 | 34 |
2025-02-17T10:00:00 | 罗马 | 156 |
2025-02-17T11:00:00 | 罗马 | 93 |
2025-02-17T12:00:00 | 罗马 | 115 |
2025-02-17T13:00:00 | 罗马 | 33 |
2025-02-17T17:00:00 | 罗马 | 86 |
2025-02-17T23:00:00 | 罗马 | 49 |
GROUPS
使用行组定义窗口帧边界。对于 ORDER BY
子句中的列具有相同值的行,组成一个行组。
使用 GROUPS
帧单位时,请包含 ORDER BY
子句。
偏移量是相对于当前行组的行组位置的差值。GROUPS
支持以下偏移量类型
查看 GROUPS
帧单位如何工作
使用 GROUPS
帧单位时,ORDER BY
子句中指定的唯一组合列值确定每个行组。例如,如果您按 country
和 city
对分区进行排序
... OVER (
ORDER BY country, city
GROUPS ...
)
查询以以下方式定义行组
时间 | 国家/地区 | 城市 | 风向 |
---|
2025-02-17T00:00:00 | 法国 | 斯特拉斯堡 | 181 |
2025-02-17T01:00:00 | 法国 | 斯特拉斯堡 | 228 |
2025-02-17T02:00:00 | 法国 | 斯特拉斯堡 | 289 |
2025-02-17T00:00:00 | 法国 | 图卢兹 | 24 |
2025-02-17T01:00:00 | 法国 | 图卢兹 | 210 |
2025-02-17T02:00:00 | 法国 | 图卢兹 | 206 |
2025-02-17T00:00:00 | 意大利 | 巴里 | 2 |
2025-02-17T01:00:00 | 意大利 | 巴里 | 57 |
2025-02-17T00:00:00 | 意大利 | 博洛尼亚 | 351 |
2025-02-17T01:00:00 | 意大利 | 博洛尼亚 | 232 |
2025-02-17T02:00:00 | 意大利 | 博洛尼亚 | 29 |
然后,您可以使用组偏移量来确定帧边界
... OVER (
ORDER BY country, city
GROUPS 2 PRECEDING
)
窗口函数使用当前行组和前两个行组中的所有行来执行操作
时间 | 国家/地区 | 城市 | 风向 |
---|
2025-02-17T00:00:00 | 法国 | 斯特拉斯堡 | 181 |
2025-02-17T01:00:00 | 法国 | 斯特拉斯堡 | 228 |
2025-02-17T02:00:00 | 法国 | 斯特拉斯堡 | 289 |
2025-02-17T00:00:00 | 法国 | 图卢兹 | 24 |
2025-02-17T01:00:00 | 法国 | 图卢兹 | 210 |
2025-02-17T02:00:00 | 法国 | 图卢兹 | 206 |
2025-02-17T00:00:00 | 意大利 | 巴里 | 2 |
2025-02-17T01:00:00 | 意大利 | 巴里 | 57 |
2025-02-17T00:00:00 | 意大利 | 博洛尼亚 | 351 |
2025-02-17T01:00:00 | 意大利 | 博洛尼亚 | 232 |
2025-02-17T02:00:00 | 意大利 | 博洛尼亚 | 29 |
Frame 边界
帧边界(frame_start 和 frame_end)定义窗口函数在其上运行的每个帧的边界。
UNBOUNDED PRECEDING
从分区的首行开始,到当前行结束。
offset PRECEDING
从当前行之前的 offset
帧单位开始,到当前行结束。例如,3 PRECEDING
包括当前行之前的 3 行。
CURRENT ROW
用作边界时,在当前行开始和结束。
offset FOLLOWING
从当前行开始,到当前行之后的 offset
帧单位结束。例如,3 FOLLOWING
包括当前行之后的 3 行。
UNBOUNDED FOLLOWING
从当前行开始,到分区的最后一行结束。
offset FOLLOWING
使用指定的 帧单位 偏移量在当前行之后作为帧边界。
UNBOUNDED FOLLOWING
使用当前行到当前分区末尾的帧边界。
WINDOW 子句
使用 WINDOW
子句为窗口规范定义可重用的别名。当查询中的多个窗口函数共享相同的窗口定义时,这非常有用。
无需为每个函数重复相同的 OVER 子句,只需定义一次窗口并通过别名引用它 - 例如
SELECT
sum(net_gain) OVER w,
avg(net_net) OVER w
FROM
finance
WINDOW w AS ( PARTITION BY ticker ORDER BY time DESC);
聚合函数
所有 聚合函数 都可以用作窗口函数。
排名函数
cume_dist
返回组中值的累积分布。返回的值大于 0 且小于或等于 1,并表示值在值集中的相对排名。ORDER BY
子句在 OVER
子句中用于正确计算当前行值的累积分布。
查看 cume_dist
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
cume_dist() OVER (
PARTITION BY room
ORDER BY temp
) AS cume_dist
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T12:00:00Z'
时间 | 房间 | 温度 | cume_dist |
---|
2022-01-01T08:00:00 | 客厅 | 21.1 | 0.25 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 0.5 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 0.75 |
2022-01-01T11:00:00 | 客厅 | 22.2 | 1.0 |
2022-01-01T08:00:00 | 厨房 | 21.0 | 0.25 |
2022-01-01T11:00:00 | 厨房 | 22.4 | 0.5 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 0.75 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 1.0 |
dense_rank
返回当前行在其分区中的排名。排名是连续的;为重复值分配相同的排名编号,并且排名序列继续使用下一个不同的值(与 rank()
不同)。
ORDER BY
子句在 OVER
子句中确定排名顺序。
查看 dense_rank
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
dense_rank() OVER (
PARTITION BY room
ORDER BY temp
) AS dense_rank
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T12:00:00Z'
时间 | 房间 | 温度 | dense_rank |
---|
2022-01-01T08:00:00 | 厨房 | 21.0 | 1 |
2022-01-01T11:00:00 | 厨房 | 22.4 | 2 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 3 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 4 |
2022-01-01T08:00:00 | 客厅 | 21.1 | 1 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 2 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 3 |
2022-01-01T11:00:00 | 客厅 | 22.2 | 4 |
比较 dense_rank
、rank
和 row_number
函数
考虑一个具有重复 ID 值的表。以下查询显示了每个排名函数如何处理重复值
SELECT
id,
rank() OVER(ORDER BY id),
dense_rank() OVER(ORDER BY id),
row_number() OVER(ORDER BY id)
FROM my_table;
ID | rank | dense_rank | row_number |
---|
1 | 1 | 1 | 1 |
1 | 1 | 1 | 2 |
1 | 1 | 1 | 3 |
2 | 4 | 2 | 4 |
主要区别
ntile
将有序分区中的行分配到指定数量的组中。每个组都编号,从一开始。对于每一行,ntile
返回该行所属的组号。组号范围从 1 到 expression
值,尽可能均匀地划分分区。ORDER BY
子句在 OVER
子句中确定排名顺序。
参数
- expression:整数。要将分区拆分成的组数。
查看 ntile
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
temp,
ntile(4) OVER (
ORDER BY time
) AS ntile
FROM home
WHERE
room = 'Kitchen'
AND time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T15:00:00Z'
时间 | 温度 | ntile |
---|
2022-01-01T08:00:00 | 21.0 | 1 |
2022-01-01T09:00:00 | 23.0 | 1 |
2022-01-01T10:00:00 | 22.7 | 2 |
2022-01-01T11:00:00 | 22.4 | 2 |
2022-01-01T12:00:00 | 22.5 | 3 |
2022-01-01T13:00:00 | 22.8 | 3 |
2022-01-01T14:00:00 | 22.8 | 4 |
percent_rank
返回当前行在其分区中的百分比排名。返回的值介于 0
和 1
之间,计算方式为
(rank - 1) / (total_rows - 1)
ORDER BY
子句在 OVER
子句中确定排名顺序。
查看 percent_rank
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
percent_rank() OVER (
PARTITION BY room
ORDER BY temp
) AS percent_rank
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T11:00:00Z'
时间 | 房间 | 温度 | percent_rank |
---|
2022-01-01T08:00:00 | 厨房 | 21.0 | 0.0 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 0.5 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 1.0 |
2022-01-01T08:00:00 | 客厅 | 21.1 | 0.0 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 0.5 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 1.0 |
rank
返回当前行在其分区中的排名。对于重复值,rank
为它们分配相同的排名编号,跳过后续排名(与 dense_rank()
不同),然后继续使用下一个不同的值进行排名。
ORDER BY
子句在 OVER
子句中确定排名顺序。
查看 rank
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
rank() OVER (
PARTITION BY room
ORDER BY temp
) AS rank
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T11:00:00Z'
时间 | 房间 | 温度 | rank |
---|
2022-01-01T08:00:00 | 客厅 | 21.1 | 1 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 2 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 3 |
2022-01-01T08:00:00 | 厨房 | 21.0 | 1 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 2 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 3 |
比较 dense_rank
、rank
和 row_number
函数
考虑一个具有重复 ID 值的表。以下查询显示了每个排名函数如何处理重复值
SELECT
id,
rank() OVER(ORDER BY id),
dense_rank() OVER(ORDER BY id),
row_number() OVER(ORDER BY id)
FROM my_table;
ID | rank | dense_rank | row_number |
---|
1 | 1 | 1 | 1 |
1 | 1 | 1 | 2 |
1 | 1 | 1 | 3 |
2 | 4 | 2 | 4 |
主要区别
row_number
返回当前行在其分区中的位置,从 1 开始计数。ORDER BY
子句在 OVER
子句中确定行顺序。
查看 row_number
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
row_number() OVER (
PARTITION BY room
ORDER BY temp
) AS row_number
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T11:00:00Z'
时间 | 房间 | 温度 | row_number |
---|
2022-01-01T08:00:00 | 客厅 | 21.1 | 1 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 2 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 3 |
2022-01-01T08:00:00 | 厨房 | 21.0 | 1 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 2 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 3 |
比较 dense_rank
、rank
和 row_number
函数
考虑一个具有重复 ID 值的表。以下查询显示了每个排名函数如何处理重复值
SELECT
id,
rank() OVER(ORDER BY id),
dense_rank() OVER(ORDER BY id),
row_number() OVER(ORDER BY id)
FROM my_table;
ID | rank | dense_rank | row_number |
---|
1 | 1 | 1 | 1 |
1 | 1 | 1 | 2 |
1 | 1 | 1 | 3 |
2 | 4 | 2 | 4 |
主要区别
分析函数
first_value
从窗口帧的第一行返回值。
参数
- expression:要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
last_value
查看 first_value
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
first_value(temp) OVER (
PARTITION BY room
ORDER BY time
) AS first_value
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T11:00:00Z'
ORDER BY room, time
时间 | 房间 | 温度 | first_value |
---|
2022-01-01T08:00:00 | 厨房 | 21.0 | 21.0 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 21.0 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 21.0 |
2022-01-01T08:00:00 | 客厅 | 21.1 | 21.1 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 21.1 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 21.1 |
lag
从分区中当前行之前指定偏移量的行返回值。如果偏移行在分区之外,则函数返回指定的默认值。
lag(expression, offset, default)
参数
- expression:要操作的表达式。可以是常量、列或函数,以及算术或字符串运算符的任意组合。
- offset:从当前行之前多少行检索 expression 的值。默认值为
1
。 - default:如果偏移量在分区中,则返回的默认值。必须与 expression 的类型相同。
lead
查看 lag
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
lag(temp, 1, 0) OVER (
PARTITION BY room
ORDER BY time
) AS previous_value
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T11:00:00Z'
ORDER BY room, time
时间 | 房间 | 温度 | previous_value |
---|
2022-01-01T08:00:00 | 厨房 | 21.0 | 0.0 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 21.0 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 23.0 |
2022-01-01T08:00:00 | 客厅 | 21.1 | 0.0 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 21.1 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 21.4 |
last_value
从窗口帧的最后一行返回值。
参数
- expression:要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
first_value
查看 last_value
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
last_value(temp) OVER (
PARTITION BY room
ORDER BY time
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) AS last_value
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T11:00:00Z'
ORDER BY room, time
时间 | 房间 | 温度 | last_value |
---|
2022-01-01T08:00:00 | 厨房 | 21.0 | 22.7 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 22.7 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 22.7 |
2022-01-01T08:00:00 | 客厅 | 21.1 | 21.8 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 21.8 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 21.8 |
lead
从分区中当前行之后指定偏移量的行返回值。如果偏移行在分区之外,则函数返回指定的默认值。
lead(expression, offset, default)
参数
- expression:要操作的表达式。可以是常量、列或函数,以及算术或字符串运算符的任意组合。
- offset:从当前行之前多少行检索 expression 的值。默认值为
1
。 - default:如果偏移量在分区中,则返回的默认值。必须与 expression 的类型相同。
lag
查看 lead
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
lead(temp, 1, 0) OVER (
PARTITION BY room
ORDER BY time
) AS next_value
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time < '2022-01-01T11:00:00Z'
ORDER BY room, time
时间 | 房间 | 温度 | next_value |
---|
2022-01-01T08:00:00 | 厨房 | 21.0 | 23.0 |
2022-01-01T09:00:00 | 厨房 | 23.0 | 22.7 |
2022-01-01T10:00:00 | 厨房 | 22.7 | 0.0 |
2022-01-01T08:00:00 | 客厅 | 21.1 | 21.4 |
2022-01-01T09:00:00 | 客厅 | 21.4 | 21.8 |
2022-01-01T10:00:00 | 客厅 | 21.8 | 0.0 |
nth_value
从窗口帧的第 n 行返回值(从 1 开始计数)。如果第 n 行不存在,则函数返回 null。
参数
- expression:要操作的表达式。可以是常量、列或函数,以及算术或字符串运算符的任意组合。
- n:指定要引用的当前帧和分区中的行号。
查看 lead
查询示例
以下示例使用家庭传感器示例数据。
SELECT
time,
room,
temp,
nth_value(temp, 2) OVER (
PARTITION BY room
) AS "2nd_temp"
FROM home
WHERE
time >= '2025-02-10T08:00:00Z'
AND time < '2025-02-10T11:00:00Z'
时间 | 房间 | 温度 | 2nd_temp |
---|
2025-02-10T08:00:00 | 厨房 | 21.0 | 22.7 |
2025-02-10T10:00:00 | 厨房 | 22.7 | 22.7 |
2025-02-10T09:00:00 | 厨房 | 23.0 | 22.7 |
2025-02-10T08:00:00 | 客厅 | 21.1 | 21.8 |
2025-02-10T10:00:00 | 客厅 | 21.8 | 21.8 |
2025-02-10T09:00:00 | 客厅 | 21.4 | 21.8 |
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 3 Core 和本文档的反馈和错误报告。要查找支持,请使用以下资源
拥有年度合同或支持合同的客户可以联系 InfluxData 支持。