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 $$;
- 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)';
Agora, suponha que você queira verificar se cada pedido, conforme identificado por seu
sp_id
, na tabelasalesorders
, mapeia de volta para umsp_id
na tabelasalespeople
. É possível adicionar a DMF à tabelasalesorders
ao mesmo tempo em que a tabelasalespeople
é 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)));
A saída retorna o número de linhas na tabela
salesorders
que têm um valor na colunasp_id
que não é exibido na colunasp_id
da tabelasalespeople
. Um valor maior que 0 indica que há valoressp_id
emsalesorders
que não estão mapeados para registros emsalespeople
.
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;
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
)
);
+-----------+---------------------------------------------------------------------+
| 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';
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
)
);