Las funciones definidas por el usuario (UDF) de SQL permiten encapsular lógica de negocio reutilizable directamente en SQL, sin necesidad de escribir código en Java o Python. A diferencia de las UDF de Java o Python, las UDF de SQL admiten parámetros de tipo función, incluidas las funciones anónimas. La instrucción CREATE SQL FUNCTION crea una UDF de SQL permanente que se almacena en el sistema de metadatos de MaxCompute.
Para crear una UDF de SQL temporal que no se guarde en el sistema de metadatos, utilice la instrucción FUNCTION.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Permisos sobre funciones en su cuenta de Alibaba Cloud (create, query, call y drop). Para más información, consulte permisos de MaxCompute.
El modo de script de SQL habilitado en su editor de SQL. Ejecutar
CREATE SQL FUNCTIONen el modo de edición de SQL común genera un error. Para más información, consulte SQL en modo script.
Sintaxis
create sql function <function_name>(@<parameter_in1> <datatype>[, @<parameter_in2> <datatype>...])
[returns @<parameter_out> <datatype>]
as [begin]
<function_expression>
[end];
Si la UDF consta de una sola expresión, omita begin y end, y escriba la expresión directamente después de as. Cuando la lógica requiere varias instrucciones, envuélvalas entre begin...end.
Parámetros
|
Parameter |
Required |
Description |
|
|
Sí |
Nombre de la UDF de SQL. Debe ser único dentro del proyecto y no puede coincidir con el nombre de una función integrada. Cada nombre de función solo se registra una vez. Para consultar los nombres existentes, ejecute LIST FUNCTIONS. |
|
|
Sí |
Parámetros de entrada. Admiten el tipo función, incluidas las funciones anónimas. Consulte function-type input parameters para ver ejemplos generales y anonymous function input parameters para ejemplos de funciones anónimas. |
|
|
Sí |
Tipo de dato de cada parámetro de entrada. Debe tratarse de un tipo de dato compatible con MaxCompute. Consulte edición de tipos de dato de MaxCompute V2.0. Al invocar la UDF, los tipos de dato de entrada deben coincidir exactamente con los definidos aquí. |
|
|
No |
Variable del valor de retorno. Si se omite, se devuelve de forma predeterminada el valor de |
|
|
Sí (si se especifica |
Nombre del parámetro de salida correspondiente al valor de retorno. |
|
|
Sí |
Lógica de implementación de la UDF. Puede consistir en un operador integrado, una función integrada u otra UDF. |
Ejemplos
UDF sencilla
Cuando la lógica se basa en una sola expresión, escríbala directamente después de as:
-- Increment a BIGINT value by 1
create sql function my_add(@a BIGINT) as @a + 1;
La expresión ubicada tras as constituye el cuerpo de la función. Esta puede hacer referencia a operadores integrados, funciones integradas u otras UDF.
UDF con varias instrucciones
Si la lógica requiere variables intermedias, utilice begin...end para agrupar varias instrucciones:
-- Sum three BIGINT values using an intermediate variable
create sql function my_sum(@a BIGINT, @b BIGINT, @c BIGINT) returns @my_sum BIGINT
as begin
@temp := @a + @b;
@my_sum := @temp + @c;
end;
La cláusula returns @my_sum BIGINT asigna un nombre explícito a la variable de retorno. Si omite returns, la función devuelve de forma predeterminada el valor de function_name.
Parámetros de entrada de tipo función
Las UDF de SQL aceptan parámetros de tipo función, lo que le permite pasar funciones integradas u otras UDF como argumentos. Para ver ejemplos detallados, consulte:
Pasos siguientes
Una vez creada la UDF de SQL, utilice las siguientes instrucciones relacionadas para gestionarla e invocarla:
|
Statement |
Description |
|
Invoca una UDF de SQL. |
|
|
Consulta los detalles de la UDF: nombre, propietario, fecha de creación, nombre de clase y lista de recursos. |
|
|
Enumera todas las UDF de un proyecto de MaxCompute. |
|
|
Elimina una UDF existente de un proyecto de MaxCompute. |
|
|
Crea una UDF de SQL temporal (no se guarda en el sistema de metadatos). |