对语法进行解释说明,需要以井号(#)开头。示例如下:
#设置日志的默认主题(放在行首的注释)。
e_set("__topic__", "access_log")   #设置日志的默认主题(放在行尾的注释)。
函数调用的参数列表过长时,需要换行。
  • 如果函数结构中存在半角逗号(,),可以直接在半角逗号(,)的地方进行换行。
  • 如果某个字符串过长需要换行,可以使用反斜线(\)换行。
  • 示例如下:
    e_set("__topic__", "v1",
            "type", "v2",       #使用半角逗号(,)分隔时,直接换行。
            "length", 100)
    e_set("__topic__", "this is a very long long long .........." \  #使用反斜线(\)换行。
                                "......long text")

    函数调用方式

  • 基本调用方式
    e_set("abc", "xyz")
    说明 编写数据加工语句时,传入参数类型和数量需要与函数语法匹配。
  • 基本变参调用
    str_replace(值, old [,new [,count] ]) 
    说明 函数参数中包含如上形式的方括号([])时,其参数例如 new count 比较特殊,属于可选参数,但不能使用命名参数形式调用且只能顺序调用。
    #错误示例
    str_replace("a-b-c", "-", new='%')
    str_replace("a-b-c", "-", new='%', count=1)
    #正确示例
    str_replace("a-b-c", "-", '%')
    str_replace("a-b-c", "-", '%', 2)
  • 命名参数调用方式
    有默认值的参数叫做命名参数,例如 e_set("abc", "xyz", mode="fill") 中的 mode
  • 某些函数的命名参数在特定条件下必须传入值,具体请参见每个函数的参数说明。
  • 传递参数值的方式为: mode=...
  • 有多个命名参数时,对传递顺序没有严格要求,例如 e_csv("data", ["f1", "f2", "f3"], sep='#', quote="|") e_csv("data", ["f1", "f2", "f3"], quote="|", sep='#') 相同。
    将函数的返回值作为其他函数参数的取值,需要确保两个数据的数据类型一致。例如:
    e_set("abc", v("xyz"))
    e_set("abc", str_lower(v("xyz")))

    某些函数支持变参传递。 v("f1", ....) 表示可以传递更多参数,例如 v("f1", "f2", "f3")

    传入命名参数时,命名参数需要放在最后,例如 v("f1", "f2", "f3", "f4", mode="fill")

    SLS DSL标准模式支持大小比较运算符,包括 >、<、>=、<=、!=、== 。您也可以使用日志服务提供的比较运算函数来实现相同效果。
  • 直接使用比较运算符
    #下面是一些使用样例,当大小比较结果为True时,丢弃日志。
    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_if(3 == 2, DROP)      # 3等于2时,丢弃。
    e_if(3 != 2, DROP)      # 3不等于2时,丢弃。
    e_if(1 < 2 < 3, DROP)   # 2大于1且2小于3时,丢弃。
    e_if(0 < ct_int(v('x')) < 100, DROP) # 字段x的值大于0且小于100时,丢弃。
  • 使用日志服务提供的比较运算函数
    SLS DSL标准模式支持逻辑运算符,包括and、or和not。您也可以使用日志服务提供的逻辑运算函数来实现相同效果。
  • 直接使用逻辑运算符
    #下面是一些使用样例,当逻辑运算的结果为True时,丢弃日志。
    e_if(True and False, DROP)     # 结果为False
    e_if(True or False, DROP)      # 结果为True
    e_if(True and not False, DROP) # 结果为True
    e_if(3 > 2 and 1 < 3, DROP)    # 结果为True
    e_if(ct_int(v('x')) > 100 or ct_int(v('y')) < 100, DROP) # 字段x的值大于100或者字段y的值小于100
  • 使用日志服务提供的逻辑运算函数 例如设置字段 a 的值为 3600*6
    # * 
    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_if(True, DROP)                     #输入True时,丢弃。
    e_if(1, DROP)                        #输入1时,丢弃。
    e_if(v("abc"), DROP)                 #存在字段abc且字段不为空时,丢弃。
    e_if(str_isdigit(v("abc")), DROP)    #存在字段abc且字段的内容都是数字时,丢弃。
  •