1 回答
TA贡献1868条经验 获得超4个赞
您可以将 Lua 用户定义函数 (UDF) 应用于查询以有效过滤结果。
例如,这里是一个 Stream UDF,它将返回具有最大值的记录。版本号:
function maxVersion(stream, bin)
-- The stream function cannot return record objects directly,
-- so we have to map to a Map data type first.
local function toArray(rec)
local result = map()
result['filename'] = rec['filename']
result['version'] = rec['version']
return result
end
local function findMax(a, b)
if a.version > b.version then
return a
else
return b
end
end
return stream : map(toArray) : reduce(findMax)
end
使用 Go 客户端,您将执行如下功能:
stmt := NewStatement(ns, set)
recordset, _ := client.QueryAggregate(nil, stmt, "udfFilter", "maxVersion")
for rec := range recordset.Results() {
res := rec.Record.Bins["SUCCESS"].(map[interface{}]interface{})
fmt.Printf("filename with max. version: %s (ver. %d)\n", res["filename"], res["version"])
}
我在这里上传了一个完整的工作示例作为 Gist:https ://gist.github.com/jhecking/b98783bea7564d610ea291b5ac47808c
您可以在此处找到有关如何使用流 UDF 进行查询聚合的更多信息:http ://www.aerospike.com/docs/guide/aggregation.html
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报