Multiupdate by query

Is there any alternative in Aerospike to this SQL expression? UPDATE products SET price = price * {$myVariable};

So currently you would do this with a record UDF that you apply to all the records in the namespace (or set) products.

function update_multiply(rec, bin_name, multiplier)
    if aerospike:exists(rec) then
        local value = rec[bin_name]
        rec[bin_name] = value * multiplier
        aerospike:update(rec)
    end
end

Now to run the example, I’ll use the aql command-line tool. In the real world, you’d call it from a language client, once you’ve debugged your Lua code.

KEY_SEND = true

aql> SELECT * FROM test.products
+------------+---+
| PK         | i |
+------------+---+
| "here"     | 2 |
| "there"    | 3 |
| "anywhere" | 4 |
+------------+---+
3 rows in set (0.187 secs)

OK

aql> REGISTER MODULE 'update.lua'
OK, 1 module added.

aql> EXECUTE update.update_multiply("i", 2) ON test.products
OK, Scan job (9319251124864029115) created.

aql> SELECT * FROM test.products
+------------+---+
| PK         | i |
+------------+---+
| "here"     | 4 |
| "there"    | 6 |
| "anywhere" | 8 |
+------------+---+
3 rows in set (0.175 secs)

In a near future release of Aerospike Database you’ll be able to do this with a Write Expression instead of a UDF. At the moment Expressions are just used as a filter, allowing you to put a condition on whether a record operation, batch-read, scan, query or UDF call happens. Their use will be expanded.

© 2021 Copyright Aerospike, Inc. | All rights reserved. Creators of the Aerospike Database.