ho creato una funzione di aggregazione che opera in aerospike che funziona in AQL:Aerospike NodeJS UDF di aggregazione errore
AGGREGATE filter2.check_teamId('123', 0, 1456499994597) ON analytics.tracking
WHERE teamId = '123'
Questo restituisce risultati. che sto quindi cercando di utilizzare lo stesso UDF in NodeJS:
var statement = {
aggregationUDF: {module: 'filter2', funcname: 'check_teamId',
arg:['123', 0, 1456499994597]}
};
var query = client.query('analytics', 'tracking', statement);
var stream = query.execute();
Il risultato è un errore apparentemente uninformative:
{ code: 100,
message: 'UDF: Execution Error 1',
func: 'as_query_aggregate',
file: 'src/main/aerospike/aerospike_query.c',
line: 903 }
Lo stato log del server:
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)
C'è qualcuno hai qualche consiglio per far funzionare un UDF con NodeJS? O qualche idea su come diagnosticare l'errore?
Ho impostato la posizione UDF dell'utente nella configurazione che non influisce sul risultato.
UPDATE: Ecco il codice 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
Qual è il codice per l'UDF 'check_teamId'? –
Inoltre, si ha una clausola 'WHERE' nell'istruzione AQL ma nessuna sezione' filters' nel proprio oggetto statement nella versione Node.JS. –
Grazie a @AdamB. Aggiornato con il codice lua qui sopra. La clausola WHERE non è effettivamente richiesta e la query funziona correttamente senza di essa. – TStu