C++ 示例:Add2Ints
以下示例显示了基本的 ScalarFunction
子类,它名为 Add2ints
。顾名思义,它将两个整数相加,并返回单个整数结果。
有关完整的源代码,请参阅/opt/vertica/sdk/examples/ScalarFunctions/Add2Ints.cpp
。此 UDx 的 Java 和 Python 版本包含在 /opt/vertica/sdk/examples
中。
加载和使用示例
使用 CREATE LIBRARY 加载包含函数的库,然后按下例所示使用 CREATE FUNCTION(标量) 声明该函数:
=> CREATE LIBRARY ScalarFunctions AS '/home/dbadmin/examples/ScalarFunctions.so';
=> CREATE FUNCTION add2ints AS LANGUAGE 'C++' NAME 'Add2IntsFactory' LIBRARY ScalarFunctions;
以下示例显示了如何使用该函数:
=> SELECT Add2Ints(27,15);
Add2ints
----------
42
(1 row)
=> SELECT * FROM MyTable;
a | b
-----+----
7 | 0
12 | 2
12 | 6
18 | 9
1 | 1
58 | 4
450 | 15
(7 rows)
=> SELECT * FROM MyTable WHERE Add2ints(a, b) > 20;
a | b
-----+----
18 | 9
58 | 4
450 | 15
(3 rows)
函数实施
标量函数在 processBlock
方法中进行计算:
实施 getOutputRange
,这是可选的,允许您的函数跳过结果不在目标范围内的行。例如,如果 WHERE 子句将查询结果限制在某个范围内,则无需为不可能在该范围内的情况调用该函数。
工厂实施
工厂实例化了类的一个成员 (createScalarFunction
),并且还描述了函数的输入和输出 (getPrototype
):
RegisterFactory 宏
使用 RegisterFactory
宏注册一个 UDx。该宏将对工厂类进行实例化并将其包含的元数据供 Vertica 访问。要调用该宏,请将您的工厂类的名称传递给它。
RegisterFactory(Add2IntsFactory);