Я пытаюсь использовать кодек Mapper в своей цепочке подключений для преобразования объекта JSON, который выглядит следующим образом:
{"test2":[
["column1","column2","column3"],
["16091", "449", "05302018"],
["16092", "705", "05302018"]
]}
к типу EPL. Для меня это выглядит как последовательность последовательностей, поэтому я использовал
event test1 {
sequence<string> values;
}
event test2 {
sequence<test1> tests;
}
Но это дает мне ошибку
Unable to parse event test.1: Incorrect type in get (you asked for map but its' actually list)
Есть идеи, как мне использовать кодек Mapper для этой цели?

вы хотите, чтобы ваш тип мероприятия выглядел так:
event type1 {
sequence<sequence<string> > data;
}
в картографе невозможно напрямую преобразовать в вашу схему type2 / type1, но вы можете написать свой собственный кодек для этого или выполнить пост-фильтрацию в EPL.
HTH, Мэтт
Если явно не переназначить, это не совсем сработает. Вы должны рассмотреть всю структуру документа сверху вниз. Это не последовательность строк - это объект / словарь JSON на верхнем уровне, значение которого представляет собой последовательность последовательностей строк.
Объект / словарь JSON может отображаться на тип события на основе имен полей. Итак, как сказал Мэтт, для документа JSON, подобного вашему, потребуется тип события, например
event SomeEventType {
sequence<sequence<string > > test2;
}
Если нецелесообразно создавать тип события, который точно соответствует структуре документа JSON, вам необходимо использовать кодек сопоставления, чтобы изменить порядок полей в документе JSON, чтобы они соответствовали полям и подполям в типе события. Или, возможно, собственный кодек; Я думаю, что Мэтт прав в том, что картограф не может делать точно, что вы хотите.
Кроме того, поскольку документы JSON не имеют типов на верхнем уровне, вам необходимо убедиться, что тип события каким-то образом определен. Есть несколько способов сделать это.
(1) Если это конкретное соединение будет отправлять вам только события типа один, вы можете использовать параметр конфигурации 'defaultEventType' подключаемого модуля хоста apama.eventMap в верхней части вашей цепочки, например.
apama.eventMap:
defaultEventMap: SomeEventType
(2) Если это зависит от структуры документа, вам необходимо использовать кодек классификатора. Это может принять сообщение, идущее к коррелятору, и назначить ему тип события на основе содержимого полей (или просто их присутствия). Вы можете узнать об этом в документации.
(3) Транспорт иногда определяет это в сообщениях, отправляемых коррелятору. Например, в случае транспорта универсального обмена сообщениями в качестве типа будет использоваться «тег» события единой системы обмена сообщениями. Это может быть подходящим, а может и не подходящим.
Если вы в конечном итоге сделаете что-нибудь нетривиальное с классификатором или картографом, я настоятельно рекомендую использовать «диагностический кодек», чтобы помочь в разработке правил классификатора или преобразователя. Это кодек, который вы можете разместить где угодно в цепочке кодеков, которые будут регистрировать каждое событие, проходящее через него, чтобы вы могли видеть, как работают ваши правила, наблюдая, что происходит до и после классификации / сопоставления. Вы можете прочитать об этом в документации, но обычно это так же просто, как помещать '- DiagnosticCodec' где-нибудь в вашей цепочке. Я обнаружил, что это абсолютно бесценный при отладке цепочек подключения.