字段映射器处理器用于将一个事件记录方案或结构中的数据转换(或映射)到另一个事件记录方案或结构中。 字段映射器处理器具有以下主要用途:
- 在将事件记录路由到添加或更新的要素输出之前,将层次结构或多基数结构展平
- 处理属性字段名称或大小写的必要更改(例如,映射 TrackID) track_id
- 将感兴趣的字段选择性地映射到新字段,以简化事件记录。
- 向事件记录方案添加新属性字段,以允许其他处理器(例如字段丰富器(要素服务)/字段丰富器(文件))写入到现有字段而不是新字段。
- 执行显式数据类型转换,例如将字符串转换为长整数,反之亦然。
- 在将传入事件源字段值映射到目标字段时执行字段计算(类似于字段计算器处理器)。
导入 GeoEvent Server 的所有事件数据应该具有关联的 GeoEvent 定义,该定义用于定义属性字段名称、数据类型和整体数据结构。 字段映射器处理器可用于将一个 GeoEvent 定义映射到另一个 GeoEvent 定义。
示例
以下是字段映射器处理器的用例:
- 该处理器可用于处理属性字段名称或大小写的必要更改。 例如,可重新映射已添加到属性字段名称的数据(如 ReportedDateTime),以将数据值传输到名为 reported_dt 的属性字段。 当接收到的方案中的属性字段名称不符合后端 RDMS 要求,即字段名称全部大写或全部小写时,通常需要使用此处理器。
- 处理器可用于将感兴趣的字段选择性地映射到新字段,因此目标事件结构比源事件结构的属性字段少。 例如,如果将输入配置为根据接收到的坐标值构造几何,则可以使用字段映射器处理器在将数据路由到输出之前从事件记录结构中删除坐标值。 字段映射器处理器还可以通过删除客户的姓名和街道地址,而保留城市、州或其他常规信息的名称来对事件数据进行匿名处理。
- 处理器可用于将更多字段添加到事件结构。 这在使用字段丰富器(要素服务)处理器时非常有用,因为其允许此处理器写入现有字段,而不是新建字段。 在其他处理器之前使用该处理器可允许您将字段添加到事件结构中,从而允许下游处理器将数据写入新字段。
- 单个源字段文本框条目接受字段计算,例如字段计算器处理器。 这允许将多个字段值与内置函数结合使用,以创建复杂的值映射。 例如,可以使用公式 toInteger(replace(' kph',''))*0.6214 将字符串字段 speed 值 “12.1 kph” 转换为英里/小时。
- 处理器可用于执行显式数据类型转换,例如将字符串转换为长整型(如 “3201” 转换为 3201),以及将长整型转换为字符串(如 3201 转换为 “3201”)。 由于 GeoEvent Server 将日期值处理为以新纪元毫秒为单位的长整数,因此,可以将日期显式转换为长整型,但是不能使用字段映射器处理器将日期转换为字符串或将字符串转换为日期。 但是,可以使用字段计算器处理器中的 toString( ) 函数将日期转换为字符串。
- 处理器可用于展平多基数或层次结构的事件结构。 通常,展平操作需要在将事件记录路由到添加或更新要素输出之前完成。地理数据库中的要素记录不支持层次结构组或多基数数据值列表。 如下所示,三个数据值(pressure、temperature 和 humidity)分组在名为 data 的父元素下。 可以使用处理器来展平事件记录的层次结构,方法是映射分组至 data 下的属性,以使其与属性 id、status 和 calibrated 一同显示。
- 当映射在组内、层次结构中组织的值时,请使用点 (.) 符号来访问嵌套字段。 例如,要映射分组 data 字段下嵌套的 pressure 字段,可将 data.pressure 映射到名为 pressure 的字段。
- 当映射在数组、列表或多基数结构内组织的值时,请使用诸如 C# 和 Java 等编程语言中的通用索引符号。 例如,给定一个名为 observations 的值列表,要将列表中的第三个值映射到名为 third 新属性,则需要将 observations[2] 映射到名为 third 的字段。 在编程中,数组几乎总是从零开始,这意味着数组中第一个元素的索引为零。
- 有关详细信息,请参阅 Esri 社区上的 JSON 数据结构 - 使用层次结构和多基数博客中的访问数据值部分,以了解层次结构和多基数数据的示例。
用法说明
使用字段映射器处理器时,请记住以下事项:
- 配置字段映射器处理器时,请选择一个源 GeoEvent 定义和目标 GeoEvent 定义。 目标 GeoEvent 定义中的字段显示在右侧,可通过源 GeoEvent 定义中的下拉列表选择适当的映射字段。 系统将显示每个字段的数据类型,以帮助识别每个字段的适当映射。
- 某个实时处理阶段中事件记录的 GeoEvent 定义可能与已发布要素服务的方案不一致。 事件记录将需要由字段映射器处理器进行处理,以在 GeoEvent 服务能够更新要素服务中的要素前转换所有事件记录的方案,使其与目标要素的方案相匹配。 例如,许多实时数据源(尤其是提供通用 JSON 的数据源)经常提供的数据结构为以组或列表形式组织的具有多个值的数据。 此类数据结构与数据结构是平面的要素服务方案不一致,需要离散数据类型(日期、字符串、长整型等)。 处理器可用于映射来自层次结构或多基数数据结构的数据,以创建更简单的平面数据结构,例如从要素服务导入的 GeoEvent 定义。
- 可通过在文本框中键入内容来覆盖可用于源 GeoEvent 定义的下拉列表。 现在,可以在每个源字段选择文本框中使用与字段计算器处理器中使用的公式相同的公式。 通过提供源字段的区分大小写的名称,可以在公式中引用源字段。
- 如要在已发布的要素服务中更新要素,并且不想修改现有要素的一个或多个字段,那么在处理器中不映射这些字段,将导致在要素记录的未映射属性中写入空值。 为了不在处理器留下未映射字段,需清除不应更新的字段。 有关详细信息,请参阅 Esri 社区上的使用部分 GeoEvent 定义更新要素记录博客。
参数
以下是字段映射器处理器的参数:
参数 | 描述 |
---|---|
名称 | 用于在 GeoEvent Manager 中引用的处理器的描述性名称。 |
处理器 | 所选处理器的名称。 |
源 GeoEvent 定义 | 将从中获取属性值 GeoEvent 定义的名称。 注:当映射在组内或层次结构中组织的值时,请使用点 (.) 符号来访问嵌套字段。 当映射在列表或多基数结构中组织的值时,请使用 C# 和 Java 等编程语言中通用的数组索引符号。 在使用公式计算目标字段的值时,使用与Expression字段计算器处理器中的 字段相同的注记。 |
目标 GeoEvent 定义 | 对于从源数据结构接收值的属性字段,其 GeoEvent 定义的名称。 |
注意事项和限制
使用字段映射器处理器时,需要牢记几点注意事项:
- 如果字段映射器处理器无法完成数据类型转换,则映射字段中将写入空值。 例如,将数据类型为字符串的属性字段映射到数据类型为双精度的属性字段时。 处理器无法将文字字符串值 twelve 转换为数值,因此它会在目标字段中写入空值。
- 处理器对于其接收到的事件数据特别挑剔。 例如,假设处理器已配置为将与汽车 GeoEvent 定义相关的事件记录映射到由车辆 GeoEvent 定义描述的结构。 如果处理器接收到包含船只属性数据的事件记录,则它将假定下游的另一个处理器正在期待其数据结构与船只 GeoEvent 定义相匹配的事件记录,并会允许事件记录通过未经修改的处理器。
- 如果源 GeoEvent 定义和目标 GeoEvent 定义之间的字段映射不正确,处理器将不会删除或放弃事件记录。 事件记录将继续使用源 GeoEvent 定义方案进行处理,而目标 GeoEvent 定义将被忽略。 例如,如果目的是将源方案中名为 TrackID 的字段映射到目标方案中名为 track_id 的字段,但因输入错误将源字段指定为 TrackIDs,则处理器将不会映射任何字段。 相反,处理器将通过使用源 GeoEvent 定义的原始事件记录。 如果错误地指定了用于引用层次结构值的点或索引符号,也会如此。
字段名称界定
通常被识别为算术函数或运算符的字符不应用于属性字段的名称中。 处理器使用的表达式解析程序无法区分表达式 subtract accuracy from gps 和 gps-accuracy(其中的短划线是属性字段名称的一部分),除非字段名称本身被包装在专用于将字段名称与表达式的其余部分分开的语法中。
当来自外部源的数据在属性字段名称中所含的允许使用的元字符与加号 (+)、减号 (-)、乘号 (*) 或除号 (/) 等通常识别为算术函数的字符发生冲突时,您必须将属性名称用 ${} 括起来,以指示表达式解析程序将字段名称与表达式的其余部分分开解释。
在下面的示例中,给定一个表示为通用 JSON 的传感器记录,您将必须编写属性子结构中 gps-accuracy 键的引用代码,以解决字段名称中包含文字短划线这一情况。
允许使用 @deviceID 和 @address 键中的与号 (@) 字符,但是不建议使用。 有关详细信息,请参阅字段命名限制。 如果无法更新或更改数据的方案,则应在事件处理工作流中尽早使用字段映射器处理器,以从字段名称中移除非字母数字字符。 第 1 行和第 2 行中所示的表达式实现了这一点,而无需将属性名称括在 ${} 中以界定字段名称。
第 3 行中显示的表达式使用所需的点符号 (.) 标记 @notes 键在属性子结构中的地址。 同样,虽然允许,但不建议在字段名称中包含与号 (@) 字符。 元字符不会导致表达式解析程序出现任何特殊的歧义,因此不需要将属性名称括在 ${} 中。
在键 gps-accuracy 中添加短划线 (-) 不会产生歧义。 因此第 4 行所示的表达式使用 ${} 语法专门分隔字段名称。 用于标记 gps-accuracy 键在属性子结构中地址的点符号将合并至 ${} 语法中。
了解到在 GeoEvent 服务的早期需要使用字段映射器处理器推广字段命名准则,图示的解决方案已将输入配置为不根据接收到的坐标创建几何。 第 5 行所示的表达式使用一个函数动态生成几何并将其映射到名为 Geometry 的字段。 请注意在函数的参数中使用点符号标记 Longitude 和 Latitude 键在坐标子结构中的地址。