私はAQLで働くエアロスパイクで動作する集約関数を作成しました:エアロスパイクNodeJS UDF集約エラー
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 }
サーバは状態をログに記録します。
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)
は誰もいNodeJSとUDFを連携させるためのヒントはありますか? エラーを診断する方法はありますか?
結果に影響しないconfig内のユーザーUDFの場所を設定しました。 UPDATE
:あなたは(コード:100)UDFの実行エラーを取得している
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_teamId」UDFのコードは何ですか? –
また、AQLステートメントにはWHERE句がありますが、Node.JSバージョンのステートメントオブジェクトには 'filters'セクションはありません。 –
ありがとう@AdamB。上記のluaコードで更新されました。 WHERE句は実際には必要ではなく、問合せはそれなしで正常に実行されます。 – TStu