时间序列函数
以下函数专为与 timeSeries*() 聚合函数配合使用而设计,例如
timeSeriesInstantRateToGrid、timeSeriesLastToGrid 等。
timeSeriesRange
生成一系列时间戳。
语法
参数
start_timestamp- 范围的起始时间戳。end_timestamp- 范围的结束时间戳。step- 范围的步长(单位:秒)。
返回值
- 返回一组时间戳序列
[start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]。
示例
查询:
结果:
注意
- 如果调用函数
timeSeriesRange()时,start_timestamp等于end_timestamp, 则它会返回一个仅包含该时间戳的单元素数组:[start_timestamp] - 函数
timeSeriesRange()类似于函数 range。 例如,如果时间戳类型为DateTime64(3)且start_timestamp < end_timestamp,则timeSeriesRange(start_timestamp, end_timestamp, step)返回的结果与以下表达式相同:
timeSeriesFromGrid
将数值数组 [value1, value2, value3, ..., valueN] 转换为元组数组
[(start_timestamp, value1), (start_timestamp + step, value2), (start_timestamp + 2 * step, value3), ..., (end_timestamp, valueN)]。
如果数组 [value1, value2, value3, ...] 中有一些值为 NULL,则函数不会将这些 NULL 值复制到结果数组中,
但仍然会增加当前时间戳。例如,对于 [value1, NULL, value2],函数将返回
[(start_timestamp, value1), (start_timestamp + 2 * step, value2)]。
当前时间戳按步长递增,直到其大于 end_timestamp,每个时间戳都会与指定值数组中的一个值配对。
如果值的数量与时间戳的数量不匹配,函数将抛出异常。
语法
参数
start_timestamp- 网格的起始时间。end_timestamp- 网格的结束时间。step- 网格的步长(以秒为单位)。values- 值数组[value1, value2, ..., valueN]。
返回值
- 返回在由
start_timestamp和step定义的等间隔时间网格上,将时间戳与源值数组中的值对齐组合后的结果。
示例
查询:
结果:
注意
函数 timeSeriesFromGrid(start_timestamp, end_timestamp, step, values) 返回的结果与下列表达式等价:
seriesDecomposeSTL
引入版本:v24.1
使用 STL(基于 Loess 的季节-趋势分解方法 (Seasonal-Trend Decomposition Procedure Based on Loess))将时间序列数据分解为季节性、趋势和残差分量。
语法
参数
series— 数值数组Array((U)Int8/16/32/64)或Array(Float*)period— 正整数UInt8/16/32/64
返回值
返回由四个数组组成的数组:第一个数组为季节性分量,第二个数组为趋势分量,第三个数组为残差分量,第四个数组为基线分量(季节性 + 趋势)。Array(Array(Float32), Array(Float32), Array(Float32), Array(Float32))
示例
使用 STL 对时间序列数据进行分解
seriesOutliersDetectTukey
引入于:v24.2
使用 Tukey Fences 检测序列数据中的离群点。
语法
参数
series— 数值数组。Array((UInt8/16/32/64))或Array(Float*)min_percentile— 可选。用于计算四分位距 (IQR) 的最小分位点。取值范围必须在 [0.02,0.98] 之间,默认值为 0.25。Float*max_percentile— 可选。用于计算四分位距 (IQR) 的最大分位点。取值范围必须在 [0.02,0.98] 之间,默认值为 0.75。Float*K— 可选。用于检测轻微或更强异常值的非负常数。默认值为 1.5。Float*
返回值
返回一个与输入数组长度相同的数组,其中每个值表示序列中对应元素的可能异常评分。非零评分表示存在潜在异常。Array(Float32)
示例
基础异常值检测
自定义参数离群值检测
seriesPeriodDetectFFT
引入版本:v23.12
使用 FFT(快速傅里叶变换)来检测给定序列数据的周期。
语法
参数
series— 数值数组。Array((U)Int8/16/32/64)或Array(Float*)
返回值
返回一个实数值,等于序列数据的周期长度。当数据点数量少于四个时返回 NaN。Float64
示例
使用简单模式的周期检测
基于复杂模式的周期检测
timeSeriesFromGrid
引入于:v25.8
将数值数组 [x1, x2, x3, ...] 转换为元组数组
[(start_timestamp, x1), (start_timestamp + step, x2), (start_timestamp + 2 * step, x3), ...]。
当前时间戳按 step 递增,直到其大于 end_timestamp。
如果数值个数与时间戳个数不匹配,函数会抛出异常。
[x1, x2, x3, ...] 中的 NULL 值会被忽略,但当前时间戳仍会递增。
例如,对于 [value1, NULL, x2],函数返回 [(start_timestamp, x1), (start_timestamp + 2 * step, x2)]。
语法
参数
start_timestamp— 时间网格的起始时间。DateTime64或DateTime或UInt32end_timestamp— 时间网格的结束时间。DateTime64或DateTime或UInt32step— 时间网格的步长(单位:秒)。Decimal64或Decimal32或UInt32/64values— 值的数组。Array(Float*)或Array(Nullable(Float*))
返回值
返回源数组中的值,这些值与基于 start_timestamp 和 step 定义的等间隔时间网格上的时间戳组合在一起。Array(Tuple(DateTime64, Float64))
示例
用法示例
timeSeriesIdToTags
引入于:v25.8
查找指定时间序列标识符对应的标签。
语法
参数
id— 时间序列的标识符。UInt64或UInt128或UUID或FixedString(16)
返回值
返回由 (tag_name, tag_value) 对组成的数组。Array(Tuple(String, String))
示例
示例
timeSeriesIdToTagsGroup
自 v25.8 起引入
将指定的时间序列标识符转换为其所属的分组索引。分组索引是在当前执行查询的上下文中,与每个唯一标签集合关联的数字(例如 0、1、2、3)。
语法
参数
id— 时间序列标识符。UInt64或UInt128或UUID或FixedString(16)
返回值
返回与此标签集关联的组索引。UInt64
示例
示例
timeSeriesRange
自 v25.8 引入
生成一个时间戳范围 [start_timestamp, start_timestamp + step, start_timestamp + 2 * step, ..., end_timestamp]。
如果 start_timestamp 等于 end_timestamp,函数返回一个仅包含 [start_timestamp] 的单元素数组。
函数 timeSeriesRange() 类似于函数 range。
语法
参数
start_timestamp— 范围的开始时间。DateTime64或DateTime或UInt32end_timestamp— 范围的结束时间。DateTime64或DateTime或UInt32step— 范围的步长(以秒为单位)。UInt32/64或Decimal32/64
返回值
返回一个时间戳数组。Array(DateTime64)
示例
用法示例
timeSeriesStoreTags
自 v25.8 起引入
在查询上下文中存储时间序列标识符与其标签之间的映射,以便 timeSeriesIdToTags() 函数之后可以提取这些标签。
语法
参数
id— 时间序列的标识符。UInt64或UInt128或UUID或FixedString(16)tags_array— 标签名/值对的数组 (tag_name, tag_value)。Array(Tuple(String, String))或NULLseparate_tag_name_i— 标签名。String或FixedStringseparate_tag_value_i— 标签值。String或FixedString或Nullable(String)
返回值
返回第一个参数,即时间序列的标识符。
示例
示例
timeSeriesTagsGroupToTags
引入于:v25.8
查找与某个组索引关联的标签。组索引是数字 0、1、2、3,在当前执行的查询上下文中与每个唯一的标签集相关联。
语法
参数
group— 与时间序列关联的组索引。UInt64
返回值
由 (tag_name, tag_value) 对组成的数组。Array(Tuple(String, String))
示例
示例