Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation d'une fonction définie par l'utilisateur (UDF) dans une vue matérialisée
Vous pouvez utiliser un scalaire UDF dans une vue matérialisée Amazon Redshift. Définissez-les en python ou SQL référencez-les dans la définition de la vue matérialisée.
Référencer un UDF dans une vue matérialisée
La procédure suivante montre comment effectuer des comparaisons UDFs arithmétiques simples, dans une définition de vue matérialisée.
Créez une table à utiliser dans la définition de la vue matérialisée.
CREATE TABLE base_table (a int, b int);
Créez une fonction scalaire définie par l’utilisateur en python qui renvoie une valeur booléenne indiquant si un entier est plus grand qu’un entier de comparaison.
CREATE OR REPLACE FUNCTION udf_python_bool(x1 int, x2 int) RETURNS bool IMMUTABLE AS $$ return x1 > x2 $$ LANGUAGE plpythonu;
Vous pouvez éventuellement créer une fonction similaire UDF avecSQL, que vous pouvez utiliser pour comparer les résultats avec la première.
CREATE OR REPLACE FUNCTION udf_sql_bool(int, int) RETURNS bool IMMUTABLE AS $$ select $1 > $2; $$ LANGUAGE SQL;
Créez une vue matérialisée qui sélectionne dans la table que vous avez créée et fait référence auUDF.
CREATE MATERIALIZED VIEW mv_python_udf AS SELECT udf_python_bool(a, b) AS a FROM base_table;
Vous pouvez éventuellement créer une vue matérialisée qui fait référence au SQLUDF.
CREATE MATERIALIZED VIEW mv_sql_udf AS SELECT udf_sql_bool(a, b) AS a FROM base_table;
Ajoutez des données à la table et actualisez la vue matérialisée.
INSERT INTO base_table VALUES (1,2), (1,3), (4,2);
REFRESH MATERIALIZED VIEW mv_python_udf;
Vous pouvez éventuellement actualiser la vue matérialisée qui fait référence au SQLUDF.
REFRESH MATERIALIZED VIEW mv_sql_udf;
Interrogez les données de votre vue matérialisée.
SELECT * FROM mv_python_udf ORDER BY a;
Les résultats de la requête sont les suivants :
a ----- false false true
Le résultat est
true
pour la dernière série de valeurs car la valeur de la colonnea
(4) est supérieure à la valeur de la colonneb
(2).-
Vous pouvez éventuellement interroger la vue matérialisée qui fait référence au SQLUDF. Les résultats de la SQL fonction correspondent à ceux de la version Python.
SELECT * FROM mv_sql_udf ORDER BY a;
Les résultats de la requête sont les suivants :
a ----- false false true
Cette fonction renvoie
true
pour la dernière série de valeurs à comparer. Utilisez une DROP instruction with CASCADE pour supprimer la fonction définie par l'utilisateur et la vue matérialisée qui y fait référence.
DROP FUNCTION udf_python_bool(int, int) CASCADE;
DROP FUNCTION udf_sql_bool(int, int) CASCADE;