2016-02-28 11 views
5

मैं एक समग्र समारोह जो एयरोस्पाइक जो AQL में काम करता है में काम करता है बना लिया है। मैं तो NodeJS में एक ही यूडीएफ का उपयोग करने के कोशिश कर रहा हूँ:एयरोस्पाइक NodeJS यूडीएफ एकत्रीकरण त्रुटि

{ 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)

किसी को भी करता है

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

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

परिणाम एक से दिखते uninformative त्रुटि है यूडीएफ को नोडजेएस के साथ काम करने के लिए कोई सुझाव है? या किसी भी विचार से त्रुटि का निदान कैसे करें?

मैंने कॉन्फ़िगरेशन में उपयोगकर्ता 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 
+0

'check_teamId' UDF के लिए कोड क्या है? –

+0

इसके अलावा, आपके पास AQL कथन में 'WHERE' क्लॉज है लेकिन Node.JS संस्करण में आपके कथन ऑब्जेक्ट में कोई' फ़िल्टर 'अनुभाग नहीं है। –

+0

धन्यवाद @AdamB। उपरोक्त लुआ कोड के साथ अपडेट किया गया। WHERE क्लॉज वास्तव में आवश्यक नहीं है, और क्वेरी इसके बिना ठीक चलती है। – TStu

उत्तर

3

की सर्वाधिक संभावना है कि आप यूडीएफ निष्पादन त्रुटि हो रही है (कोड:: 100) यहाँ lua कोड है कि प्रणाली और/या LUA सबसिस्टम के लिए उपयोगकर्ता पथ सही ढंग से सेटअप नहीं कर रहे हैं। यदि आप ग्राहक के लिए डिबग लॉगिंग चालू आप एक या दोनों इन त्रुटि संदेशों में से देख सकते हैं:

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 

ग्राहक सही पथ स्वचालित रूप से निर्धारित नहीं कर सकता है, तो आप विन्यास में प्रणाली/उपयोगकर्ता पथ पारित करने के लिए है । (नीचे देखें।)

लेकिन Node.js क्लाइंट में आपके यूडीएफ आमंत्रण के साथ एक और समस्या है। यूडीएफ के लिए तर्क aggregationUDF ऑब्जेक्ट के तत्व में arg में नहीं होना चाहिए।

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() 
    }) 
}) 

ध्यान दें कि यह उदाहरण [email protected] क्लाइंट संस्करण है कि बस released था का उपयोग करता है:

यहां एक संपूर्ण उदाहरण है कि मेरे लिए काम करता है। लेकिन एक यूडीएफ क्वेरी का सेटअप और निष्पादन v1.x क्लाइंट के समान है।

मैंने इस उदाहरण को गिथब here पर भी अपलोड किया है। इस गिस्ट में आपके map_profile फ़ंक्शन की अपेक्षाओं के आधार पर कुछ नमूना रिकॉर्ड बनाने के लिए setup.js स्क्रिप्ट भी शामिल है।

हमारे user forum में इस पर अनुवर्ती होने के लिए स्वतंत्र महसूस करें। मुझे यह सुनना अच्छा लगेगा कि क्या आपको यह आपके आवेदन के लिए काम करने के लिए मिला है। (या Aerospike Node.js क्लाइंट के बारे में कोई अन्य प्रतिक्रिया!)

+0

धन्यवाद, @ जन-हेकिंग इसे आज़माएगा – TStu