CREATE DATA METRIC FUNCTION¶
Cria uma nova função de métrica de dados (DMF) no esquema atual ou especificado, ou substitui uma função de métrica de dados existente.
Depois de criar uma DMF, aplique-a a uma coluna da tabela usando um comando ALTER TABLE … ALTER COLUMN ou a uma coluna de exibição usando o comando ALTER VIEW.
- Consulte também:
Neste tópico:
Sintaxe¶
CREATE [ OR REPLACE ] DATA METRIC FUNCTION [ IF NOT EXISTS ] <name>
( <arg_name> TABLE( <c1> <data_type> [ , ... ] ) )
RETURNS NUMBER [ [ NOT ] NULL ]
[ LANGUAGE SQL ]
[ COMMENT = '<string_literal>' ]
AS
'<expression>'
Parâmetros obrigatórios¶
name
Identificador da DMF; deve ser único para seu esquema.
Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo,
"My object"
). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.Para obter mais informações, consulte Requisitos para identificadores.
( arg_name TABLE( c1 data_type [ , ... ] ) )
A assinatura para a DMF, que é usada como entrada para a expressão.
Você deve especificar:
Apenas um nome de argumento para a tabela,
arg_name
.Pelo menos um nome de coluna e seu tipo de dados,
c1 data_type
.Opcionalmente, você pode especificar colunas adicionais e seus tipos de dados. As colunas devem estar na mesma tabela e não podem fazer referência a uma tabela diferente.
RETURNS NUMBER
O tipo de dados da saída da função.
O tipo de dados só pode ser NUMBER.
AS expression
A expressão SQL que determina a saída da função. A expressão deve ser determinística e retornar um valor escalar. A expressão pode fazer referência a outros objetos de tabela, como por exemplo, usando uma cláusula WITH ou uma cláusula WHERE.
Os delimitadores em torno de
expression
podem ser aspas simples ou um par de sinais de cifrão. Usar$$
como delimitador facilita a escrita de expressões com aspas simples.Se o delimitador para o
expression
for o caractere de aspas simples, então qualquer aspas simples dentro deexpression
(por exemplo, literais de cadeia de caracteres) devem ter um escape com aspas simples.O
expression
não oferece suporte ao seguinte:Usando o constructo JOIN.
Uso de funções não determinísticas (por exemplo, CURRENT_TIME).
Referência a um objeto que depende de uma UDF ou UDTF.
Retorno de uma saída não escalar.
Parâmetros opcionais¶
LANGUAGE SQL
Especifica a linguagem usada para escrever a expressão.
SQL é a única linguagem compatível.
COMMENT = 'string_literal'
Um comentário para a DMF.
Requisitos de controle de acesso¶
Uma função usada para executar este comando SQL deve ter os seguintes privilégios no mínimo:
Privilégio |
Objeto |
Notas |
---|---|---|
CREATE DATA METRIC FUNCTION |
Esquema |
O privilégio permite apenas a criação de funções de métricas de dados no esquema. Se você quiser habilitar a criação de funções definidas pelo usuário, como UDFs SQL ou Java, a função deve ter o privilégio CREATE FUNCTION. |
Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.
Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.
Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.
Notas de uso¶
Se você quiser atualizar uma função de métricas de dados existente e precisar consultar a definição atual da função, execute o comando DESCRIBE FUNCTION (DMF) ou chame a função GET_DDL.
Em relação aos metadados:
Atenção
Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.
Exemplo: contagem de valores diferentes de NULL¶
Crie uma DMF que chama a função COUNT para retornar o número total de linhas que não contêm valores NULL ao avaliar as três primeiras 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: referência de chave estrangeira¶
Você pode criar uma função de métrica de dados que faz referência a uma tabela diferente daquela à qual você atribuiu a DMF. Por exemplo, você pode querer criar uma DMF para medir o número de linhas que são devidas a uma restrição de chave estrangeira. Como exemplo representativo, considere duas tabelas, salespeople
e salesorders
, que têm uma coluna comum chamada sp_id
que é designada como uma restrição de chave estrangeira.
Crie uma DMF para identificar o número de linhas que incluem uma referência de chave estrangeira. A cláusula WHERE especifica a coluna sp_id
, que contém os identificadores dos vendedores, na tabela salespeople
:
CREATE OR REPLACE DATA METRIC FUNCTION governance.dmfs.foreign_key_sales( arg_t TABLE (arg_c INT)) RETURNS NUMBER AS 'SELECT COUNT(*) FROM arg_t WHERE arg_c IN (SELECT sp_id FROM salespeople)';
Chame a DMF manualmente e especifique a coluna sp_id
na tabela salesorders
:
SELECT governance.dmfs.foreign_key_sales(SELECT sp_id FROM salesorders);
A saída retorna o número de linhas na tabela salesorder
onde o valor na coluna sp_id
é o resultado de um valor na coluna sp_id
na tabela salespeople
.