Record Filter¶
支持根据用户配置的表达式对输入数据做过滤。
配置详情¶
该算子的配置包括 General,Basic 和 Input/Output 的详细信息,各字段的配置如下:
General¶
名称 |
是否必须 |
描述 |
---|---|---|
Name |
Yes |
算子名称 |
Description |
No |
算子描述 |
Stage Library |
Yes |
算子所属的库 |
Required Fields |
No |
数据必须包含的字段,如果未包含指定字段,则 record 将被过滤掉 |
Preconditions |
No |
数据必须满足的前提条件,如果不满足指定条件,则 record 将被过滤掉。例如: |
On Record Error |
Yes |
对错误数据的处理方式,可选:
|
Basic¶
名称 |
是否必须 |
描述 |
---|---|---|
Quality Filter |
No |
根据数据质量过滤处理数据,只有符合质量条件的 record 才会进行此次处理 |
Filter Expression |
Yes |
根据配置的表达式过滤数据,具体的表达式语法请参见下文中:Filter Expression 语法概要 |
Output Measurement ID |
Yes |
满足 Filter Expression 的数据,其中的 measurementId 都会被替换为配置的 Output Measurement ID。注:如果一条数据满足多个 Filter Expression,那么这条记录会输出多次,且输出记录中的 mesurementId 都会被相应替换 |
Filter Expression 语法概要¶
为了支持更灵活方便的筛选数据,Filter Expression 配置支持使用 Aviator Script 来对输入数据进行过滤。 此处简要介绍针对该算子使用场景的相关语法及函数,如果需进一步了解细节,可参考Aviator Script 文档
基本类型及运算¶
类型 |
说明 |
示例 |
---|---|---|
数字 |
可以为整数、浮点数等 |
123,3.1415 |
字符串 |
以单引号或者双引号括起来的连续字符 |
‘hello’,”world” |
+, -, *, / |
加减乘除,+也可用于拼接字符串 |
1+1.2, 5/2, ‘ab’ + ‘c’ |
<, <=, >, >=, ==, != |
比较运算符 |
3 != 1 |
&&, ||, ! |
逻辑与/或/非运算符 |
true && false |
变量¶
在 Filter Expression 配置中一般不会直接创建变量,Record Formatter 算子已经将输入的数据转换名字为 record 的对象以供使用。
内置对象 |
说明 |
---|---|
record |
输入数据会被转换为Map对象传入表达式执行上下文,可以通过 record 作为变量名进行访问。 注意:对于一批输入数据,record 仅代表其中一条数据,表达式会依次作用在一批数据中的每一条记录上。 |
由于 record 是一个 Map 对象,除了使用函数访问 Map 对象中内容外,Aviator 也提供了相应的语法。此处简要举例如下:
语法 |
说明 |
---|---|
record.a.b |
表示访问变量 record 上 a 属性中的 b 属性的值 |
#record.a[1].b |
表示访问变量 record 上数组 a 中第 2 个(从 0 开始)对象的 b 属性值,注意:如果访问路径中变量是数组 /List 中元素,需要以 # 符号开始 |
#`record.name:a.b` |
表示访问变量 record 上name:a 属性中 b 属性的值,注意:如果访问的属性/变量名称包含特殊字符,需要用 # 加上两个 `` 来包围 |
常用函数¶
Aviator Script 中内置了诸多函数,在此仅列出配置 Filter Expression 时候的常用函数,更多函数请参见 Aviator Script 文档。
函数 |
说明 |
---|---|
seq.contains_key(map, key) |
从 list、数组或者 map 获取对应的元素值,对于 list 和数组, element 为元素的索引位置(从 0 开始),对于 map 来说, element 为 key |
seq.get(map, element) |
当 map 中存在 key 的时候(可能为 null),返回 true。对于数组和链表,key 可以是 index,当 index 在有效范围 [0..len-1],返回 true,否则返回 false |
string.startsWith(s1,s2) |
字符串 s1 是否以字符串 s2 开始,返回 Boolean |
string.endsWith(s1,s2) |
字符串 s1 是否以字符串 s2 结束,返回 Boolean |
示例¶
对于如下一条记录:
{
"orgId": "o15638787142121",
"modelId": "Darwen_SGBuilding",
"modelIdPath": "/Darwen_Building/Darwen_SGBuilding",
"assetId": "UXQB9oLc",
"pointId": "temp",
"time": 1542609276270,
"value": 23.4,
"quality": 0,
"dq": 0,
"attr": {},
"measurementId": "Darwen_SGBuilding::temp",
"assetTags": {
"DCMModel": {
"DcmModel:Darwen_Building": null,
"DcmModel:Darwen_SGBuilding": null
}
},
"measurementTags": {
"MyHaystack": {
"MyHaystack:zone": {"floor": 2},
"MyHaystack:co2": null,
"MyHaystack:sensor": null
}
}
}
Filter Expression 示例 |
说明 |
---|---|
|
先判断 record.assetTags.DCMModel 这个 Map 对象中是否包含名称为 DcmModel:Darwen_SGBuilding 的 Key,如果为真,则继续判断 record.measurementTags.MyHaystack.MyHaystack:zone.floor 是否大于 1,两者都为真,则返回 true |
输出结果¶
输出示例¶
配置信息:

