Работа с архитектурой TEDA 4.2. Как вызвать оператор LookUpCache в цикле?
Работа с архитектурой TEDA 4.2. Как вызвать оператор LookUpCache в цикле?
У меня есть вход как a1;b1;c1|a2;b2;c2|a3;b3;c3
Теперь я хочу использовать a1, a2 и a3 в качестве ключа поиска и генерировать кортеж для каждого (в качестве вывода). Я извлек a1,a2,a3, используя токенизатор, но как передать его оператору LookupCache, чтобы он использовал все ключи один за другим и генерировал 3 кортежа.
1 ответ
Используя платформу приложения TEDA, вам необходимо подготовить схему TypesCommon.ReaderOutStreamType, которая является выходом синтаксического анализа и вводом данных. Он расширен атрибутами, указанными в типе xxx.streams.custom::TypesCustom.LookupType.
В xxx.streams.custom.TypesCustom.spl
static LookupType = tuple<
// ------------------------------------------------
// custom code begin
// ------------------------------------------------
// add your custom attributes here
// key attribute for LookupCache, e.g. a1, a2, a3 from input
rstring a
// ------------------------------------------------
// custom code end
// ------------------------------------------------
>;
В xxx.chainprocessor.transformer.custom.DataProcessor.spl вы можете подготовить извлекать ключевой атрибут для вашего поиска, заполнить a
атрибут и отправить n кортежей (LookupStream) оператору LookupCache из одного входного кортежа (InRec)
(stream<I> LookupStream as O) as PrepareLookup = Custom(InRec as I) {
logic
onTuple I: {
mutable list<rstring> list1 = tokenize(attrInput, "|", true);
for (rstring val in list1) {
mutable list<rstring> list2 = tokenize(val, ";", true);
I.a = list2[0];
submit(I, O); // submit for a1, a2 ...
}
}
onPunct I: {
if (currentPunct() == Sys.WindowMarker) {
submit(Sys.WindowMarker, O);
}
}
}
stream<I> EnrichedRecords = LookupCache(LookupStream as I) {
param
segmentName: "yourSeg"; // The name of the physical memory segment
containerName: "yourContainer"; // The name of the store
useMutex: false; // Don't protect data with mutex
mutexName: "";
key: I.a;
keyType: rstring; // SPL type of key
found: I.lookupFound; // attribute that takes lookup success
valueType: TypesCustom.YourType_t; //type of lookup table value as also defined in LookupManager
disableLookup: $disableLookup; // always pass through this parameter
applControlDir: $applControlDir; // always pass through this parameter
}