Como usar uma função definida pelo usuário (UDF) em uma visão materializada - Amazon Redshift

Como usar uma função definida pelo usuário (UDF) em uma visão materializada

Você pode usar uma UDF escalar em uma visão materializada do Amazon Redshift. Defina essas funções em Python ou SQL e faça referência a elas na definição da visão materializada.

Como fazer referência a uma UDF em uma visão materializada

O procedimento a seguir mostra como usar UDFs que realizam comparações aritméticas simples em uma definição de visão materializada.

  1. Crie uma tabela para usar na definição de visão materializada.

    CREATE TABLE base_table (a int, b int);
  2. Crie uma função escalar definida pelo usuário em Python que retorne um valor booleano indicando se um inteiro é maior do que outro inteiro de comparação.

    CREATE OR REPLACE FUNCTION udf_python_bool(x1 int, x2 int) RETURNS bool IMMUTABLE AS $$ return x1 > x2 $$ LANGUAGE plpythonu;

    Opcionalmente, crie uma UDF funcionalmente semelhante com SQL, que você pode usar para comparar os resultados com a primeira.

    CREATE OR REPLACE FUNCTION udf_sql_bool(int, int) RETURNS bool IMMUTABLE AS $$ select $1 > $2; $$ LANGUAGE SQL;
  3. Crie uma visão materializada que faça uma seleção na tabela que você criou e faça referência à UDF.

    CREATE MATERIALIZED VIEW mv_python_udf AS SELECT udf_python_bool(a, b) AS a FROM base_table;

    Opcionalmente, você pode criar uma visão materializada que faça referência à UDF em SQL.

    CREATE MATERIALIZED VIEW mv_sql_udf AS SELECT udf_sql_bool(a, b) AS a FROM base_table;
  4. Adicione dados à tabela e atualize a visão materializada.

    INSERT INTO base_table VALUES (1,2), (1,3), (4,2);
    REFRESH MATERIALIZED VIEW mv_python_udf;

    Opcionalmente, você pode atualizar a visão materializada que faz referência à UDF em SQL.

    REFRESH MATERIALIZED VIEW mv_sql_udf;
  5. Consulte dados da visão materializada.

    SELECT * FROM mv_python_udf ORDER BY a;

    Os resultados da consulta são os seguintes:

    a ----- false false true

    Isso retorna true para o último conjunto de valores porque o valor da coluna a (4) é maior que o valor da coluna b (2).

  6. Opcionalmente, você pode consultar a visão materializada que faz referência à UDF em SQL. Os resultados da função SQL correspondem aos resultados da versão em Python.

    SELECT * FROM mv_sql_udf ORDER BY a;

    Os resultados da consulta são os seguintes:

    a ----- false false true

    Isso retorna true para o último conjunto de valores a ser comparado.

  7. Use uma instrução DROP com CASCADE para descartar a função definida pelo usuário e a visão materializada que faz referência a ela.

    DROP FUNCTION udf_python_bool(int, int) CASCADE;
    DROP FUNCTION udf_sql_bool(int, int) CASCADE;