Skip To Content

Процессор Сопоставление полей

Процессор Сопоставление полей может быть использован для перевода (или сопоставления) данных из одной схемы записи событий в другую схему записи событий или в структуру. Процессор Сопоставление полей применяется в основных случаях:

  • Выравнивание иерархических или многокомпонентных структур перед маршрутизацией записи события в выходные данные объекта добавления или обновления.
  • Выполнение необходимых изменений имен полей атрибутов или заглавных букв - например, сопоставление TrackID с track_id
  • Выборочное сопоставление интересующих полей с новыми полями для упрощения записи события.
  • Добавление новых полей атрибутов в схему записи события, позволяющую другим процессорам, таким как Обогащение поля (сервис объектов) / Обогащение поля (файл), выполнять запись в существующие поля, а не в новые.
  • Для выполнения отдельных преобразований типов данных, таких как string в long integer или наоборот.
  • Для выполнения вычислений полей (аналогично Процессору Калькулятора поля) при сопоставлении значений полей источника входящего события с полями назначения.

Все данные событий, поступающие в GeoEvent Server, должны иметь соответствующее определение GeoEvent, описывающее имена полей атрибутов, типы данных и общую структуру данных. Процессор Сопоставление полей может использоваться для сопоставления одного определения GeoEvent с другим.

Примеры

Ниже приведены примеры использования процессора Сопоставление полей:

  • Этот процессор может применяться для выполнения необходимых изменений имен полей атрибутов или заглавных букв. Например, данные, полученные с именами атрибутивных полей, такими как ReportedDateTime, могут быть повторно сопоставлены для передачи значений данных в атрибутивное поле с именем reported_dt. Это часто необходимо, когда имена полей атрибутов в полученной схеме не соответствуют требованиям внутренней РСУБД, чтобы имена полей были либо все прописные, либо все строчные.
  • Процессор можно использовать для выборочного сопоставления интересующих полей с новыми полями, чтобы целевая структура событий имела меньше атрибутивных полей, чем исходная. Например, если вы настраиваете входные данные для построения геометрии из полученных значений координат, процессор сопоставления полей может использоваться для удаления значений координат из структуры записи события перед маршрутизацией данных в выходные данные. Он также может использоваться для анонимизации данных о событиях путем удаления имени и адреса клиента, сохраняя при этом название города, штата или другую общую информацию.
  • Процессор можно использовать для добавления дополнительных полей в структуру событий. Это полезно при использовании Процессора Обогащение поля (сервис объектов), поскольку он позволяет процессору писать в существующие поля, а не создавать новые. Использование процессора перед этими другими процессорами позволяет добавлять поля в структуру событий, чтобы процессоры, расположенные далее, могли записывать данные в новые поля.
  • Отдельные записи текстового исходного поля допускают вычисления полей, такие как Процессор Калькулятор поля. Это позволяет использовать несколько значений полей вместе со встроенными функциями для создания сложных сопоставлений значений. Например, значение “12.1 kph” строкового поля speed можно преобразовать в мили в час с помощью формулы toInteger(replace(' kph',''))*0.6214.
  • Процессор может использоваться для выполнения отдельных преобразований типов данных, таких как string в long (например, “3201” в 3201) и long в string (например, 3201 в “3201”). Поскольку GeoEvent Server обрабатывает значения дат в формате long integer, измеренные в миллисекундах эпохи, можно привести дату к формату long, но нельзя использовать процессор сопоставления полей для преобразования date в string или string в date. Вместо него используйте функцию toString( ) в процессоре Калькулятор поля, чтобы конвертировать данные из формата date в string.
  • Процессор может быть использован для выравнивания многокомпонентной или иерархической структуры событий. Обычно это делается перед маршрутизацией записей событий в выходные данные объектов добавления или обновления; записи объектов в базе геоданных не поддерживают иерархические группы или многокомпонентные списки значений данных. Например, ниже показан сценарий, в котором три значения данных (pressure, temperature и humidity) группируются под родительским элементом с именем data. Процессор можно использовать для выравнивания иерархии записей событий путем сопоставления атрибутов сгруппированных ниже данных data с одноранговыми данными, наряду с атрибутами id, status и calibrated.

    Пример иерархии записей событий, сглаженной с помощью Процессора Сопоставление полей

  • При сопоставлении значений, организованных внутри группы, иерархической структуры, используйте при записи точку (.) для доступа к вложенным полям. Например, чтобы отобразить поле pressure, вложенное под группирующим полем data, сопоставьте data.pressure с полем под именем pressure.

    Пример использования точки (.) для доступа к вложенным полям в свойствах Процессора Сопоставление полей

  • При сопоставлении значений, организованных в массиве или списке, или многокомпонентной структуре, используйте индексные обозначения, общие для таких языков программирования, как C# и Java. Например, при наличии списка значений с именем observations для сопоставления третьего значения из списка с новым атрибутом third необходимо сопоставить observations[2] с полем third. Массивы в программировании почти всегда основаны на нуле, то есть индекс первого элемента в массиве равен нулю.
  • Дополнительные сведения см. в разделе Accessing data values в JSON Data Structures - Working with Hierarchy and Multi-cardinality блога Esri Community для примеров иерархических и многокомпонентных данных.

Примечания по использованию

При работе с процессором Сопоставление полей имейте в виду следующее:

  • При настройке процессора Сопоставление полей выберите исходное определение GeoEvent и целевое определение GeoEvent. Поля из целевого определения GeoEvent появляются справа, с ниспадающими списками доступными из исходного определения GeoEvent, что позволяет вам выбрать нужные поля для сопоставления. Для каждого поля отображается тип данных, чтобы помочь идентифицировать соответствующие сопоставления для каждого поля.
  • Определение GeoEvent для записей событий на одном этапе обработки в реальном времени, может не быть согласованным со схемой опубликованного сервиса объектов. Запись события должна быть обработана процессором Сопоставление полей, чтобы согласовать схему каждой записи события со схемой целевых объектов перед тем, как сервис GeoEvent будет обновлять объекты в сервисе объектов. Например, многие каналы данных реального времени (особенно те, которые предоставляют общий JSON) часто предоставляют структуры данных с данными, организованными в виде групп или списков с несколькими значениями. Такие структуры данных не совпадают со схемами сервисов объектов, структуры данных которых являются плоскими и ожидают дискретных типов данных (date, string, long и так далее). Процессор может использоваться для отображения данных из иерархических или многокомпонентных структур данных для создания более простой, плоской структуры данных, такой как определение GeoEvent, импортированное из сервиса объектов.
  • Ниспадающий список, доступный для исходного определения GeoEvent, можно перезаписать, введя текст в текстовое поле. Формулы, идентичные тем, которые используются в Процессоре Калькулятора Поля, теперь можно использовать в каждом текстовом поле выбора исходного поля. Ссылка на исходное поле в формуле осуществляется путем указания имени исходного поля с учетом регистра.
  • Если вы обновляете объекты в опубликованном сервисе пространственных объектов и не хотите, чтобы одно или несколько полей существующих объектов были изменены, и оставляете эти поля несопоставленными в процессоре, то это приведет к записи нулевых значений в несопоставленные атрибуты записей объектов. Вместо того, чтобы оставлять несопоставленные поля в процессоре, удалите поля, которые не должны обновляться. Подробнее см. блог Using a partial GeoEvent Definition to update feature records в Esri Community.

Параметры

Ниже приведены параметры процессора Сопоставление полей:

ПараметрОписание

Имя

Описательное имя процессора, используемое для справочной информации в GeoEvent Manager.

Процессор

Имя выбранного процессора.

Определение GeoEvent источника

Имя определения GeoEvent, из которого будут взяты значения атрибутов.

Примечание:

При сопоставлении значений, организованных внутри группы или иерархической структуры, используйте при записи точку (.) для доступа к вложенным полям. Используйте обозначения индексов массивов, общие для языков программирования, таких как C# и Java, при сопоставлении значений, организованных в виде списка или многокомпонентной структуры.

При использовании формул для вычисления значения целевого поля используйте ту же нотацию, которая используется для поля Expression в Процессоре Калькулятора Поля.

Целевое определение GeoEvent

Имя определения GeoEvent, атрибутивные поля которого будут получать значения из исходной структуры данных.

Советы и ограничения

При использовании процессора Сопоставление полей нужно иметь в виду следующее:

  • Если процессор Сопоставление полей не сможет завершить преобразование типов данных, то в отображаемом поле будет записано нулевое значение. Примером может служить сопоставление атрибутивного с типом данных string, с атрибутивным полем, типом данных которого является double. Процессор не может преобразовать буквенное строковое значение двенадцать в числовое значение, поэтому он записывает нулевое значение в целевое поле.
  • Процессор выборочно относится к данным о событиях, которые он получает. Например, предположим, что процессор сконфигурирован для сопоставления записей событий, связанных с определением GeoEvent Car, со структурой, описанной определением GeoEvent Vehicle. Если процессор получает запись события с атрибутивными данными для судна, он будет считать, что другой процессор ожидает записи событий, структура данных которых соответствует определению GeoEvent Vessel, и позволит записи событий проходить через процессор без изменений.
  • Процессор не будет пропускать или очищать записи событий, если сопоставление полей между исходным и целевым определениями 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 в подструктуре координат.