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)表示。平均偏差是一种平均离差。离差是总体各单位的标志值与算术平均数之差。因离差和为零,离差的平均数不能将离差和除以离差的个数求得,而必须将离差取绝对数来消除正负号。
平均偏差是反映各标志值与算术平均数之间的平均差异。平均偏差越大,表明各标志值与算术平均数的差异程度越大,该算术平均数的代表性就越小;平均偏差越小,表明各标志值与算术平均数的差异程度越小,该算术平均数的代表性就越大。
平均偏差又有简单平均偏差和加权平均偏差之分。
计算
- 简单平均偏差
如果原数据未分组,则计算平均偏差的公式为:
$$
A.D. =
\frac{\sum\mid x-\overline x \mid}{n}
$$
该式称为简单平均偏差。
举例:计算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 标准差
- 加权平均偏差
在分组情况下,平均偏差的计算公式为:该式称为加权平均偏差。
$$
A.D. =
\frac{\sum\mid x-\overline x \mid f}{n f}
$$
无状态函数
类型转换函数
| 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) |