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:

Referência de comando de DMF

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>'
Copy

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 de expression (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
$$;
Copy

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)';
Copy

Chame a DMF manualmente e especifique a coluna sp_id na tabela salesorders:

SELECT governance.dmfs.foreign_key_sales(SELECT sp_id FROM salesorders);
Copy

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.