Utworzyłem łączną funkcję, która działa w aerospike który pracuje w AQL:Aerospike NodeJS UDF Agregacja Błąd
AGGREGATE filter2.check_teamId('123', 0, 1456499994597) ON analytics.tracking
WHERE teamId = '123'
ta zwraca wyniki. ja potem próbuje użyć tego samego UDF w NodeJS:
var statement = {
aggregationUDF: {module: 'filter2', funcname: 'check_teamId',
arg:['123', 0, 1456499994597]}
};
var query = client.query('analytics', 'tracking', statement);
var stream = query.execute();
Rezultatem jest pozornie uninformative błąd:
{ code: 100,
message: 'UDF: Execution Error 1',
func: 'as_query_aggregate',
file: 'src/main/aerospike/aerospike_query.c',
line: 903 }
Stan logi serwera:
Feb 28 2016 22:33:58 GMT: INFO (scan): (scan.c::933) starting aggregation scan job 1201452721893048027 {analytics:tracking} priority 2
Feb 28 2016 22:33:58 GMT: INFO (scan): (scan.c::1026) finished aggregation scan job 1201452721893048027 (0)
Czy ktoś masz jakieś wskazówki dotyczące uzyskania UDF do pracy z NodeJS? Albo jakieś pomysły, jak zdiagnozować błąd?
Ustawiłem lokalizację użytkownika UDF w konfiguracji, która nie ma wpływu na wynik.
UPDATE: Oto kod lua:
local function map_profile(record)
return map {interaction=record.interaction,
teamId=record.teamId, datetime=record.datetime,
timestamp=record.timestamp, version=record.version,
interactions=record.interactions}
end
function check_teamId(stream, teamId, startDate, endDate)
local function filter_teamId(record)
return record.teamId == teamId and
record.timestamp >= startDate and record.timestamp <= endDate
end
return stream : filter(filter_teamId) : map(map_profile)
end
Jaki jest kod dla UDF 'check_teamId'? –
Ponadto, masz klauzulę "WHERE" w instrukcji AQL, ale nie ma sekcji "filters" w twoim obiekcie instrukcji w wersji Node.JS. –
Dzięki @AdamB. Zaktualizowany kodem lua powyżej. Klauzula WHERE nie jest faktycznie wymagana, a zapytanie działa bez niej. – TStu