赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 日志服务
  4. 操作指南
  5. 数据加工
  6. 数据加工(旧版)
  7. 数据加工语法
  8. 基础语法

基础语法

  • 数据加工语法
  • 发布于 2025-04-22
  • 0 次阅读
文档编辑
文档编辑

本文介绍SLS DSL的基础语法。

注释

对语法进行解释说明,需要以井号(#)开头。示例如下:

#设置日志的默认主题(放在行首的注释)。
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时,丢弃。
    • 使用日志服务提供的比较运算函数

      场景操作

      函数

      示例

      判断等于==

      op_eq

      op_eq(v("name"), "xiao ming")

      判断不等于!=

      op_ne

      op_ne(v("name"), "xiao ming")

      大于>

      op_gt

      op_gt(ct_int(v("age")), )

      大于等于>=

      op_ge

      op_ge(ct_int(v("age")), 18)

      小于<

      op_lt

      op_lt(ct_int(v("age")), 18)

      小于等于<=

      op_le

      op_le(ct_int(v("age")), 18)

  • 逻辑运算符

    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
    • 使用日志服务提供的逻辑运算函数

      场景操作

      函数

      示例

      逻辑且and

      op_and

      op_and(op_gt(v("age"), 18), op_lt(v("age"), 31))

      逻辑或or

      op_or

      op_or(op_le(v("age"), 18), op_gt(v("age"), 65))

      逻辑否not

      op_not

      op_not(op_gt(v("age"), 18))

  • 其他操作符

    由于SLS DSL标准模式下不直接支持以下操作符。日志服务提供对应的函数来实现相同的效果。

    场景操作

    函数

    示例

    加+

    op_add

    op_add(v("age"), 2)

    减-

    op_sub

    op_sub(v("age"), 2)

    乘*

    op_mul

    op_mul(v("size"), 2)

    幂**

    op_pow

    op_pow(v("size"), 2)

    整除//

    op_div_floor

    op_div_floor(v("bytes"), 1024)

    取模%

    op_mod

    op_mod(v("age"), 10)

    取负-

    op_neg

    op_neg(v("profit"))

    判断存在in

    op_in

    op_in(["pass", "ok"], v("result"))

    判断不存在not in

    op_not_in

    op_not_in(["pass", "ok"], v("result"))

    字符串切片[ ...]

    op_slice

    op_slice(v("message"), 0, 20)

    例如设置字段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))    #合法

真假判断

有些函数会接收条件,根据条件的值来决定事件的逻辑。条件可以是一个固定值或者表达式返回的值。

SLS DSL支持对任意类型值进行判断,如下表格是各种类型值的真假条件。

数据类型

True的条件

False的条件

布尔

True,true

False,false

None

无

总是False

数值

非0或非0.0

0或0.0

字符串

非空

空串

字节

非空

空字节

元组

非空

空元组

列表

非空

空列表

字典

非空

空字典

表格

存在即为True

空对象(None)

日期时间

存在即为True

空对象(None)

如下为丢弃事件示例:

e_if(True, DROP)                     #输入True时,丢弃。
e_if(1, DROP)                        #输入1时,丢弃。
e_if(v("abc"), DROP)                 #存在字段abc且字段不为空时,丢弃。
e_if(str_isdigit(v("abc")), DROP)    #存在字段abc且字段的内容都是数字时,丢弃。
相关文章

语言简介 2025-04-22 10:54

日志服务语言SLS DSL(Domain Specific Language)是日志服务数据加工使用的与Python兼容的脚本。SLS DSL基于Python语言开发,提供两百多个内置函数来简化数据加工任务。 自由编排

数据结构 2025-04-22 10:54

本文介绍数据加工语法相关的数据结构及其说明。 基本数据结构 基本数据结构的不同类型和说明如下表所示:

基础语法 2025-04-22 10:54

本文介绍SLS DSL的基础语法。 注释 对语法进行解释说明,需要以井号(#)开头。示例

函数总览 2025-04-22 10:54

本文列举数据加工任务所涉及的所有函数。 全局操作函数

全局操作函数 2025-04-22 10:54

本文介绍日志服务提供的全局操作函数清单。日志服务LOG DSL(Domain Specific Language)提供近三十种全局操作函数,您可以在数据加工中通过全局操作函数控制加工逻辑。 全局操作函数列表如下表所示。

流程控制函数 2025-04-22 10:54

本文主要介绍流程控制函数的语法规则,包括参数解释、函数示例等。 函数列表

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号