2016-02-28 48 views
5

Ben AQL çalışır aerospike çalışan bir toplama işlevi oluşturduk. Sonra NodeJS aynı UDF kullanmaya çalışıyorum:Aerospike NodeJS UDF Toplama Hatası

{ code: 100, 
    message: 'UDF: Execution Error 1', 
    func: 'as_query_aggregate', 
    file: 'src/main/aerospike/aerospike_query.c', 
    line: 903 } 

sunucu günlükleri devlet:

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)

kimseyi mu

var statement = { 
    aggregationUDF: {module: 'filter2', funcname: 'check_teamId', 
    arg:['123', 0, 1456499994597]} 
}; 

var query = client.query('analytics', 'tracking', statement); 
var stream = query.execute(); 

sonuç görünüşte uninformative hatadır NodeJS ile çalışmak için bir UDF almak için herhangi bir ipucu var mı? Ya da hatayı teşhis etmek için herhangi bir fikir?

Yapıdaki kullanıcı UDF konumunu, sonucu etkilemeyen bir konuma ayarladım. GÜNCELLEME

: Eğer (kod: 100) UDF yürütme hatası alıyorsanız

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 
+0

"check_teamId" UDF kodu nedir? –

+0

Ayrıca, Node.JS sürümünde deyim nesnesinde AQL deyiminde "WHERE" yan tümcesi, ancak "filters" bölümü yok. –

+0

Teşekkür @AdamB. Yukarıdaki lua koduyla güncellendi. WHERE yan tümcesi aslında gerekli değildir ve sorgu bu olmadan gayet iyi çalışır. – TStu

cevap

3

en olası nedeni: Burada lua kodu olduğunu LUA altsistemi ve/veya kullanıcı yolu doğru ayarlanmamıştır. istemci otomatik olarak doğru yolunu belirlemek yapamıyorsanız o zaman konfigürasyonda sistem/kullanıcı yolunu geçmek zorunda,

Apr 04 2016 08:15:19 UTC: DEBUG(45951) [conversions.cc:248] [config_from_jsobject] - Could not find a valid LUA system path ./aerospike-client-c/package/usr/local/aerospike/client/sys/udf/lua/ 
Apr 04 2016 08:15:19 UTC: DEBUG(45951) [conversions.cc:273] [config_from_jsobject] - Could not find valid LUA user path ./aerospike-client-c/package/usr/local/aerospike/client/usr/udf/lua 

: Eğer müşteri için hata ayıklama günlüğünü açarsanız Bu hata mesajlarından birini veya her ikisini görebilirsiniz . (Aşağıya bakınız.)

Ancak, UdF çağırma işleminizde Node.js istemcisinde başka bir sorun var. UDF için argümanlar, arg'da değil aggregationUDF nesnesinin args öğesinde geçirilmelidir. bu örnek sadece released oldu [email protected] istemci sürümünü kullandığını

const Aerospike = require('aerospike') 

const config = { 
    hosts: '192.168.33.10:3000', 
    log: { level: 5 }, 
    modlua: { 
    userPath: './', 
    systemPath: './node_modules/aerospike/aerospike-client-c/lua/' 
    } 
} 

Aerospike.connect(config, (error, client) => { 
    if (error) throw error 

    var statement = { 
    aggregationUDF: { 
     module: 'agg', 
     funcname: 'check_teamId', 
     args: ['123', 0, 1456499994597] 
    } 
    } 
    var query = client.query('test', 'tracking', statement) 
    var stream = query.execute() 

    var count = 0 
    stream.on('error', (error) => console.error('error:', error)) 
    stream.on('data', (result) => { 
    count++ 
    console.log('result:', result) 
    }) 
    stream.on('end',() => { 
    console.log('found %d records', count) 
    client.close() 
    }) 
}) 

Not: Burada

benim için çalışan komple bir örnektir. Ancak bir UDF sorgusunun kurulumu ve yürütülmesi, v1.x istemcisi ile aynıdır.

Ayrıca bu örneği Github here'a yükledim. Bu Gist ayrıca, map_profile işlevinizin beklediği öğelere dayalı bazı örnek kayıtlar oluşturmak için setup.js komut dosyası içerir.

user forum numaralı telefondan bizi takip etmekten çekinmeyin. Uygulamanız için bu işe sahip olup olmadığını öğrenmek isterim. (Veya Aerospike Node.js istemcisi hakkında herhangi bir geri bildirim!)

+0

Teşekkürler, @ jan-hecking deneyecek – TStu