I am trying to use the Aerospike bulk loader to plant a cluster with data from a tab-delimited file.
The source data is as follows:
set key segments
segment 123 10,20,30,40,50
segment 234 40,50,60,70
The third column "segments" contains a list of integers, separated by commas.
I created a JSON template:
{
"version" : "1.0",
"input_type" : "csv",
"csv_style": { "delimiter": " " , "n_columns_datafile": 3, "ignore_first_line": true}
"key": {"column_name":"key", "type": "integer"},
"set": { "column_name":"set" , "type": "string"},
"binlist": [
{"name": "segments",
"value": {"column_name": "segments", "type": "list"}
}
]
}
... and launched the bootloader:
java -cp aerospike-load-1.1-jar-with-dependencies.jar com.aerospike.load.AerospikeLoad -c template.json data.tsv
When I request entries in aql, they seem to be a list of strings:
aql> select * from test
+--------------------------------+
| segments |
+--------------------------------+
| ["10", "20", "30", "40", "50"] |
| ["40", "50", "60", "70"] |
+--------------------------------+
The data I'm trying to save is a list of integers. Is there an easy way to convert the objects stored in this box into a list of integers (possibly Lua UDF) or, possibly, where you can configure the bulk loader template?
Update:
I tried to solve this problem by creating Lua UDF to convert a list from strings to integers:
function convert_segment_list_to_integers(rec)
for i=1, table.maxn(rec['segments']) do
rec['segments'][i] = math.floor(tonumber(rec['segments'][i]))
end
aerospike:update(rec)
end
... :
aql> register module 'convert_segment_list_to_integers.lua'
... :
aql> execute convert_segment_list_to_integers.convert_segment_list_to_integers() on test.segment
, UDF . -, a table, userdata:
Dec 04 2015 23:23:34 GMT: DEBUG (udf): (udf_rw.c:send_result:527) FAILURE when calling convert_segment_list_to_integers convert_segment_list_to_integers ...rospike/usr/udf/lua/convert_segment_list_to_integers.lua:2: bad argument
Dec 04 2015 23:23:34 GMT: DEBUG (udf): (udf_rw.c:send_udf_failure:407) Non-special LDT or General UDF Error(...rospike/usr/udf/lua/convert_segment_list_to_integers.lua:2: bad argument
, maxn userdata.
, , ?