

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# CREATE FUNCTION
<a name="sql-reference-create-function"></a>

Amazon Kinesis Data Analytics 提供了许多[函数](sql-reference-functions.md)功能，还允许用户通过用户定义的函数扩展其功能UDFs（）。亚马逊 Kinesis Data Analytics UDFs 仅支持在 SQL 中定义。

用户定义的函数可通过完全限定名称或仅通过函数名称来调用。

传递给用户定义的函数或转换（或从用户定义的函数或转换返回）的值必须与相应的参数定义具有完全相同的数据类型。换句话说，在将参数传递给用户定义的函数（或从用户定义的函数返回值）时不允许使用隐式转换。

## 用户定义的函数 (UDF)
<a name="sql-reference-create-function-udf"></a>

用户定义的函数可以实现复杂的计算，采用零个或多个标量参数并返回标量结果。 UDFs 操作方式类似于内置函数，例如 FLOOR () 或 LOWER ()。对于 SQL 语句中出现的每个用户定义的函数，每行都会使用标量参数（该行中的常量或列值）调用该 UDF 一次。

## 语法
<a name="sql-reference-create-function-syntax"></a>

```
 CREATE FUNCTION ''<function_name>'' ( ''<parameter_list>'' )
  RETURNS ''<data type>''
  LANGUAGE SQL
  [ SPECIFIC ''<specific_function_name>''  | [NOT] DETERMINISTIC ]
  CONTAINS SQL
  [ READS SQL DATA ]
  [ MODIFIES SQL DATA ]
  [ RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT ]  
  RETURN ''<SQL-defined function body>''
```

SPECIFIC 会分配一个在应用程序中唯一的特定函数名称。请注意，常规函数名称不必是唯一的（两个或多个函数可以共用同一名称，只要能够通过其参数列表加以区分即可）。

DETERMINISTIC/NOT DETERMINISTIC 表示函数是否会始终针对给定的一组参数值返回相同结果。您的应用程序可能会使用它来进行查询优化。

READS SQL DATA 和 MODIFIES SQL DATA 分别表示函数是否可能读取或修改 SQL 数据。如果函数尝试在未指定 READS SQL DATA 的情况下从表或流中读取数据，或者在未指定 MODIFIES SQL DATA 的情况下插入流或修改表，则会引发异常。

RETURNS NULL ON NULL INPUT 和 CALLED ON NULL INPUT 表示函数在其任何参数为 null 时是否会被定义为返回 null。如果未指定，则默认为 CALLED ON NULL INPUT。

SQL 定义的函数正文仅包含一个 RETURN 语句。

## 示例
<a name="sql-reference-create-function-examples"></a>

```
CREATE FUNCTION get_fraction( degrees DOUBLE )
    RETURNS DOUBLE
    CONTAINS SQL
    RETURN degrees - FLOOR(degrees)
;
```