You need to enable JavaScript to run this app.
导航
流程控制函数
最近更新时间:2023.11.13 16:31:34首次发布时间:2023.02.16 18:06:17

本文档介绍流程控制函数的语法与格式、相关的场景示例等。

c_if 函数

对符合条件的日志,进行相应的加工处理,否则不进行任何处理。

  • 函数参数中的条件和操作必须成对出现,且必须满足至少有一个条件和至少一个操作。
  • 参数中存在多个为真的条件时,只执行第一个真条件对应的操作。

函数语法/格式

c_if(条件1, 操作1, 条件2, 操作2, ……)

参数说明如下:

参数

参数类型

是否必选

默认值

取值范围

说明

条件

任意

/

/

表达式或其组合,如果不是布尔类型时,会转换为布尔类型再判断。

操作

全局操作函数

/

/

全局操作函数或其组合。

函数示例

  • 场景:原始日志中存在字段 phone 时新增字段 contact_type

  • 加工规则:

    c_if(f_has("phone"), f_set("contact_type", "telephone"))
    
  • 日志样例:

    [
        {
            "user_name":"Smith",
            "phone":"135xxxx5678"
        },
        {
            "user_name":"Paul",
            "city":"chengdu"
        }
    ]
    
  • 加工结果:

    [
        {
            "user_name":"Smith",
            "phone":"135xxxx5678",
            "contact_type":"telephone"
        },
        {
            "user_name":"Paul",
            "city":"chengdu"
        }
    ]
    

    说明

    第一条日志中存在字段 phone,加工后增加了字段 contact_type;第二条日志中没有字段 phone,加工不新增字段 phone

c_if_else 函数

基于条件判断,分别进行不同的逻辑处理。当条件为真时,执行操作 1,否则执行操作 2。

函数语法/格式

c_if_else(条件, 操作1, 操作2)

参数说明如下:

参数

参数类型

是否必选

默认值

取值范围

说明

条件

任意

/

/

表达式或其组合,如果不是布尔类型时,会转换为布尔类型再判断。

操作 1

全局操作函数

/

/

全局操作函数或其组合。

操作 2

全局操作函数

/

/

全局操作函数或其组合。

函数示例

  • 场景:根据年龄字段 age 判断是否是成年人,并将判断结果输出到新增字段 is_adult 中。

  • 加工规则:

    c_if_else(op_ge(v("age"), 18), f_set("is_adult", True), f_set("is_adult", False))
    
  • 日志样例:

    [
        {
            "name":"Agatha",
            "age":"20"
        },
        {
            "name":"Elvin",
            "age":"17"
        }
    ]
    
  • 加工结果:

    [
        {
            "name":"Agatha",
            "age":"20",
            "is_adult":true
        },
        {
            "name":"Elvin",
            "age":"17",
            "is_adult":false
        }
    ]
    

c_switch 函数

基于条件判断,分别进行不同的逻辑处理。基于多分支条件,执行第一个为真的条件对应的操作。如果所有条件均不满足,则执行默认操作。

函数语法/格式

c_switch(条件1, 操作1, 条件2, 操作2, ..., default=默认操作)

参数说明如下:

参数

参数类型

是否必选

默认值

取值范围

说明

条件

任意

/

/

表达式或其组合,如果不是布尔类型时,会转换为布尔类型再判断。

操作

全局操作函数

/

/

全局操作函数或其组合。

default

全局操作函数

/

/

默认操作,全局操作函数或其组合。

函数示例

  • 场景:根据日志字段 city 判断所属地域。

  • 加工规则:

    c_switch(op_eq(v("city"), "chengdu"), f_set("region", "West"), op_eq(v("city"), "shanghai"), f_set("region", "East"))
    
  • 日志样例:

    [
        {
            "name":"Agatha",
            "city":"chengdu"
        },
        {
            "name":"Elvin",
            "city":"shanghai"
        }
    ]
    
  • 加工结果:

    [
        {
            "name":"Agatha",
            "city":"chengdu",
            "region":"West"
        },
        {
            "name":"Elvin",
            "city":"shanghai",
            "region":"East"
        }
    ]
    

c_compose 函数

用于组合多个操作,多个操作应均为全局操作函数。

  • 日志服务会依次调用指定的操作,并将日志传递、转换并返回最后的日志数据。
  • 对于某一条日志数据,如果其中某一全局操作删除了日志,日志服务不会再对其执行后续操作。

函数语法/格式

c_compose(操作1, 操作2...)

参数说明如下:

参数

参数类型

是否必选

默认值

取值范围

说明

操作

全局操作函数

/

/

多个全局操作函数或其组合。

函数示例

  • 场景:日志中包含 content 字段时,更新其值为 value1 并重命名为 content_modified

  • 加工规则:

    c_if(f_has("content"),c_compose(f_set("content","value1"),f_rename("content","content_modified")))
    
  • 日志样例:

    {
        "content":"value"
    }
    
  • 加工结果:

    {
        "content_modified":"value1"
    }