【发布时间】:2016-06-11 21:11:36
【问题描述】:
我创建了一个在 aerospike 中工作的聚合函数,它在 AQL 中工作:
AGGREGATE filter2.check_teamId('123', 0, 1456499994597) ON analytics.tracking
WHERE teamId = '123'
这会返回结果。 然后我尝试在 NodeJS 中使用相同的 UDF:
var statement = {
aggregationUDF: {module: 'filter2', funcname: 'check_teamId',
arg:['123', 0, 1456499994597]}
};
var query = client.query('analytics', 'tracking', statement);
var stream = query.execute();
结果是一个看似没有信息的错误:
{ code: 100,
message: 'UDF: Execution Error 1',
func: 'as_query_aggregate',
file: 'src/main/aerospike/aerospike_query.c',
line: 903 }
服务器记录状态:
格林威治标准时间 2016 年 2 月 28 日 22:33:58:INFO(扫描):(scan.c::933)开始 聚合扫描作业 1201452721893048027 {analytics:tracking} 优先级 2
格林威治标准时间 2016 年 2 月 28 日 22:33:58:INFO(扫描):(scan.c::1026) 完成聚合扫描作业 1201452721893048027 (0)
有没有人有任何关于让 UDF 与 NodeJS 一起工作的技巧? 或者任何想法如何诊断错误?
我在配置中设置了用户UDF位置,不影响结果。
更新: 这是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
【问题讨论】:
-
check_teamIdUDF 的代码是什么? -
另外,您在 AQL 语句中有一个
WHERE子句,但在 Node.JS 版本的语句对象中没有filters部分。 -
感谢@AdamB。用上面的 lua 代码更新。 WHERE 子句实际上不是必需的,没有它查询也能正常运行。