你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用数据流扩充数据
重要
本页包含使用 Kubernetes 部署清单(目前为预览版)管理 Azure IoT 操作组件的说明。 此功能存在若干限制,不应该用于生产工作负载。
有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款。
可以使用上下文化数据集功能来扩充数据。 在处理传入记录时,可以根据与传入记录的字段相关的条件来查询这些数据集。 此功能可以实现动态交互。 这些数据集中的数据可用于补充输出字段中的信息,并在映射过程中参与复杂的计算。
若要将示例数据加载到状态存储中,请使用状态存储 CLI。
例如,来看看以下数据集,其中包含几条记录,这些记录以 JSON 记录形式表示:
{
"Position": "Analyst",
"BaseSalary": 70000,
"WorkingHours": "Regular"
},
{
"Position": "Receptionist",
"BaseSalary": 43000,
"WorkingHours": "Regular"
}
映射器根据映射配置中指定的条件,使用一个键值来访问存储在 Azure IoT 操作状态存储中的引用数据集。 状态存储中的键名称对应于数据流配置中的数据集。
datasets: [
{
key: 'position',
inputs: [
'$source.Position' // - $1
'$context.Position' // - $2
],
expression: '$1 == $2'
}
]
处理新记录时,映射器将执行以下步骤:
- 数据请求:映射器向状态存储发送请求,以检索存储在
Position
键下的数据集。 - 记录匹配:随后,映射器查询此数据集,以查找数据集中的
Position
字段与传入记录的Position
字段匹配的第一条记录。
{
inputs: [
'$context(position).WorkingHours' // - $1
]
output: 'WorkingHours'
}
{
inputs: [
'BaseSalary' // - - - - - - - - - - - - $1
'$context(position).BaseSalary' // - - $2
]
output: 'BaseSalary'
expression: 'if($1 == (), $2, $1)'
}
在此示例中,WorkingHours
字段将添加到输出记录,而仅当传入记录不包含 BaseSalary
字段(如果该字段是可为 null 的字段,则值为 null
)时,才会按条件使用 BaseSalary
。 并非每条传入记录都会触发对上下文化数据的请求。 映射器请求数据集,然后从状态存储收到有关更改的通知,同时它使用数据集的缓存版本。
可以使用多个数据集:
datasets: [
{
key: 'position'
inputs: [
'$source.Position' // - $1
'$context.Position' // - $2
],
expression: '$1 == $2'
}
{
key: 'permissions'
inputs: [
'$source.Position' // - $1
'$context.Position' // - $2
],
expression: '$1 == $2'
}
]
然后使用混合引用:
inputs: [
'$context(position).WorkingHours' // - $1
'$context(permissions).NightShift' // - $2
]
输入引用使用数据集的键,例如 position
或 permission
。 如果不方便使用状态存储中的键,可以定义别名:
datasets: [
{
key: 'datasets.parag10.rule42 as position'
inputs: [
'$source.Position' // - $1
'$context.Position' // - $2
],
expression: '$1 == $2'
}
]
该配置将键为 datasets.parag10.rule42
的数据集重命名为 position
。