一、语法
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ] function_name AS class_name [ resource_locations ]
二、参数
| 参数 | 说明 | 语法 |
| OR REPLACE | 如果指定,将重新加载函数的资源。用于获取对函数实现所做的更改。此参数与 IF NOT EXISTS 互斥,不能同时指定 | – |
| TEMPORARY | 指示创建的函数作用域为当前会话级别,会话结束即失效。不会在目录中创建持久条目 | – |
| IF NOT EXISTS | 仅在函数不存在时创建;若已存在则跳过且不报错。此参数与 OR REPLACE 互斥 | – |
| function_name | 指定要创建的函数名称,可选择性地用数据库名限定 | [ database_name. ] function_name |
| class_name | 指定提供函数实现的类名,需扩展以下基类之一:• org.apache.hadoop.hive.ql.exec.UDF / UDAF• org.apache.hadoop.hive.ql.udf.generic.AbstractGenericUDAFResolver / GenericUDF / GenericUDTF• org.apache.spark.sql.expressions.UserDefinedAggregateFunction | – |
| resource_locations | 包含函数实现及其依赖项的资源列表 | USING { { (JAR | FILE | ARCHIVE) resource_uri } , … } |
三、示例
— 创建测试表CREATE EXTERNAL TABLE func_test_table (c1 INT) USING PARQUET LOCATION 'cosn://kevin-1344200066/test_create_function/func_test_table';INSERT INTO func_test_table VALUES (1), (2), (3);– 注册 Python UDF 并使用(通过 Spark API)– spark.udf.register("py_add_ten", udf(lambda x: x + 10, IntegerType()))SELECT py_add_ten(c1) AS result FROM func_test_table;– 创建临时函数CREATE TEMPORARY FUNCTION temp_avg AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDAFAverage';– 查看函数SHOW USER FUNCTIONS;SHOW FUNCTIONS;– 删除临时函数DROP TEMPORARY FUNCTION IF EXISTS temp_avg;– CREATE OR REPLACECREATE OR REPLACE TEMPORARY FUNCTION temp_avg2 AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDAFAverage';SELECT temp_avg2(c1) FROM func_test_table;