
# CREATE FUNCTION
#### 功能描述
创建一个自定义函数。
 #### 语法格式
创建自定义函数语法。
```
CREATE [AGGREGATE] FUNCTION function_name 
    ( [  { argname  argtype } ]  [, ...]  ] )
    [ RETURNS [SETOF] rettype | RETURNS TABLE (  { column_name column_type  }  [, ...] )]
    LANGUAGE lang_name 
    [ { IMMUTABLE  | STABLE  | VOLATILE } ]
    RUNTIME_VERSION = { 'version' }
    RUNTIME_ENV = { 'env_json' }
    HANDLER = 'function_name'
    COMMENT = 'comment'
    [ STRICT ]
    [ PACKAGES = ( 'package_name==[version]' [ , ...] ) ]
    [ IMPORTS = ( 'obs_file_path' ) ]
    [ AS 'definition' ]
```
#### 参数说明
表1CREATE FUNCTION参数说明 
| 参数                 | 描述                                                                                 | 取值范围                                                                                                                                                                  |
|:---|:---|:---|
| function_name      | 要创建的函数名字（可以用模式修饰）。                                                                 | 字符串，需符合标识符的命名规范。 创建函数时，建议指定schema，否则会在默认的schema default_db下创建函数。调用自定义函数时必须指定schema，否则系统会调用系统内置函数。 |
| argname            | 函数参数的名字。                                                                           | 字符串，需符合标识符的命名规范。                                                                                                                                                      |
| argtype            | 函数参数的类型。                                                                           | 详情请参见[数据类型映射](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0113.html)。                                                                       |
| rettype            | 函数返回值的数据类型。                                                                        | 详情请参见[数据类型映射](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0113.html)。                                                                       |
| column_name        | 字段名称。                                                                              | -                                                                                                                                                                     |
| column_type        | 字段类型。                                                                              | -                                                                                                                                                                     |
| LANGUAGE lang_name | 用于实现函数的语言的名字。自定义函数仅支持Python。                                                       | -                                                                                                                                                                     |
| AGGREGATE          | 表示function是否为聚合函数。                                                                 | -                                                                                                                                                                     |
| IMMUTABLE          | 表示该函数在给出同样的参数值时总是返回同样的结果。                                                          | 如果函数的入参是常量，会在优化器阶段计算该函数的值。优势是可以尽早获取表达式的值，从而能更准确地进行代价估算，生成的执行计划也更优。                                                                                                    |
| STABLE             | 表示该函数不能修改数据库，对相同参数值，在同一次表扫描里，该函数的返回值不变，但是返回值可能在不同SQL语句之间变化。                        | -                                                                                                                                                                     |
| VOLATILE           | 表示该函数值可以在一次表扫描内改变，因此不会做任何优化。                                                       | -                                                                                                                                                                     |
| PACKAGES           | 表示该函数运行时，环境所依赖的Python第三方包。                                                         | -                                                                                                                                                                     |
| RUNTIME_VERSION    | 表示函数运行时，环境的Python的具体版本。当前仅支持指定为3.11系列。                                             | -                                                                                                                                                                     |
| RUNTIME_ENV        | 表示该函数运行时，环境所依赖的Python第三方包和安装方式(venv)，后续用于取代PACKAGES。                               | -                                                                                                                                                                     |
| HANDLER            | 表示函数的主函数入口。                                                                        | -                                                                                                                                                                     |
| IMPORTS            | 表示函数运行时，所依赖在OBS的压缩包路径                                                              | IMPORTS子句中只能引入一个路径，即一个压缩包。                                                                                                                                            |
| STRICT             | STRICT用于指定如果函数的某个参数是NULL，此函数总是返回NULL。如果声明了这个参数，当有NULL值参数时该函数不会被执行；而只是自动返回一个NULL结果。 | -                                                                                                                                                                     |
| definition         | 函数体的具体实现。                                                                          | 默认为null，其长度不能超过1000字符。                                                                                                                                                |
| comment            | 对函数的描述信息。                                                                          | -                                                                                                                                                                     |
   
