TICKscript Lambda表达式
概述
TICKscript使用lambda表达式定义数据点的转换,并定义充当过滤器的布尔条件。
简介
Lambda表达式包含:
- 数学运算
- 布尔运算
- 内部函数调用
- 或三者的组合
TICKscript尝试类似于InfluxQL,因为您在InfluxQL WHERE子句中使用的大多数表达式将作为TICKscript中的表达式使用,但具有自己的语法:
- lambda表达式都以关键字
lambda:
开头。 - 所有
字段Field
或标记Tag
的标识符必须加双引号。 - 相等的比较运算符为
==
不是=
。
内置函数
内置函数分为:
内置函数 | 数量 | ||
---|---|---|---|
Stateful functions | 有状态函数 | 3 |
|
Stateless functions | 无状态函数 | 78 |
|
Type conversion functions | 类型转换函数 | 5 |
|
Existence | 存在函数 | 1 |
|
Time functions | 时间函数 | 7 |
|
Math functions | 数学函数 | 42 |
|
String functions | 字符串函数 | 21 |
|
Human string functions | 人性化函数 | 1 |
|
Conditional functions | 条件函数 | 1 |
有状态函数
No. | 函数 | 返回值 | 描述 |
---|---|---|---|
1 | count() |
int64 |
返回表达式的计算次数 |
2 | sigma(value ) |
float64 |
计算给定值远离运行平均值的标准偏差数。每次评估表达式时,都会更新运行平均值和标准差。 |
3 | spread(value ) |
float64 |
计算传递给它的所有值的运行范围。范围是收到的最大值和最小值之间的差异。 |
sigma
可用于定义强大的告警
每次计算表达式时,它都会更新正在运行的统计信息,然后返回偏差。
sigma("value") > 3.0
表示评估收到的数据点流的平均值的标准偏差:
- 如果小于等于 3.0,则返回
False
; - 如果超过3.0,则返回
True
。
这样的表达式可以在TICKscript内部使用来定义强大的警报。
stream |
知识点-平均偏差
平均偏差是数列中各项数值与其算术平均数的离差绝对值的算术平均数。平均偏差是用来测定数列中各项数值对其平均数离势程度的一种尺度。平均偏差可分为简单平均偏差和加权平均偏差。
定义
在统计中,如果要反映出所有原数据间的差异,就要在各原数据之间进行差异比较,当原数据较多时,进行两两比较就很麻烦,因此需要找到一个共同的比较标准,取每个原数据值与标准值进行比较。这个标准值就是算数平均数。
平均偏差就是每个原数据值与算数平均数之差的绝对值的均值,用符号A.D.(average deviation)表示。平均偏差是一种平均离差。离差是总体各单位的标志值与算术平均数之差。因离差和为零,离差的平均数不能将离差和除以离差的个数求得,而必须将离差取绝对数来消除正负号。
平均偏差是反映各标志值与算术平均数之间的平均差异。平均偏差越大,表明各标志值与算术平均数的差异程度越大,该算术平均数的代表性就越小;平均偏差越小,表明各标志值与算术平均数的差异程度越小,该算术平均数的代表性就越大。
平均偏差又有简单平均偏差和加权平均偏差之分。
计算
- 简单平均偏差
如果原数据未分组,则计算平均偏差的公式为:该式称为简单平均偏差。
举例:计算cpu每个点的平均偏差值 10 11 9 8 12 11
- 第一个点的值为10,平均偏差为
0
- 第二个点的值为11,平均偏差为
0.5
- 第三个点的值为9,平均偏差为
0.82
- 第四个点的值为8,平均偏差为
1.12
- 第五个点的值为12,平均偏差为
1.41
- 第六个点的值为11,平均偏差为
1.34
* 计算平均值 |
python计算脚本
import numpy |
- mean 平均值
- dev 方差
- stdev 标准差
- 加权平均偏差
在分组情况下,平均偏差的计算公式为:该式称为加权平均偏差。
无状态函数
类型转换函数
No. | 函数 | 返回值 | 描述 | |
---|---|---|---|---|
1 | bool(value) |
True/False |
将字符串和数字转换为布尔值 | |
2 | int(value) |
int64 |
强制将字符串或float64转换为int64 | |
3 | float(value) |
float64 |
制将字符串或int64转换为float64 | |
4 | string(value) |
string |
将bool,int64或float64转换为字符串 | |
5 | `duration(value int64\ | float64, unit duration)` | duration |
将int64或float64转换为持续时间 |
判断存在的函数
No. | 函数 | 返回值 | 解释 | |
---|---|---|---|---|
1 | `\ | where(lambda: isPresent(“myfield”))` | True/False |
判断myfield 是否存在 |
该函数在where
节点中使用,根据指定的字段或标记键是否存在返回布尔值。用于过滤数据这是缺少指定的字段或标记。
时间函数
No. | 函数 | 返回值 | 描述 |
---|---|---|---|
1 | unixNano(t time) |
int64 |
Unix时间 |
2 | minute(t time) |
int64 |
分钟 |
3 | hour(t time) |
int64 |
小时 |
4 | weekday(t time) |
int64 |
周 [0,6], 0 is Sunday |
5 | day(t time) |
int64 |
the day within the month: range [1,31] |
6 | month(t time) |
int64 |
the month within the year: range [1,12] |
7 | year(t time) |
int64 |
年 |
例如
lambda: hour("time") >= 9 AND hour("time") < 19 |
数学函数
No. | 函数 | 返回值 | 描述 |
---|---|---|---|
1 | abs(x) | float64 |
Abs返回x 的绝对值。 |
2 | acos(x) | float64 |
Acos以弧度为单位返回x 的反余弦。 |
3 | acosh(x) | float64 |
Acosh返回x`的反双曲余弦值。 |
4 | asin(x) | float64 |
Asin以弧度为单位返回x 的反正弦值。 |
5 | asinh(x) | float64 |
Asinh返回x 的反双曲正弦值。 |
6 | atan(x) | float64 |
Atan以弧度为单位返回x 的反正切值。 |
7 | atan2(y,x) | float64 |
Atan2返回y / x 的反正切,使用二者的符号确定返回值的象限。 |
8 | atanh(x) | float64 |
Atanh返回x 的反双曲正切。 |
9 | cbrt(x) | float64 |
Cbrt返回x 的立方根。 |
10 | ceil(x) | float64 |
Ceil返回大于或等于x 的最小整数值。 |
11 | cos(x) | float64 |
Cos返回弧度参数x 的余弦值。 |
12 | cosh(x) | float64 |
Cosh返回x 的双曲余弦值。 |
13 | erf(x) | float64 |
Erf返回x 的错误函数。 |
14 | erfc(x) | float64 |
Erfc返回x 的互补误差函数。 |
15 | exp(x) | float64 |
Exp返回e ** x ,x 的base-e 指数。 |
16 | exp2(x) | float64 |
Exp2返回2 ** x ,x 的基数为2 的指数。 |
17 | expm1(x) | float64 |
Expm1返回e ** x - 1 ,x 的基数为e 的指数减1 .当x 接近零时,它比Exp(x)-1 更准确。 |
18 | floor(x) | float64 |
Floor返回小于或等于x 的最大整数值。 |
19 | gamma(x) | float64 |
Gamma返回x 的Gamma 函数。 |
20 | hypot(p,q) | float64 |
Hypot返回Sqrt(p * p + q * q) ,注意避免不必要的溢出和下溢。 |
21 | j0(x) | float64 |
J0返回第一类的零阶贝塞尔函数。 |
22 | j1(x) | float64 |
J1返回第一类的一阶贝塞尔函数。 |
23 | jn(n int64,x) | float64 |
Jn返回第一种order-n Bessel函数。 |
24 | log(x) | float64 |
Log返回x 的自然对数。 |
25 | log10(x) | float64 |
Log10返回x 的十进制对数。 |
26 | log1p(x) | float64 |
Log1p返回1 的自然对数加上其参数x 。当x 接近零时,它比Log(1 + x) 更准确。 |
27 | log2(x) | float64 |
Log2返回x 的二进制对数。 |
28 | logb(x) | float64 |
Logb返回x 的二进制指数。 |
29 | max(x,y) | float64 |
Max返回x 或y 中较大的一个。 |
30 | min(x,y) | float64 |
Min返回x 或y 中较小的一个。 |
31 | mod(x,y) | float64 |
Mod返回x / y 的浮点余数。结果的大小小于y,其符号与x的符号一致。 |
32 | pow(x,y) | float64 |
Pow返回x ** y ,y的base-x指数。 |
33 | pow10(x int64 | float64 |
Pow10返回10 ** e ,e 的基数为10 的指数。 |
34 | sin(x) | float64 |
Sin返回弧度参数x 的正弦值。 |
35 | sinh(x) | float64 |
Sinh返回x 的双曲正弦值。 |
36 | sqrt(x) | float64 |
Sqrt返回x 的平方根。 |
37 | tan(x) | float64 |
Tan返回弧度参数x 的正切值。 |
38 | tanh(x) | float64 |
Tanh返回x 的双曲正切。 |
39 | trunc(x) | float64 |
Trunc返回x 的整数值。 |
40 | y0(x) | float64 |
Y0返回第二种零阶贝塞尔函数。 |
41 | y1(x) | float64 |
Y1返回第二种顺序一贝塞尔函数。 |
42 | yn(n int64,x) | float64 |
Yn返回第二种order-n 贝塞尔函数。 |
字符串函数
No. | 函数 | 返回值 | 描述 |
---|---|---|---|
1 | strContains(s, substr) | bool |
StrContains报告substr 是否在s 内。 |
2 | strContainsAny(s, chars) | bool |
StrContainsAny报告字符中的任何Unicode 代码点是否在s 内。 |
3 | strCount(s, sep) | int64 |
StrCount计算s 中非重叠sep 实例的数量。如果sep 是空字符串,则Count 返回1 + s 中的Unicode 代码点数。 |
4 | strHasPrefix(s, prefix) | bool |
StrHasPrefix测试字符串s 是否以prefix 开头。 |
5 | strHasSuffix(s, suffix) | bool |
StrHasSuffix测试字符串s 是否以后suffix 缀结尾。 |
6 | strIndex(s, sep) | int64 |
StrIndex返回s 中第一个sep 实例的索引,如果s 中不存在sep ,则返回-1 。 |
7 | strIndexAny(s, chars) | int64 |
StrIndexAny从1 中的字符返回任何Unicode 代码点的第一个实例的索引,如果s 中没有来自chars 的Unicode 代码点,则返回-1 。 |
8 | strLastIndex(s, sep) | int64 |
StrLastIndex返回s 中最后一个sep 实例的索引,如果s 中不存在sep ,则返回-1 。 |
9 | strLastIndexAny(s, chars) | int64 |
StrLastIndexAny从s 中的字符返回任何Unicode 代码点的最后一个实例的索引,如果s中没有来自chars 的Unicode 代码点,则返回-1 。 |
10 | strLength(s) | int64 |
StrLength返回字符串的长度。 |
11 | strReplace(s, old, new), n int64 | string |
StrReplace返回字符串s 的副本,其中前n个非重叠实例由new 替换。 |
12 | strSubstring(s), start, stop int64 | string |
StrSubstring根据给定的索引返回一个子字符串,strSubstring(str,start,stop) 相当于Go中的str [start:stop] 。 |
13 | strToLower(s) | string |
StrToLower返回字符串s的副本,其中所有Unicode 字母都映射到它们的小写字母。 |
14 | strToUpper(s) | string |
StrToUpper返回字符串s的副本,其中所有Unicode 字母都映射到它们的大写字母。 |
15 | strTrim(s, cutset) | string |
StrTrim返回字符串s的一个片段,其中包含cutset 中包含的所有前导和尾随Unicode 代码点。 |
16 | strTrimLeft(s, cutset) | string |
StrTrimLeft返回字符串s 的一个片段,其中包含cutset 中包含的所有前导Unicode 代码点。 |
17 | strTrimPrefix(s, prefix) | string |
StrTrimPrefix返回s 而没有提供的前导前缀字符串。如果s 不以prefix 开头,则返回s不变。 |
18 | strTrimRight(s, cutset) | string |
StrTrimRight返回字符串s 的一个切片,并删除了cutset 中包含的所有尾随Unicode 代码点。 |
19 | strTrimSpace(s) | string |
StrTrimSpace返回字符串s 的一部分,删除所有前导和尾随空格,如Unicode 所定义。 |
20 | strTrimSuffix(s, suffix) | string |
StrTrimSuffix返回s 而没有提供的尾随后缀字符串。如果s 不以后缀结尾,则s 保持不变。 |
21 | regexReplace(r regex, s, pattern) | string |
RegexReplace将输入字符串中正则表达式的匹配替换为输出字符串。例如regexReplace(/a(b*)c/, ‘abbbc’, ‘group is $1’) -> ‘group is bbb’ 。如果未找到匹配项,则返回原始字符串。 |
人性化函数
No. | 函数 | 返回值 | 描述 |
---|---|---|---|
1 | humanBytes(value) |
string |
将具有单位字节的int64 或float64 转换为表示字节数的人类可读字符串。 |
条件函数
No. | 函数 | 返回值 | 描述 |
---|---|---|---|
1 | if(condition, true expression, false expression) |
True/False |
根据第一个参数的值返回其操作数的结果。第二个和第三个参数必须返回相同的类型。 |
例:
|eval(lambda: if("field" > threshold AND "field" != 0, 'true', 'false')) |
value
上例中字段的值将是字符串,true
或者false
取决于作为第一个参数传递的条件。
该if
函数的返回类型相同类型作为其第二个和第三个参数。
if(condition, true expression, false expression) |