Aerospike实战之UDF(用户自定义函数)
来源:互联网 发布:自学修图都用什么软件 编辑:程序博客网 时间:2024/06/04 08:37
Aerospike可以用lua在服务端创建自定义函数,可以提高服务端的操作效率,使用自定义函数的前提上对lua语法有个基本的了解。
如下是创建的UDF,主要的作用就是判断一个用户的key是否存在,不存在则创建新的key和新的属性;
如果key存在则判断intt属性是否存在,判断intt属性的value进行具体的业务存在。
函数定义如下:
local function Split(szFullString, szSeparator) --此方法为Split字符串 local nFindStartIndex = 1 local nSplitIndex = 1 local nSplitArray = {} while true do local nFindLastIndex = string.find(szFullString, szSeparator, nFindStartIndex) if not nFindLastIndex then nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, string.len(szFullString)) break end nSplitArray[nSplitIndex] = string.sub(szFullString, nFindStartIndex, nFindLastIndex - 1) nFindStartIndex = nFindLastIndex + string.len(szSeparator) nSplitIndex = nSplitIndex + 1 end return nSplitArrayendfunction updateIntt(rec,appendIntt,sqid)--rec参数为Aerospike当前记录本身,默认就传递进来的,后面两参数是具体的业务参数 local ret = map() if not aerospike:exists(rec) then--判断rec记录是否存在 ret['status'] = 'DOES NOT EXIST' rec['sqid'] = sqid['sqid'] rec['intt'] = appendIntt['appendIntt'] aerospike:create(rec)--不存在则创建一个新的key, 属性为sqid和intt else--key存在则更新intt属性的值 --ret['status'] = 'DOES EXIST' local intt = rec['intt'] if intt == nil then --rec['sqid'] = userid['userid'] rec['intt'] = appendIntt['appendIntt'] ret['status'] = 'INTT DOES NOT EXIST' ret['intt'] = appendIntt['appendIntt'] else ret['status'] = 'INTT DOES EXIST' local intt = rec['intt'] local appendIntt = appendIntt['appendIntt'] local list = Split(appendIntt, ':') local l1 = list[1] .. ':' if string.find(intt, l1) ~= nil then ret['status'] = 'appendIntt is old' local l2 = list[2] --local list2 = Split(intt, ':') ret['l2'] = l2 else ret['status'] = 'appendIntt is new' rec['intt'] = intt .. ',' .. appendIntt ret['intt'] = intt .. ',' .. appendIntt end end aerospike:update(rec)--修改 end --aerospike:update(rec) return retend
把上面的代码保存到updateIntt.lua文件中,然后通过ascli udf-put命令把这个自定义文件上传到Aerospike服务端:
ascli udf-put updateIntt.lua 可以在as部署的集群上执行,如果是远程上传的话,可以用如下命令:
ascli -h ip -p port udf-put updateIntt.lua 上传之后可以通过ascli udf-list查看是否存在updateIntt.lua,出现则说明上传成功。
接下来就可以调用我们自定义的函数了,调用方法如下:
ascli udf-record-apply <ns> <set> <key> <module> <function> ARGS
<ns>命名空间
<set>setname
<key> key
<module>lua脚本文件名,不带后缀
<function>函数名
ARGS 参数列表
ascli -h 192.168.0.15 -p 3000 udf-record-apply upf testuser ${var1} updateIntt updateIntt "{\"appendIntt\": \"${var2}\"}" "{\"sqid\": \"${var1}\
其中${var1}为key的位置,appendIntt和sqid为我定义函数时需要传的参数;
需要注意以下几点:
1,ARGS 参数传递的时候一定要按照定义函数时的顺序,要不有些参数会取不到;
2,ARGS 每个参数都是一个单独的json格式,比如'{"a":"b"}',不能把多个参数写到同一个json里面进行传递。
Aerospike交流QQ群 :419183757
1 0
- Aerospike实战之UDF(用户自定义函数)
- Pig用户自定义函数(UDF)
- Pig用户自定义函数(UDF)
- HIVE 用户自定义函数(UDF)
- 【个人学习笔记16之--浅谈UDF(用户自定义函数)】
- Hive 之 用户自定义函数 UDF UDAF UDTF
- Hive学习之自定义函数(UDF)
- 13.Spark SQL:UDF自定义函数实战
- Aerospike C客户端手册———用户定义函数—应用UDF到记录
- Hive 用户自定义函数UDF详解
- SQL Server UDF用户自定义函数
- Hive——用户自定义函数(UDF)
- Hive 用户自定义函数 UDF,UDAF
- Hive中的用户自定义函数UDF
- HIVE 自定义函数之UDF/UDAF/UDTF
- SQL语法之自定义函数UDF
- Hive之UDF,UDAF自定义函数
- aerospike实战之put操作
- 活动安排问题 贪心算法
- leetcode--Combination Sum III
- windows 下安装BeautifulSoup
- 在RHEL6.4下安装Adobe Media Server 5
- Cas(04)——更改认证方式
- Aerospike实战之UDF(用户自定义函数)
- Android制作粒子爆炸特效
- 2015广电行业十一大关键词
- iOS遍历字典
- 修改ueditor的上传文件、图片、视频等路径
- 指针常量简介
- Nielsen:2015年部分美国有线电视运营商用户流失严重(来源:199IT)
- 基于pyVmomi编写vsphere控制管理接口
- android 粘贴 复制