Funções métricas de dados personalizadas

Se não houver uma função de métrica de qualidade de dados do sistema (DMF) que possa realizar suas verificações de qualidade de dados, é possível usar o comando CREATE DATA METRIC FUNCTION para criar sua própria DMF.

Crie uma DMF

Os exemplos a seguir demonstram como usar o comando CREATE DATA METRIC FUNCTION para criar uma DMF personalizada.

Exemplo: DMF definida pelo usuário com argumento de tabela único

Crie uma DMF que chame a função COUNT para retornar o número total de linhas que têm números positivos em três colunas da tabela:

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.count_positive_numbers(
  arg_t TABLE(
    arg_c1 NUMBER,
    arg_c2 NUMBER,
    arg_c3 NUMBER
  )
)
RETURNS NUMBER
AS
$$
  SELECT
    COUNT(*)
  FROM arg_t
  WHERE
    arg_c1>0
    AND arg_c2>0
    AND arg_c3>0
$$;
Copy
Exemplo: uso de vários argumentos de tabela para realizar verificações referenciais

Uma DMF definida pelo usuário pode ter mais de um argumento que aceite uma tabela. Ao adicionar a DMF a uma tabela, essa tabela é usada como o primeiro argumento. Se houver um argumento adicional que aceite uma tabela, você também deverá especificar o nome totalmente qualificado da segunda tabela. Esse recurso simplifica a integridade referencial, a correspondência e a comparação ou a verificação condicional em diferentes conjuntos de dados.

Suponha que você queira validar a integridade referencial conforme definido por uma relação de chave primária/chave estrangeira. Nesse caso, é possível criar uma DMF para validar se todos os registros em uma tabela de origem têm registros correspondentes na tabela referenciada. A seguinte DMF definida pelo usuário retorna o número de registros em que o valor de uma coluna em uma tabela não tem um valor correspondente na coluna de outra tabela:

CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.referential_check(
  arg_t1 TABLE (arg_c1 INT), arg_t2 TABLE (arg_c2 INT))
RETURNS NUMBER AS
 'SELECT COUNT(*) FROM arg_t1
  WHERE arg_c1 NOT IN (SELECT arg_c2 FROM arg_t2)';
Copy

Agora, suponha que você queira verificar se cada pedido, conforme identificado por seu sp_id, na tabela salesorders, mapeia de volta para um sp_id na tabela salespeople. É possível adicionar a DMF à tabela salesorders ao mesmo tempo em que a tabela salespeople é especificada como o outro argumento da tabela.

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION governance.dmfs.referential_check
    ON (sp_id, TABLE (my_db.sch1.salespeople(sp_id)));
Copy

A saída retorna o número de linhas na tabela salesorders que têm um valor na coluna sp_id que não é exibido na coluna sp_id da tabela salespeople. Um valor maior que 0 indica que há valores sp_id em salesorders que não estão mapeados para registros em salespeople.

Teste uma DMF personalizada

Você pode executar uma DMF personalizada manualmente para testá-la antes de associá-la a uma ou mais tabelas. Para obter mais informações, consulte Chame uma DMF manualmente.

Proteja a DMF personalizada

É possível usar o comando ALTER FUNCTION para tornar segura uma DMF. Para obter mais informações sobre o que significa uma função ser segura, consulte Proteção de informações sensíveis com UDFs e procedimentos armazenados seguros.

ALTER FUNCTION governance.dmfs.count_positive_numbers(
 TABLE(
   NUMBER,
   NUMBER,
   NUMBER
))
SET SECURE;
Copy

Visualização das propriedades de uma DMF

Descreva a DMF para visualizar suas propriedades:

DESC FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy
+-----------+---------------------------------------------------------------------+
| property  | value                                                               |
+-----------+---------------------------------------------------------------------+
| signature | (ARG_T TABLE(ARG_C1 NUMBER, ARG_C2 NUMBER, ARG_C3 NUMBER))          |
| returns   | NUMBER(38,0)                                                        |
| language  | SQL                                                                 |
| body      | SELECT COUNT(*) FROM arg_t WHERE arg_c1>0 AND arg_c2>0 AND arg_c3>0 |
+-----------+---------------------------------------------------------------------+

Defina uma tag em uma DMF personalizada

Use o comando ALTER FUNCTION para definir uma tag em uma DMF:

ALTER FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(NUMBER, NUMBER, NUMBER))
  SET TAG governance.tags.quality = 'counts';
Copy

Descarte uma DMF

Você pode usar o comando DROP FUNCTION para remover uma função de métrica de dados personalizada do sistema.

Nota

Você não pode eliminar uma DMF personalizada do sistema enquanto ela ainda estiver associada a uma tabela ou exibição. Use a função DATA_METRIC_FUNCTION_REFERENCES para identificar as tabelas e exibições que têm uma função de métrica de dados definida nelas.

Para obter informações sobre como remover associações DMF de uma tabela ou exibição, consulte Descarte uma DMF de um objeto.

Remova uma DMF personalizada do sistema:

DROP FUNCTION governance.dmfs.count_positive_numbers(
  TABLE(
    NUMBER, NUMBER, NUMBER
  )
);
Copy