ExtractAvroToAttributes 提取匹配值
说明
通过提供动态参数配置,必须为Record Path表达式,根据匹配情况决定提取为相应的输出。
其中Record Path表达式是标准规范,支持子节点、数组及数组下标等,可参考文档手册。
参数说明
- 递归子元素:当Record Path表达式计算所得为Record时,默认仅提取第一级的字段和值,而不递归处理子元素是Record的情况。
- 允许数组:当Record Path表达式计算所得为数组时,是否提取数组中的对象并添加相应的序号来分别。
- 包含字段:当无
排除字段
参数无指定时,如果不设置该参数,则默认包含全部表达式计算出的字段;否则仅包含指定的字段。支持正则表达式 - 排除字段:优先按该参数设置排除相应的字段。支持正则表达式。如果同时设置
包含字段
,则可支持包含字段
中设置大范围的正则,然后在排除字段
中进行二次正则筛选。 - 字段名大小写敏感:用于
包含字段
和排除字段
参数设置的正则表达式中是否忽略大小敏感。 - 包含参数名:指定是否将动态参数名作为最终输出的提取属性名的一部分,还是仅做为属性提取标记用。如果提取值为字面值,而不是对象或数组,则强制使用动态参数名作为属性名输出。
- <动态参数>:通过提供动态参数,指定需要提取的Record字段的Record Path表达式,支持标准的Record Path表达式。默认不提供任何动态参数,表示从根提取全部,即等同设置”ALL = /“。
示例说明
样本Avro的JSON数据
{
"name": "数聚蜂巢",
"site": "https://www.baishan.com/tech/orchsym",
"age": 3,
"details": {
"address": {
"street": "望京",
"city": "北京",
"country": "中国"
},
"post": 100000,
"tel": "010-12345678",
"tags": [
"Data",
"Integration",
"API"
]
},
"links": [
{
"name": "白山云",
"url": "http://www.baishan.com"
},
{
"name": "白山云",
"url": "http://www.baishancloud.com"
},
{
"name": "Orchsym",
"url": "https://www.baishan.com/tech/orchsym/"
}
]
}
Avro Schema信息:
{
"name": "demo",
"type": "record",
"namespace": "com.orchsym.avro",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "site",
"type": "string"
},
{
"name": "age",
"type": "int"
},
{
"name": "details",
"type": {
"name": "details",
"type": "record",
"fields": [
{
"name": "address",
"type": {
"name": "address",
"type": "record",
"fields": [
{
"name": "street",
"type": "string"
},
{
"name": "city",
"type": "string"
},
{
"name": "country",
"type": "string"
}
]
}
},
{
"name": "post",
"type": "int"
},
{
"name": "tel",
"type": "string"
},
{
"name": "tags",
"type": {
"type": "array",
"items": "string"
}
}
]
}
},
{
"name": "links",
"type": {
"type": "array",
"items": {
"name": "links_record",
"type": "record",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "url",
"type": "string"
}
]
}
}
}
]
}
根提取
不指定Record Path表达式的动态参数,则默认为参数名ALL
,值为 /
。
如需修改参数名,则需要显式指定,比如参数名为 data
。
仅提取第一级字段
仅提取第一级字段并添加了设置字段过滤。
参数设置
- 包含字段: 设置了正则表达式
"(.*)a(.*)"
,表示仅提取包含a字母的字段。 - 其他默认值。
由于未设置递归子元素
,则仅提取第一级的字段为属性。
结果
由于默认的动态参数表达式为”ALL = /“
, 则提取到的属性为 ”ALL.age“ 和 ”ALL.name“, 其他为组件内置属性。
可以看出,相应提取后的结果仅包含”name“ 和 ”age“,而排除了 ”site“字段:
ALL.name = 数聚蜂巢
ALL.age = 3
支持子元素、数组、包含参数名
设置可递归子元素,支持数组值提取,以及自定义了动态参数名,并将值为URL的字段排除掉。
参数设置
- 递归子元素 设置为允许。
- 允许数组:设置为支持。
- 排除字段:排除值是URL的字段,”site“和”url“。
- <动态参数>:设置动态参数名为”data“,避免默认的内嵌动态参数名”ALL“。
结果
所有属性均以动态参数名”data“为开头,并成功提取到了子元素和数组字段:
data.name = 数聚蜂巢
data.age = 3
data.details.address.city = 北京
data.details.address.country = 中国
data.details.address.street = 望京
data.details.post = 100000
data.details.tel = 010-12345678
data.details.tags.0 = Data
data.details.tags.1 = Integration
data.details.tags.2 = API
data.links.name.0 = 白山云
data.links.name.1 = 白山云
data.links.name.2 = Orchsym
支持子元素、数组、不包含参数名
设置可递归子元素,支持数组值提取,还将值为URL的字段排除掉,并设置不包含参数名,所以动态参数名社资格可任意。
参数设置
- 递归子元素 设置为允许。
- 允许数组:设置为支持。
- 排除字段:排除值是URL的字段,”site“和”url“。
- 包含参数名:设置为不包含。
- <动态参数>:设置动态参数名为”ABC“,由于表达式为
”/*“
,且不包含参数名,计算出的结果为对象,则参数名始终被忽略掉。
结果
所有属性仅保留字段作为属性名,并成功提取到了子元素和数组字段:
name = 数聚蜂巢
age = 3
details.address.city = 北京
details.address.country = 中国
details.address.street = 望京
details.post = 100000
details.tel = 010-12345678
details.tags.0 = Data
details.tags.1 = Integration
details.tags.2 = API
links.name.0 = 白山云
links.name.1 = 白山云
links.name.2 = Orchsym
表达式提取
支持数组、不包含参数名
显式指定提取部分字段的多个动态参数和Record Path表达式。
参数设置
- 允许数组:设置为支持。
- 排除字段:排除值是URL的字段,
”url“
。 - 包含参数名:设置为不包含。
- <动态参数>:设置4个动态参数,比如
”the_name“
与原名字不同,”links“
指向数组。
结果
对于字面值的提取,提取后的属性以动态参数的名字作为新属性名,比如”the_name“
:
the_name = 数聚蜂巢
url =
post = 100000
tel = 010-12345678
tags.0 = Data
tags.1 = Integration
tags.2 = API
name.0 = 白山云
name.1 = 白山云
name.2 = Orchsym
其中,由于”url“指定的Record Path表达式没有对应的值,所以为空字符串, 而排除字段仅排除数据中存在的字段。
支持子元素、数组、不包含参数名
显式指定提取部分字段的多个动态参数和Record Path表达式。
参数设置
- 递归子元素 设置为允许。
- 允许数组:设置为支持。
- 排除字段:排除值是URL的字段,”url“。
- 包含参数名:设置为不包含。
- <动态参数>:设置动态参数,比如
”the_name“
与原名字不同,”links“
指向数组,“url_2”
指向数组的第二个。
结果
对于字面值的提取,提取后的属性以动态参数的名字作为新属性名,比如”the_name“
:
the_name = 数聚蜂巢
address.city = 北京
address.country = 中国
address.street = 望京
post = 100000
tel = 010-12345678
tags.0 = Data
tags.1 = Integration
tags.2 = API
name = 白山云
name.0 = 白山云
name.1 = 白山云
name.2 = Orchsym
其中, “name”为动态参数“url_2”
所指定的数组第二个对象字段过滤掉“url”后剩下的“name”。
数组序号引用
通过指定Record数组的序号的Record Path表达式来提取属性。
参数设置
- 允许数组:设置为支持。
- 排除字段:排除值是URL的字段,”name“。
- 包含参数名:设置为不包含。
- <动态参数>:设置动态参数,指定数组序号的Record Path。
结果
url = http://www.baishancloud.com
url.0 = http://www.baishan.com
url.1 = https://www.baishan.com/tech/orchsym/
由于排除了”name“字段,尽管设置了”the_name“
,但被过滤掉,并且”links“下的”name“字段也被过滤掉。
注意: ”url.1“实际上是第三个,由于该索引序号是由结果而来,无从指定原始Record中的索引序号,所以是序号1,是依据结果进行排序。
简单类型数组引用
参数设置
- 允许数组:设置为支持。
- 包含参数名:设置为不包含。
- <动态参数>:设置动态参数,仅指定简单类型数组。
结果
the_tag.0 = Data
the_tag.1 = Integration
the_tag.2 = API
由于动态参数指定的是数组,如果参数不支持数组,则没有任何属性结果。
流程模板
参见附件(请右键另存保存):提取属性模板