数据加工函数总览
描述
数据加工函数可以自由组合,来完成日志的清洗、结构化、过滤、分发、脱敏等场景。BLS的前置数据加工DSL模式默认开始是@raw字段,@raw表示从文件中读取的一行文本,需要从该字段开始解析,可以使用下面的函数自由组合完成日志加工处理。
函数概览
全局操作函数
字段值提取函数
从日志文本中提取字段/字段值。
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| e_regex |
基于正则表达式提取字段值 |
e_regex(“源字段名”, regex="正则表达式", fields_info="字段和类型的映射列表", mode="overwrite") |
返回提取后的日志(LOG) |
| e_json |
提取 JSON 字符串格式的字段值 |
ext_json("源字段名",depth=100, prefix="",suffix="",format="simple",sep="", mode="overwrite") |
返回提取后的日志(LOG) |
| e_sep |
基于分隔符提取字段值内容 |
e_sep("源字段名", "字段和类型的映射列表", sep="", quote="不参与分割的部分", restrict=False, mode="overwrite") |
返回提取后的日志(LOG) |
| e_csv |
基于分隔符提取字段值内容,默认分隔符为半角逗号 |
e_csv("源字段名", "字段和类型的映射列表", sep=",", quote="不参与分割的部分", restrict=False, mode="overwrite") |
返回提取后的日志(LOG) |
| e_psv |
基于分隔符提取字段值内容,默认分隔符为竖线 |
e_psv("源字段名", "字段和类型的映射列表", sep="|", quote="不参与分割的部分", restrict=False, mode="overwrite") |
返回提取后的日志(LOG) |
| e_tsv |
基于分隔符提取字段值内容,默认分隔符为制表符 |
e_tsv("源字段名", "字段和类型的映射列表", sep="\t", quote="不参与分割的部分", restrict=False, mode="overwrite") |
返回提取后的日志(LOG) |
| e_kv |
基于两级分割符提取字段值 |
e_kv("源字段名", "正则表达式", "key位置", "value位置", fields_info="字段和类型的映射列表", mode="overwrite") |
返回提取后的日志(LOG) |
映射富化函数
在已有字段的基础上,根据规则新增字段。
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| e_dict_map |
使用 Dict 结构对日志中的字段值进行匹配。当指定的字段的值和 Dict 中的 Key 相同时,将此 Key 对应的 Value 赋值给日志中的另一字段 |
e_dict_map("JSON字典", "源字段名", "目标字段", caseInsensitive=true, missing="", mode="overwrite") |
返回提取后的日志(LOG) |
流程控制函数类
用于条件判断。
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| e_compose |
组合操作函数,类似于分支代码块的组合能力,可以组合多个操作函数,并按顺序执行,可以结合分支、输出函数使用 |
e_compose(函数1, 函数2, ...) |
返回提取后的日志(LOG) |
| e_if |
对符合条件的日志,进行相应的函数处理,否则不进行任何处理 |
e_if(条件, 函数) |
返回提取后的日志(LOG) |
| e_if_else |
基于条件判断,分别进行不同的函数处理 |
e_if_else(条件, 函数1, 函数2) |
返回提取后的日志(LOG) |
| e_switch |
基于多分支条件,分别进行不同的函数处理,如果存在不符合所有条件的数据,将被丢弃 |
e_switch(条件1, 函数1, 条件2, 函数2, ...) |
返回提取后的日志(LOG) |
事件操作函数
用于日志的分发、丢弃、拆分。
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| e_drop |
丢弃符合条件的日志 |
e_drop(条件) |
返回提取后的日志(LOG) |
| e_keep |
保留符合条件的日志 |
e_keep(条件) |
返回提取后的日志(LOG) |
字段操作函数
用于字段的增删改查、重命名。
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| v |
获取字段值,返回对应字符串 |
v("字段名") |
返回字段的值 |
| e_set |
用来设置字段值,或者增加新字段 |
e_set("字段名1", "字段值1", "字段名2", "字段值2", ..., mode="overwrite") |
返回提取后的日志(LOG) |
| e_drop_fields |
根据字段名进行匹配,删除匹配到的字段 |
e_fields_drop("字段名1", "字段名2", ...) |
返回提取后的日志(LOG) |
| e_rename |
字段重命名 |
e_rename("字段名1", "新字段名1", "字段名2", "新字段名2", ...) |
返回提取后的日志(LOG) |
字段提取模式说明
下表介绍字段提取模式mode参数的不同取值以及说明。
原始日志:
{
"a": "",
"b": 100
}
| 参数值 |
说明 |
加工语句 |
加工结果 |
| fill |
当目标字段不存在或者值为空时,设置目标字段。 |
e_set("a", "123",mode="fill") |
{"a":"123","b":"100"} |
| fill-auto |
当新值非空,且目标字段不存在或者值为空时,设置目标字段。 |
e_set("a", "123",mode="fill-auto") |
{"a":"123","b":"100"} |
| add |
当目标字段不存在时,设置目标字段。 |
e_set("c", 200,mode="add") |
{"a":"","b":"100","c":"200"} |
| add-auto |
当新值非空,且目标字段不存在时,设置目标字段。 |
e_set("c", "",mode="add-auto") |
{"a":"","b":"100"} |
| overwrite |
总是设置目标字段。 |
e_set("a", "123",mode="overwrite") |
{"a":"123","b":"100"} |
| overwrite-auto |
当新值非空,设置目标字段。 |
e_set("b", "123",mode="overwrite-auto") |
{"a":"","b":"123"} |
表达式函数
操作符函数
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| op_if |
根据条件判断,返回相应的值 |
op_if(条件1, 值1, 值2) |
条件为 True 时,返回值1,否则返回值2 |
| op_coalesce |
返回第一个值不为null的表达式的值 |
op_coalesce(条件1, 值1, 值2, ...) |
第一个不为null的值 |
| op_ifnull |
返回第一个值不为null的表达式的值 |
op_ifnull(条件1, 值1, 值2, ...) |
第一个不为null的值 |
| op_and |
对值进行 and 运算,均为 True 时,返回 True,否则返回 False |
op_and(值1, 值2, ...) |
返回计算的结果(Boolean) |
| op_or |
对值进行 or 运算,若存在参数值为 False,则返回 False,否则返回 True |
op_or(值1, 值2, ...) |
返回计算的结果(Boolean) |
| op_not |
对值进行 not 运算 |
op_not(值) |
返回计算的结果(BOOL) |
| op_len |
计算文本字符串中的字符数,可用于字符串和其他返回元组、列表、字典的表达式。 |
op_len(值) |
返回计算的结果(Integer) |
| op_in |
判断字符串、元组、列表或字典中是否包含特定元素,返回True或False。 |
op_in(值, 特定元素) |
返回计算的结果(Boolean) |
| op_not_in |
判断字符串、元组、列表或字典中是否不包含特定元素,返回True或False。 |
op_not_in(值, 特定元素) |
返回计算的结果(Boolean) |
| op_index |
根据字符串、数组、元组的下标返回其对应的元素。 |
op_index(值, 下标) |
返回计算的结果(Any) |
| op_slice |
对指定字符串、数组、元组进行截取。 |
op_slice(值, 开始下标, 结束下标, 步长) |
返回计算的结果(Any) |
转换函数
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| ct_int |
对值进行整型转换,可指定原值的进制,转为十进制数值 |
ct_int(值, base=10) |
返回转换结果(Integer) |
| ct_float |
将值转换为浮点型数值 |
ct_float(值) |
返回转换结果(Float) |
| ct_str |
将值转换为字符串 |
ct_str(值) |
返回转换结果(String) |
| ct_bool |
将值转换为布尔值 |
ct_bool(值) |
返回转换结果(Boolean) |
字符串函数
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| str_uuid |
随机生成UUID |
str_uuid() |
返回值字符串类型(String) |
| str_reverse |
将一个字符串进行反转 |
str_reverse(值) |
返回值字符串类型(String) |
| str_replace |
替换字符串,返回替换结果字符串 |
str_replace(值, 旧字符串, 新字符串, count=0) |
返回值字符串类型(String) |
| str_strip |
移除字符串的开头和结尾处的指定字符 |
str_strip(值, chars=" ") |
返返回值字符串类型(String) |
| str_lstrip |
移除字符串开头处的指定字符。 |
str_lstrip(值, chars=" ") |
返回值字符串类型(String) |
| str_rstrip |
移除字符串结尾处的指定字符。 |
str_rstrip(值, chars=" ") |
返回值字符串类型(String) |
| str_lower |
返回小写字符串 |
str_lower(值) |
返回值字符串类型(String) |
| str_upper |
返回大写字符串 |
str_upper(值) |
返回值字符串类型(String) |
| str_title |
将所有单词的第一个字母转化为大写,其余字母均为小写 |
str_title(值) |
返回值字符串类型(String) |
| str_capitalize |
将字符串的第一个字母转化为大写,其他字母转化为小写 |
str_capitalize(值) |
返回值字符串类型(String) |
| str_swapcase |
对字符串的大小写字母进行转换 |
str_swapcase(值) |
返回值字符串类型(String) |
| str_count |
在值中指定范围内查找子串,返回子串出现的次数 |
str_count(值, 子串, start=0, end=-1) |
返回子串次数(Integer) |
| str_contains |
判断是否存在子串 |
str_contains(值, 子串, start=0, end=-1) |
返回计算的结果(Boolean) |
| str_find |
在值中查找子串,并返回子串出现的位置 |
str_find(值, 子串, start=0, end=-1) |
返回子串位置(Integer) |
| str_rfind |
查找字符串中指定字符或者字符串最后一次出现的位置。 |
str_rfind(值, 子串, start=0, end=-1) |
返回最后子串位置(Integer) |
| str_endswith |
判断字符串是否以指定字符串结尾 |
str_endswith(值, 子串, start=0, end=-1) |
返回是否匹配的结果(Boolean) |
| str_startswith |
判断字符串是否以指定字符串开头 |
str_startswith(值, 子串, start=0, end=-1) |
返回是否匹配的结果(Boolean) |
| str_join |
使用拼接字符串,拼接多值 |
str_join(拼接字符串1, 值1, 值2, ...) |
返回值字符串类型(String) |
日期时间函数
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| dt_parsetimestamp |
将值或时间表达式的值转换为10位时间戳 |
dt_parsetimestamp(值, tz="Local") |
返回转换结果(Integer) |
| dt_parsetimestamp_milli |
将值或时间表达式的值转换为13位时间戳 |
dt_parsetimestamp_milli(值, tz="Local") |
返回转换结果(Integer) |
| dt_parsetimestamp_micro |
将值或时间表达式的值转换为16位时间戳 |
dt_parsetimestamp_micro(值, tz="Local") |
返回转换结果(Integer) |
| dt_parsetimestamp_nano |
将值或时间表达式的值转换为19位时间戳 |
dt_parsetimestamp_nano(值, tz="Local") |
返回转换结果(Integer) |
| dt_str |
将值或时间表达式的值转换为字符串 |
dt_str(值, "格式化字符串", tz="Local") |
返回转换结果(String) |
| dt_now |
获取加工计算时的本地日期和时间 |
dt_now(tz="Local") |
返回获取结果(String) |
| dt_today |
获取加工计算时的本地时间 |
tz="Local" |
返回获取结果(String) |
| dt_currentstamp |
获取当前10位时间戳 |
dt_currentstamp() |
返回当前时间戳结果(Integer) |
| dt_currentstamp_milli |
获取当前13位时间戳 |
dt_currentstamp_milli() |
返回当前时间戳结果(Integer) |
| dt_currentstamp_micro |
获取当前16位时间戳 |
dt_currentstamp_micro() |
返回当前时间戳结果(Integer) |
| dt_currentstamp_nano |
获取当前19位时间戳 |
dt_currentstamp_nano() |
返回当前时间戳结果(Integer) |
正则表达式函数
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| regex_replace |
基于正则匹配并替换(部分匹配) |
regex_replace(字段值, "正则表达式", replace="", count=0) |
返回值字符串类型(String) |
| regex_match |
基于正则对数据进行匹配,返回是否匹配成功,可以选择全匹配还是部分匹配 |
regex_match(字段值, "正则表达式", full=true) |
返回条件值(BOOL) |
| regex_select |
基于正则对数据进行匹配,返回相应的部分匹配结果,可以指定匹配结果的第几个表达式,以及第几个分组(部分匹配+指定捕获组序号),如果最终没有匹配结果,则返回空字符串 |
regex_select(字段值, "正则表达式", mi=0, gi=0) |
返回值字符串类型(String) |
| regex_findall |
基于正则进行匹配,并将匹配结果添加到数组中 |
regex_findall(字段值, "正则表达式") |
返回值数组类型(Tuple) |
| regex_split |
基于正则对数据进行分割,并将匹配结果添加到数组中 |
regex_split(字段值, "正则表达式", maxsplit=0) |
返回值数组类型(Tuple) |
特定结构化数据函数
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| json_select |
根据JMES语法提取或计算JSON表达式中特定的值 |
json_select(值, "JMES语法", default="", restrict=false) |
返回匹配的字段类型(Any) |
| json_parse |
将值解析为JSON对象 |
json_parse(值, default="", restrict=false) |
返回Json化后的对象类型(Any) |
IP解析函数
| 函数名称 |
函数功能 |
函数语法描述 |
返回值类型 |
| ip_version |
判断IP地址为IPv4还是IPv6 |
ip_version(值, default="") |
返回计算结果类型(String) |
| ip2long |
将字符串格式的IP地址转换成长整型数据 |
ip2long(value,default=0) |
返回转换结果(Integer) |
| long2ip |
将长整型数据转换成字符串格式的IP地址 |
long2ip(value,default="") |
返回转换结果(String) |
![]()