02-TICKscript语言-I-Lambda表达式

TICKscript Lambda表达式

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表示评估收到的数据点流的平均值的标准偏差:

  1. 如果小于等于 3.0,则返回 False
  2. 如果超过3.0,则返回True

这样的表达式可以在TICKscript内部使用来定义强大的警报。

stream
|from()
...
|alert()
// use an expression to define when an alert should go critical.
.crit(lambda: sigma("value") > 3.0)

知识点-平均偏差

什么是平均偏差?

平均偏差是数列中各项数值与其算术平均数的离差绝对值的算术平均数。平均偏差是用来测定数列中各项数值对其平均数离势程度的一种尺度。平均偏差可分为简单平均偏差和加权平均偏差。

定义

在统计中,如果要反映出所有原数据间的差异,就要在各原数据之间进行差异比较,当原数据较多时,进行两两比较就很麻烦,因此需要找到一个共同的比较标准,取每个原数据值与标准值进行比较。这个标准值就是算数平均数。

平均偏差就是每个原数据值与算数平均数之差的绝对值的均值,用符号A.D.(average deviation)表示。平均偏差是一种平均离差。离差是总体各单位的标志值与算术平均数之差。因离差和为零,离差的平均数不能将离差和除以离差的个数求得,而必须将离差取绝对数来消除正负号。

平均偏差是反映各标志值与算术平均数之间的平均差异。平均偏差越大,表明各标志值与算术平均数的差异程度越大,该算术平均数的代表性就越小;平均偏差越小,表明各标志值与算术平均数的差异程度越小,该算术平均数的代表性就越大。

平均偏差又有简单平均偏差和加权平均偏差之分。

计算

  1. 简单平均偏差
    如果原数据未分组,则计算平均偏差的公式为:该式称为简单平均偏差。

举例:计算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

def cal_mean_std(sum_list_in):
# type: (list) -> tuple
N = sum_list_in.__len__()
narray = numpy.array(sum_list_in)
sum = narray.sum()
mean = sum / N

narray_dev = narray - mean
narray_dev = narray_dev * narray_dev
sum_dev = narray_dev.sum()
DEV = float(sum_dev) / float(N)
STDEV = numpy.math.sqrt(DEV)
return round(mean,2), round(DEV,2), round(STDEV,2)


sum_list_in = [10,11,9,8,12,11]
mean, DEV, STDEV=cal_mean_std(sum_list_in)
print(mean, DEV, STDEV)
  • mean 平均值
  • dev 方差
  • stdev 标准差
  1. 加权平均偏差
    在分组情况下,平均偏差的计算公式为:该式称为加权平均偏差。

无状态函数

类型转换函数

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 ** xxbase-e指数。
16 exp2(x) float64 Exp2返回2 ** xx的基数为2的指数。
17 expm1(x) float64 Expm1返回e ** x - 1x的基数为e的指数减1.当x接近零时,它比Exp(x)-1更准确。
18 floor(x) float64 Floor返回小于或等于x的最大整数值。
19 gamma(x) float64 Gamma返回xGamma函数。
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返回xy中较大的一个。
30 min(x,y) float64 Min返回xy中较小的一个。
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 ** ee的基数为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中没有来自charsUnicode代码点,则返回-1
8 strLastIndex(s, sep) int64 StrLastIndex返回s中最后一个sep实例的索引,如果s中不存在sep,则返回-1
9 strLastIndexAny(s, chars) int64 StrLastIndexAny从s中的字符返回任何Unicode代码点的最后一个实例的索引,如果s中没有来自charsUnicode代码点,则返回-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 将具有单位字节的int64float64转换为表示字节数的人类可读字符串。

条件函数

No. 函数 返回值 描述
1 if(condition, true expression, false expression) True/False 根据第一个参数的值返回其操作数的结果。第二个和第三个参数必须返回相同的类型。

例:

|eval(lambda: if("field" > threshold AND "field" != 0, 'true', 'false'))
.as('value')

value上例中字段的值将是字符串,true或者false取决于作为第一个参数传递的条件。

if函数的返回类型相同类型作为其第二个和第三个参数。

if(condition, true expression, false expression)