Regras de chamada de função no SQL padrão

A menos que seja indicado de outra forma na descrição da função, as regras a seguir aplicam-se a todas as funções:

  • Para funções que aceitam tipos numéricos, se um operando for um ponto flutuante e o outro for um outro tipo numérico, ambos serão convertidos para FLOAT64 antes que a função seja avaliada.
  • Se um operando for NULL, o resultado será NULL, com exceção do operador IS.

  • Para funções que fazem diferenciação de fuso horário (conforme indicado na descrição da função), se um fuso horário não for especificado, o padrão UTC será usado.

Prefixo SAFE.

Sintaxe:

SAFE.function_name()

Descrição

Se você começar uma função com o prefixo SAFE., ele retornará NULL em vez de um erro. O prefixo SAFE. só evita erros da própria função prefixada, e não os ocorridos durante a avaliação de expressões de argumentos. O prefixo SAFE. só evita erros ocorridos por causa do valor das entradas de função, como os do tipo "valor fora do intervalo". Outros erros, como os internos ou de sistema, ainda podem ocorrer. Se a função não retornar um erro, SAFE. não afetará a saída. Se a função jamais retornar um erro, como RAND, SAFE. não entrará em vigor.

O prefixo SAFE. não é aceito por operadores, como + e =. Para evitar erros em uma operação de divisão, use SAFE_DIVIDE. Alguns operadores, como IN, ARRAY e UNNEST, são semelhantes a funções, mas não são compatíveis com o prefixo SAFE.. As funções CAST e EXTRACT também não aceitam o prefixo SAFE.. Para evitar erros de cast, use SAFE_CAST.

Exemplo

No exemplo a seguir, o primeiro uso da função SUBSTR normalmente retornaria um erro porque a função não aceita argumentos de comprimento com valores negativos. No entanto, o prefixo SAFE. faz a função retornar NULL. O segundo uso da função SUBSTR fornece a saída esperada: o prefixo SAFE. não entra em vigor.

SELECT SAFE.SUBSTR('foo', 0, -2) AS safe_output UNION ALL
SELECT SAFE.SUBSTR('bar', 0, 2) AS safe_output;

+-------------+
| safe_output |
+-------------+
| NULL        |
| ba          |
+-------------+

Funções compatíveis

O BigQuery aceita o uso do prefixo SAFE. com a maioria das funções escalares que podem gerar erros, incluindo funções STRING, funções matemáticas, funções DATE, funções DATETIME e funções TIMESTAMP. O uso do prefixo SAFE. com funções agregadas, analíticas ou definidas pelo usuário não é compatível com o BigQuery.

Como chamar funções definidas pelo usuário (UDFs) persistentes

Depois de criar uma UDF persistente, é possível chamá-la como qualquer outra função, prefixada com o nome do conjunto de dados em que foi definida como prefixo.

Sintaxe

[`project_name`].dataset_name.function_name([parameter_value[, ...]])

Para chamar uma UDF em um projeto diferente daquele em que você está executando a consulta, é necessário usar project_name.

Exemplos

O exemplo a seguir cria uma UDF denominada multiply_by_three e a chama no mesmo projeto.

CREATE FUNCTION my_dataset.multiply_by_three(x INT64) AS (x * 3);

SELECT my_dataset.multiply_by_three(5) AS result; -- returns 15

O exemplo a seguir chama uma UDF persistente de outro projeto.


CREATE `other_project`.other_dataset.other_function(x INT64, y INT64)
  AS (x * y * 2);

SELECT `other_project`.other_dataset.other_function(3, 4); --returns 24
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.