Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

创建标量 UDF

标量 UDF 纳入了当此函数被调用并返回单个值时执行的一个 Python 程序。CREATE FUNCTION 命令定义以下参数:

  • (可选)输入参数。每个参数均必须具有一个名称和一个数据类型。

  • 一个返回数据类型。

  • 一个可执行的 Python 程序。

CREATE FUNCTION 语句如下所示:

Copy
CREATE [ OR REPLACE ] FUNCTION f_function_name ( [ argument_name arg_type [ , ... ] ] ) RETURNS data_type { VOLATILE | STABLE | IMMUTABLE } AS $$ python_program $$ LANGUAGE plpythonu;

当 Amazon Redshift 查询调用标量 UDF 时,以下步骤将在运行时发生。

  1. 函数将输入参数转换为 Python 数据类型。

    有关 Amazon Redshift 数据类型到 Python 数据类型的映射,请参阅 UDF 数据类型

  2. 函数执行 Python 程序,并传递转换后的输入参数。

  3. Python 代码返回一个值。返回值的数据类型必须对应于函数定义所指定的 RETURNS 数据类型。

  4. 函数将 Python 返回值转换为指定的 Amazon Redshift 数据类型,然后将该值返回到查询。

标量函数示例

以下示例创建一个用于比较两个数并返回较大值的函数。请注意,双美元符号 ($$) 之间代码的缩进是一项 Python 要求。有关更多信息,请参阅 CREATE FUNCTION

Copy
create function f_greater (a float, b float) returns float stable as $$ if a > b: return a return b $$ language plpythonu;

以下查询将调用新的 f_greater 函数以查询 SALES 表,并返回 COMMISSION 或 PRICEPAID 的 20%(两个值中的较大者):

Copy
select f_greater (commission, pricepaid*0.20) from sales;

本页内容: