CREATE AGGREGATE FUNCTION
向编录添加用户定义的聚合函数 (UDAF)。包含该函数的库必须先前已使用 CREATE LIBRARY 添加。
CREATE AGGREGATE FUNCTION 根据工厂类提供的数据自动确定函数参数和返回值。Vertica 支持重载聚合函数。当您调用 SQL 函数时,Vertica 会将输入表传递给该函数进行处理。
语法
CREATE [ OR REPLACE ] AGGREGATE FUNCTION [ IF NOT EXISTS ]
[[database.]schema.]function AS
[ LANGUAGE 'language' ]
NAME 'factory'
LIBRARY library
[ FENCED | NOT FENCED ]
参数
OR REPLACE
如果存在具有相同名称和实参的函数,则会替换它。例如,您可以使用它在围栏模式和非围栏模式之间进行切换。如果您不使用此指令并且该函数已存在,则 CREATE 语句将返回一个回退错误。
OR REPLACE 和 IF NOT EXISTS 是互斥的。
IF NOT EXISTS
如果存在具有相同名称和实参的函数,则会返回该函数而不会创建它。
OR REPLACE 和 IF NOT EXISTS 是互斥的。
-
[database.]schema
数据库和架构。默认架构为
public
。如果指定一个数据库,它必须是当前数据库。-
function
要创建的函数的名称。该名称用于函数的 SQL 调用。它不需要匹配工厂名称,但是如果这两个名称相同或相似,可以减少困惑。
函数名必须符合标识符的限制。
-
LANGUAGE 'language'
- 用于开发此函数的语言,目前仅
C++
(默认)。 -
NAME 'factory'
- 生成函数实例的工厂类的名称。
-
LIBRARY library
- 包含函数的共享库的名称。此库必须已由 CREATE LIBRARY 加载。
FENCED | NOT FENCED
- 启用或禁用此函数的隔离模式。
默认值:
FENCED
特权
非超级用户:
-
函数架构的 CREATE 权限
-
函数库的 USAGE 权限
示例
以下示例演示了加载名为 AggregateFunctions
的库,然后定义名为 ag_avg
和 ag_cat
的函数。这些函数映射到库中的 AverageFactory
和 ConcatenateFactory
类:
=> CREATE LIBRARY AggregateFunctions AS '/opt/vertica/sdk/examples/build/AggregateFunctions.so';
CREATE LIBRARY
=> CREATE AGGREGATE FUNCTION ag_avg AS LANGUAGE 'C++' NAME 'AverageFactory'
library AggregateFunctions;
CREATE AGGREGATE FUNCTION
=> CREATE AGGREGATE FUNCTION ag_cat AS LANGUAGE 'C++' NAME 'ConcatenateFactory'
library AggregateFunctions;
CREATE AGGREGATE FUNCTION
=> \x
Expanded display is on.
select * from user_functions;
-[ RECORD 1 ]----------+------------------------------------------------------------------
schema_name | public
function_name | ag_avg
procedure_type | User Defined Aggregate
function_return_type | Numeric
function_argument_type | Numeric
function_definition | Class 'AverageFactory' in Library 'public.AggregateFunctions'
volatility |
is_strict | f
is_fenced | f
comment |
-[ RECORD 2 ]----------+------------------------------------------------------------------
schema_name | public
function_name | ag_cat
procedure_type | User Defined Aggregate
function_return_type | Varchar
function_argument_type | Varchar
function_definition | Class 'ConcatenateFactory' in Library 'public.AggregateFunctions'
volatility |
is_strict | f
is_fenced | f
comment |