Ich habe eine Aggregatfunktion geschaffen, die in Aero-Spike arbeitet, die in AQL funktioniert:Aerospike NodeJS UDF Aggregation Fehler
AGGREGATE filter2.check_teamId('123', 0, 1456499994597) ON analytics.tracking
WHERE teamId = '123'
Dies liefert Ergebnisse. ich dann versuchen, die gleiche UDF in NodeJS zu verwenden:
var statement = {
aggregationUDF: {module: 'filter2', funcname: 'check_teamId',
arg:['123', 0, 1456499994597]}
};
var query = client.query('analytics', 'tracking', statement);
var stream = query.execute();
Das Ergebnis ist ein scheinbar uninformativ Fehler ist:
{ code: 100,
message: 'UDF: Execution Error 1',
func: 'as_query_aggregate',
file: 'src/main/aerospike/aerospike_query.c',
line: 903 }
Der Server-Logs Zustand:
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)
Hat jemand haben Sie irgendwelche Tipps, um eine UDF mit NodeJS zu arbeiten? Oder irgendwelche Ideen, wie man den Fehler diagnostiziert?
Ich habe den Benutzer UDF Speicherort in der Konfiguration festgelegt, die das Ergebnis nicht beeinflusst.
UPDATE: Hier ist der lua-Code:
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
Wie lautet der Code für die UDF 'check_teamId'? –
Sie haben auch eine 'WHERE'-Klausel in der AQL-Anweisung, aber keinen' filters'-Abschnitt in Ihrem Anweisungsobjekt in der Node.JS-Version. –
Danke @AdamB. Mit dem obigen Lua-Code aktualisiert. Die WHERE-Klausel ist nicht wirklich erforderlich, und die Abfrage läuft ohne sie einwandfrei. – TStu