阿里云平台
语法简介: https://help.aliyun.com/document_detail/129376.html (这个非常的重要,下面的所有语法都是基于这个演变)
函数总览: https://help.aliyun.com/document_detail/159702.html
函数参考: https://help.aliyun.com/document_detail/129391.html
对比C#
对比 | c# | dsl |
---|---|---|
字符串换行 | var xxx = "这是一段很长" + "长"; | e_set("__topic__", "this is a very long long long .........." \ #使用反斜线(\)换行。 "......long text") |
注释 | // 单行 /* 多行 */ | # 这是注释 |
方法 | 跟c#大同小异 使用小括号 可使用命名参数 ,如 e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|") | |
逻辑运算符 | & | ! 与或非 | and or not 跟sql类似 e_if(3 > 2, DROP) # 3大于2时,丢弃。 e_if(3 < 2, DROP) # 3小于2时,丢弃 |
比较运算符 | > < = == != | 类似,同时提供函数的形式 e_if(3 > 2, DROP) # 3大于2时,丢弃。 e_if(3 < 2, DROP) # 3小于2时,丢弃 |
其他操作符 | +-*/% | 不支持,必须使用函数 # * e_set("a", 3600 * 6) #非法 e_set("a", op_mul(3600, 6)) #合法 # / e_set("bytes_kb", v("bytes") / 1024) #非法 e_set("bytes_kb", op_div_floor(v("bytes"), 1024)) #合法 |
函数命名理解
使用下划线分隔
大部分函数根据前段进行识别分类
- e_全局操作函数,如 e_if,e_if_else, e_keep, e_drop
- op_操作符函数 ,operate
- ct_转换函数,conver to
- mat_算数函数,math
- str_字符串函数 string
- dt_日期函数,datetime
- regex_正则函数
- json_json函数
- xml_xml函数
- ip_ip函数
- lst_列表函数
- dct_字典函数
- tab_表格函数
- ... 更多按经验调用
函数v()
取值的意思,取某个字段的值, v 指 value
函数的使用
首先一切皆函数,所以这里只能使用函数的方式来使用,也就是传参的形式,传参也就是已逗号分隔
例如e_switch,下面涉及到两个函数的定义,一是变参,二是命名参数
变参在c#的表述是params ,如 Abc(params string[] args)
命名参数是有默认值 如 e_switch(params string[] args, string default="")
e_switch(
e_has("a"), e_output("target-a"),
e_has("b"), e_output("target-b"),
default=e_output("target-default"),
)
怎么表述c#中的大括号?使用e_compose
if( age < 10 )
{
// 免费乘车
// 不能玩大型机动游戏
}
在dsl中只能使用e_compose,因为函数的调用只能是参数形式,借助e_compose
e_if(
e_search("content==123"),
e_compose(e_drop_fields("age|name"), e_rename("content", "ctx")),
)
全局操作函数的理解差异
c# | dsl | |
---|---|---|
switch | 判断语句,形如 if(xx=="a"){} else if(xx=='b'){} else if(xx=="c"){} else {} | 在这里是表述为多操作语句,形如 if(xx=="a"){} if(yy=="b"){} if(zz=="c"){} |
split | 对当前对象进行分割,一般是字符串 | 对当前日志进行分割,这里注意,分割出来时除被分割的字段外,还会包括当前日志项的其他数据 例如, __topic__: 1,2 name: abc 将分裂出 __topic__: 1 name: abc 以及 __topic__: 2 name: abc |
关于e_output、e_coutput的区别
e_output:输出日志到指定的Logstore中,且对应的日志不再执行后面的加工规则。
e_coutput:输出日志到指定的Logstore中,且对应的日志继续执行后面的加工规则