En este artículo, discutiremos cómo crear una función definida por el usuario en Cassandra . además, veremos cómo podemos modificarlo. Echemos un vistazo.
Primero, crearemos una función definida por el usuario (UDF) .
Tomemos un ejemplo en el que vamos a crear Max_value UDF que usaremos para calcular el valor máximo simplemente pasando los valores en un UDF. Echemos un vistazo.
Creando un UDF: Max_value –
CREATE FUNCTION Max_value(value1 int, value2 int) CALLED ON NULL INPUT RETURNS int LANGUAGE java AS $$return Math.max(value1, value2);$$;
Ahora, para pasar el valor como entrada, vamos a crear una tabla simple llamada UDF_Function_test en la que function_id, num1 y num2 son los valores de campo.
Echemos un vistazo.
CREATE TABLE UDF_Function_test ( function_id int, num1 int, num2 int, PRIMARY KEY(function_id) );
Ahora, aquí vamos a insertar algunos datos que usaremos en la función UDF para calcular el valor máximo donde function_id estará en el rango de 101 a 104.
Echemos un vistazo.
INSERT INTO UDF_Function_test(function_id, num1, num2) VALUES(101, 400, 600); INSERT INTO UDF_Function_test(function_id, num1, num2) VALUES(102, 500, 400); INSERT INTO UDF_Function_test(function_id, num2) VALUES(103, 900); INSERT INTO UDF_Function_test(function_id, num1) VALUES(104, 500);
Verifiquemos los resultados y calculemos el valor máximo.
SELECT function_id, num1, num2, Max_value(num1, num2) FROM UDF_Function_test WHERE function_id IN(101, 102, 103, 104);
Producción:
función_id | numero1 | numero2 | udf.Max_value(num1, num2) |
---|---|---|---|
101 | 400 | 600 | 600 |
102 | 500 | 400 | 500 |
103 | nulo | 900 | nulo |
104 | 500 | nulo | nulo |
Como podemos ver en la tabla de salida, si uno de los valores de entrada es nulo, devolverá un valor nulo porque estamos usando la cláusula RETURNS NULL ON NULL INPUT.
Ahora, intentaremos cambiar la cláusula RETURNS NULL ON NULL INPUT a CALLED ON NULL INPUT y veremos los resultados.
Echemos un vistazo.
CREATE OR REPLACE FUNCTION Max_value(value1 int, value2 int) CALLED ON NULL INPUT RETURNS int LANGUAGE java AS 'return Math.max(value1, value2);';
Cuando intentemos ejecutar, dará el siguiente error.
Echemos un vistazo.
InvalidRequest: code=2200 [Invalid query] message="Function udf.Max_value : (int, int) -> int can only be replaced with CALLED ON NULL INPUT"
Veremos que una vez que elijamos RETURNS NULL ON NULL INPUT no será posible cambiarlo. Para modificar primero tenemos que soltar y luego volver a crear la función UDF. echemos un vistazo.
DROP FUNCTION Max_value;
Recreando para modificar el UDF –
CREATE OR REPLACE FUNCTION Max_value(value1 int, value2 int) CALLED ON NULL INPUT RETURNS int LANGUAGE java AS 'return Math.max(value1, value2);';
Ahora, ejecutemos y veamos los resultados de la UDF.
SELECT function_id, num1, num2, Max_value(num1, num2) FROM UDF_Function_test WHERE function_id IN(1, 2, 3);
Aquí podemos ver que se espera un error debido a que no hay verificación nula en nuestro UDF.
FunctionFailure: code=1400 [User Defined Function failure] message="execution of 'udf.Max_value[int, int]' failed: java.lang.NullPointerException"
Publicación traducida automáticamente
Artículo escrito por Ashish_rana y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA