跳到主要内容
跳到主要内容

时间序列函数

以下函数旨在与 timeSeries*() 聚合函数一起使用,例如 timeSeriesInstantRateToGrid, timeSeriesLastToGrid 等。

timeSeriesRange

生成时间戳范围。

语法

timeSeriesRange(start_timestamp, end_timestamp, step)

参数

  • start_timestamp - 范围的开始。
  • end_timestamp - 范围的结束。
  • step - 范围的步长,以秒为单位。

返回值

  • 返回时间戳范围 [start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]

示例

查询:

SELECT timeSeriesRange('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:00'::DateTime64(3), 30) AS rng;

结果:

┌────────────────────────────────────result─────────────────────────────────────────┐
│ ['2025-06-01 00:00:00.000', '2025-06-01 00:00:30.000', '2025-06-01 00:01:00.000'] │
└───────────────────────────────────────────────────────────────────────────────────┘

注意

  • 如果函数 timeSeriesRange()start_timestamp 等于 end_timestamp,则返回包含该时间戳的 1 元素数组:[start_timestamp]
  • 函数 timeSeriesRange() 与函数 range 类似。 例如,如果时间戳类型为 DateTime64(3)start_timestamp < end_timestamp,那么 timeSeriesRange(start_timestamp, end_timestamp, step) 返回的结果与以下表达式相同:
range(start_timestamp::Int64, end_timestamp::Int64 + 1, step::Int64)::Array(DateTime64(3))

timeSeriesFromGrid

将值数组 [value1, value2, value3, ..., valueN] 转换为元组数组 [(start_timestamp, value1), (start_timestamp + step, value2), (start_timestamp + 2 * step, value3), ..., (end_timestamp, valueN)]

如果某些值 [value1, value2, value3, ...]NULL,则该函数不会将这些空值复制到结果数组中, 但仍会增加当前时间戳,即例如对于 [value1, NULL, value2],函数将返回 [(start_timestamp, value1), (start_timestamp + 2 * step, value2)]

当前时间戳会按步长增加,直到它大于 end_timestamp,每个时间戳将与指定值数组中的值结合。如果值的数量与时间戳的数量不匹配,函数将抛出异常。

语法

timeSeriesFromGrid(start_timestamp, end_timestamp, step, values);

参数

  • start_timestamp - 网格的开始。
  • end_timestamp - 网格的结束。
  • step - 网格的步长,以秒为单位。
  • values - 值数组 [value1, value2, ..., valueN]

返回值

  • 返回源值数组中的值与由 start_timestampstep 描述的规则时间网格相结合的时间戳。

示例

查询:

SELECT timeSeriesFromGrid('2025-06-01 00:00:00'::DateTime64(3), '2025-06-01 00:01:30.000'::DateTime64(3), 30, [10, 20, NULL, 30]) AS result;

结果:

┌─────────────────────────────────────────────result─────────────────────────────────────────────┐
│ [('2025-06-01 00:00:00.000',10),('2025-06-01 00:00:30.000',20),('2025-06-01 00:01:30.000',30)] │
└────────────────────────────────────────────────────────────────────────────────────────────────┘

注意 函数 timeSeriesFromGrid(start_timestamp, end_timestamp, step, values) 返回的结果与以下表达式相同:

arrayFilter(x -> x.2 IS NOT NULL, arrayZip(timeSeriesRange(start_timestamp, end_timestamp, step), values))