Uso de una función definida por el usuario (UDF) en una vista materializada
Puede utilizar una UDF escalar en una vista materializada de Amazon Redshift. Defina estos valores en python o SQL y haga referencia a ellos en la definición de la vista materializada.
Referencia a una UDF en una vista materializada
En el siguiente procedimiento, se muestra cómo utilizar las UDF que realizan comparaciones aritméticas simples, en una definición de vista materializada.
Cree una tabla para utilizarla en la definición de vista materializada.
CREATE TABLE base_table (a int, b int);
Cree una función escalar definida por el usuario en python que devuelva un valor booleano que indique si un entero es mayor que un entero de comparación.
CREATE OR REPLACE FUNCTION udf_python_bool(x1 int, x2 int) RETURNS bool IMMUTABLE AS $$ return x1 > x2 $$ LANGUAGE plpythonu;
También puede crear una UDF funcionalmente similar con SQL, que puede utilizar para comparar los resultados con la primera.
CREATE OR REPLACE FUNCTION udf_sql_bool(int, int) RETURNS bool IMMUTABLE AS $$ select $1 > $2; $$ LANGUAGE SQL;
Cree una vista materializada que seleccione de la tabla que creó y haga referencia a la UDF.
CREATE MATERIALIZED VIEW mv_python_udf AS SELECT udf_python_bool(a, b) AS a FROM base_table;
También puede crear una vista materializada que haga referencia a la UDF de SQL.
CREATE MATERIALIZED VIEW mv_sql_udf AS SELECT udf_sql_bool(a, b) AS a FROM base_table;
Agregue datos a la tabla y actualice la vista materializada.
INSERT INTO base_table VALUES (1,2), (1,3), (4,2);
REFRESH MATERIALIZED VIEW mv_python_udf;
También puede actualizar la vista materializada que hace referencia a la UDF de SQL.
REFRESH MATERIALIZED VIEW mv_sql_udf;
Consulte los datos desde la vista materializada.
SELECT * FROM mv_python_udf ORDER BY a;
Los resultados de la consulta son los siguientes:
a ----- false false true
Devuelve
true
para el último conjunto de valores porque el valor de la columnaa
(4) es mayor que el valor de la columnab
(2).-
También puede consultar la vista materializada que hace referencia a la UDF de SQL. Los resultados de la función SQL coinciden con los resultados de la versión de Python.
SELECT * FROM mv_sql_udf ORDER BY a;
Los resultados de la consulta son los siguientes:
a ----- false false true
Devuelve
true
para el último conjunto de valores de la comparación. Utilice una instrucción DROP con CASCADE para eliminar la función definida por el usuario y la vista materializada que hace referencia a ella.
DROP FUNCTION udf_python_bool(int, int) CASCADE;
DROP FUNCTION udf_sql_bool(int, int) CASCADE;