Aerospike C客户端手册———用户定义函数—应用UDF到记录

应用UDF到记录

Aerospike C客户端API提供aerospike_key_apply()来应用一个用户定义函数到数据库中某记录。

在使用aerospike_key_apply()操作前,包含被应用函数的UDF模块,必须首先注册到Aerospike服务器。请参见【注册用户定义函数】章节来学习如何使用C
API注册,或阅读【aql手册】学习如何使用外部工具注册。

下面的代码引用自示例目录【examples/basic_examples/get】,由Aerospike
C客户端安装包自带。

请先阅读【创建连接】章节内容,理解如何建立与集群的连接。

定义UDF

函数bin_transform定义在名称为“basice_udf“的模块中。

function bin_transform(record, bin_name, x, y)
    record[bin_name] = (record[bin_name] * x) + y
    aerospike:update(record)
    return record[bin_name]
end

此函数是个有三个参数的简单算法,三 个参数名称分别为”bin_name“、”x“、”y“。它在由“bin_name”指定的bin上执行运算并更新记录数据,然后返回这个bin的运算结果值。

初始化记录键(KEY)

当在记录上应用用户定义函数时,需要通过键(key)在数据库中标识这条记录。下面我们为示例代码创建一个键。用来做键的是字符串(string)”test-key",数据所在的namespace名称为“test”、set名称为“test-set”。其它数据类型也可用作键,比如:整型(integer)或二进制大对象块(blob)。

as_key key;
as_key_init_str(&key, "test", "test-set", "test-key");

传递参数给UDF

用户定义函数”bin_transform“,要求一个字符串型(string)参数和两个整型(integer)参数,因此需要填充一个参数列表。

as_arraylist args;
as_arraylist_inita(&args, 3);
as_arraylist_append_str(&args, "test-bin-2");
as_arraylist_append_int64(&args, 4);
as_arraylist_append_int64(&args, 400);

在记录上应用UDF

使用记录键,现在可在数据库的指定记录上调用用户定义函数:

as_val * result = NULL;
if (aerospike_key_apply(&as, &err, NULL, &key, "mymodule", "add",
    (as_list *) &args, &result) != AEROSPIKE_OK) {
    fprintf(stderr, "err(%d) %s at [%s:%d]\n", err.code, err.message, err.file, err.line);
}

UDF函数bin_trransform()的返回值将在参数对象result中返回。

若记录键对应的记录不存在,当UDF函数被发现则返回AEROSPIKE_ERR_RECORD_NOT_FOUND,否则返回UDF运行时错误,错误细节在as_error的成员域中返回。

清理资源

当不再需要返回的结果时,应释放它及其相关资源:

as_val_destroy(&result);

同时,也就清理参数列表:

as_arraylist_destroy(&args);

在这里记录键不需要显式销毁,因为它及其成员均创建于栈。

原文链接: http://www.aerospike.com/docs/client/c/usage/udf/apply.html

译       者: 歪脖大肚子Q

时间: 2025-01-17 13:06:33

Aerospike C客户端手册———用户定义函数—应用UDF到记录的相关文章

Aerospike C客户端手册———用户定义函数—注册用户定义函数

注册用户定义函数 Aerospike C 客户端提供在数据库中注册.更新或移除一个用户定义函数(UDF)模块的能力.目前,用户定义函数仅支持LUA语言. aerospike_udf_put() - 注册或更新UDF模块. aerospike_udf_remove() - 移除UDF模块. 下面的代码引用自示例目录[examples/basic_examples/udf],由Aerospike C客户端安装包自带. 请先阅读[创建连接]章节内容,理解如何建立与集群的连接. 从文件读取UDF 很可能

Aerospike C客户端手册———查询—查询记录

查询记录 查询时除了使用主索引,Aerospike C客户端也提供API来通过检索次索引查询数据库. 为了使用次索引查询数据,首先应初始化并填充一个as_query对象:然后,以初始化完成的as_query对象,使用aerospike_query_foreach()执行查询.一个查询可以: 对返回的满足条件记录逐个调用回调函数. 对返回的满足条件记录集合应用流式用户定义函数(StreamUDF),再对StreamUDF返回结果调用回调用函数. 此章节专注于第一种方式,如想了解第二种方式,请参见[

Aerospike C客户端手册———示例

示例 Aerospike C客户端函数库自带一系列的示例,用来说明如何使用客户端构建应用.这些示例打包在[客户端函数库安装包]中,安装到'examples'目录下. 示例包括的内容抽样说明如下: 基本示例 存放和获取包含多bin的记录. 设置记录生存时间(TTL). 在记录上应用用户定义函数. 批量示例 一次请求多条记录. 查询示例 次索引与聚合的使用 扫描示例 扫描整个namespace或一个set. 在扫描的结果集上应用用户定义函数. 为了构建所有示例,请转到examples目录下,然后执行

调试SQL Server的存储过程及用户定义函数

分类: 数据库管理 2005-06-03 13:57 9837人阅读 评论(5) 收藏 举报 sql server存储vb.net服务器sql语言 1.在查询分析器中调试 查询分析器中调试的步骤如下:    SQL 2000查询分析器        --左连的对象浏览器(没有的话按F8)        --对象项中        --右键调试的存储过程        --调试        --输入参数(必须输入所有的参数,包括默认值/输出参数        --点击执行        --出现

SQL——用户定义函数

根据用户定义函数返回值的类型,可将用户定义函数分为如下三个类别: (1) 返回值为可更新表的函数 若用户定义函数包含单个 SELECT 语句且该语句可更新,则该函数返回的表也可更新,这样的函数称为内嵌表值函数. (2) 返回不可更新数据表的函数 若用户定义函数包含多个 SELECT 语句,则该函数返回的表不可更新.这样的函数称为多语句表值函数. (3) 返回标量值的函数 用户定义函数返回值为标量值,这样的函数称为标量函数. 用户定义函数不支持输出参数.用户定义函数不能修改全局数据库状态. 利用A

hive里的用户定义函数UDF

Hive可以通过实现用户定义函数(User-Defined Functions,UDF)进行扩展(事实上,大多数Hive功能都是通过扩展UDF实现的).想要开发UDF程序,需要继承org.apache.hadoop.ql.exec.UDF类,并重载evaluate方法.Hive API提供@Description声明,使用声明可以在代码中添加UDF的具体信息.在Hive中可以使用DESCRIBE语句来展现这些信息. Hive的源码本身就是编写UDF最好的参考资料.在Hive源代码中很容易就能找到

应用C#和SQLCLR编写SQL Server用户定义函数

摘要: 文档阐述使用C#和SQLCLR为SQL Server编写用户定义函数,并演示用户定义函数在T-SQL中的应用.文档中实现的 Base64 编码解码函数和正则表达式函数属于标量值函数,字符串分割函数属于表值函数,而平方平均数函数属于聚合函数. 环境 要求:SQL Server 2005/2008,Visual Studio 2005/2008,C# 2.0. 本页内容 概述 启用SQLCLR Base64 编码解码函数 正则表达式函数 字符串分割函数 平方平均数函数 总结 概述 微软在推出

Aerospike C客户端手册———数据扫描—记录扫描

记录扫描 Aerospike C客户端提供扫描指定namespace和set中所有记录的能力. 扫描可使用扫描API定义.使用扫描API,可以初始化和填充一个as_scan对象. 以初始化过的as_scan,可用下面任一个操作执行扫描: aerospike_scan_foreach() - 执行扫描并对每个记录调用一个函数. aerospike_scan_background() - 执行扫描但不要结果,提供检查扫描状态的能力. 使用foreach处理结果 函数aerospike_scan_fo

Aerospike C客户端手册———日志

日志 Aerospike C客户端有一个日志设施,用于记录内部日志信息.默认情况下,日志记录器将日志信息写到stderr.但应用可更改日志的详细程度或提供一个客户化方法来记录日志信息. 设置日志级别 若应用需要修改日志信息详细程度,可使用as_log_set_level()设置不同的日志级别:. as_log_set_level(&as->log, AS_LOG_LEVEL_DEBUG); 日志级别有: AS_LOG_LEVEL_OFF AS_LOG_LEVEL_ERROR AS_LOG_L