
# CREATE FUNCTION
#### 语法
CREATE FUNCTION qualified_function_name (
parameter_name parameter_type
\[, ...\]
)
RETURNS return_type
\[ COMMENT function_description \]
\[ LANGUAGE \[ JAVA \] \]
\[ SPECIFIC specificName \]
\[ DETERMINISTIC \| NOT DETERMINISTIC \]
\[ RETURNS NULL ON NULL INPUT \| CALLED ON NULL INPUT \]
\[ SYMBOL class_name \]
\[ URI hdfs_path_to_jar \]
#### 描述
通过给定的定义创建一个新的函数。
- 每一个函数都由其限定函数名称和参数类型列表唯一标识。"qualified_function_name"的格式需要为"catalog.schema.function_name"，函数命名空间（格式为"catalog.schema"）可以自行规划管理，与HetuEngine中的catalog、schema概念无关联；"parameter_type"需要为HetuEngine支持的数据类型。
- "return_type"需要为HetuEngine支持的数据类型，要与函数的返回实际类型匹配，不做类型强制转换。
- 可以指定一组特征来修饰函数并指定其行为，每个特征最多只能指定一次，详情请参考[表1]。
   表1特征说明 
  | 特征                           | 默认值                  | 描述                                                                                                                                                                                                                                                                                                                          |
  |:---|:---|:---|
  | Language clause              | -                    | 定义函数的语言。目前支持JAVA语言。 - JAVA函数：需要提供函数实现的JAR文件，并将JAR文件放入HetuEngine可以读取的HDFS中。                                                                                                                                              |
  | Deterministic characteristic | NOT DETERMINISTIC    | 函数是否确定性。 - DETERMINISTIC：如果函数在使用相同的输入集调用时总是返回相同的结果集，则该函数被视为确定性。  - NOT DETERMINISTIC：如果函数在使用相同的输入集调用时不返回相同的结果集，则该函数将被视为非确定性。   |
  | Null-call clause             | CALLED ON NULL INPUT | 函数的行为。 - RETURNS NULL ON NULL INPUT：当"NULL"作为函数参数时，返回"NULL"。  - CALLED ON NULL INPUT：当"NULL"作为函数参数时调用。                  |
  | Symbol class_name            | -                    | JAVA函数使用，指定函数实现的限定类名。                                                                                                                                                                                                                                                                                                       |
  | Uri hdfs_path_to_jar         | -                    | JAVA函数使用，指定函数实现的JAR文件路径。                                                                                                                                                                                                                                                                                                    |
     
  
 
#### 限制
- 权限控制仅使用基于用户组方式进行控制，详情如[表2]。
   表2权限控制 
  | 操作     | 权限控制          |
  |:---|:---|
  | CREATE | 不控制权限         |
  | DROP   | 只有owner才有权限执行 |
  | SELECT | 不控制权限         |
  | SHOW   | 不控制权限         |
     
  
 
#### 示例
- 创建一个新的JAVA函数"example.default.add_two"（需要先构建和部署UDF）
  ```
  CREATE FUNCTION example.default.add_two (
   num integer
  )
  RETURNS integer
  LANGUAGE JAVA
  DETERMINISTIC
  SYMBOL "com.example.functions.AddTwo"
  URI "hdfs://hacluster/udfs/function-1.0.jar";
  --执行函数
  select hetu.default.add_two(2);
  ```
  
 
