Introdução às rotinas
Este documento descreve como escolher uma rotina, que é um tipo de recurso que usa para criar funções ou procedimentos armazenados no BigQuery.
Rotinas suportadas
O BigQuery suporta as seguintes rotinas:
- Funções definidas pelo utilizador (FDUs)
- Funções de agregação definidas pelo utilizador (UDAFs)
- Funções de tabela
- Funções remotas
- Procedimentos armazenados
Como escolher uma rotina
Esta secção descreve os fatores a ter em conta ao escolher uma rotina e compara as rotinas por tarefa.
Fatores a considerar
Para escolher uma rotina, tenha em atenção os seguintes fatores, que são descritos nas secções para cada tipo de rotina:
- O tipo de tarefa a implementar.
- A linguagem de programação a usar.
- O tipo de persistência a implementar para a rotina: temporária ou persistente.
- O tipo de reutilização necessário para a rotina: em consultas únicas ou múltiplas.
- Considerações sobre o desempenho.
- Aceder a serviços externos.
- Partilhar a rotina com os utilizadores.
Compare rotinas por tarefa
A tabela seguinte mostra o tipo de tarefas que pode realizar para cada tipo de rotina:
Tarefa |
Tipo de recurso de rotina |
---|---|
Crie funções que realizam tarefas de uso geral no BigQuery. |
UDF de SQL ou JavaScript UDAF SQL ou JavaScript |
Crie funções que realizam tarefas de uso geral no BigQuery e que comunicam com Google Cloud sistemas externos através de uma ligação de recursos da nuvem. |
FDU Python |
Criar funções que agregam dados. |
FADUs |
Crie uma tabela com parâmetros. |
Funções de tabela |
Criar funções que usam linguagens, bibliotecas ou serviços não suportados no BigQuery. Estas funções integram-se diretamente com as funções do Cloud Run e o Cloud Run. |
Funções remotas |
Execute várias declarações numa consulta como uma consulta de várias declarações usando a linguagem procedimental. Pode usar uma consulta com várias declarações para fazer o seguinte:
Crie e chame procedimentos armazenados para o Apache Spark no BigQuery. |
Procedimentos armazenados |
Funções definidas pelo utilizador (FDUs)
Uma FDU permite-lhe criar uma função através de uma expressão SQL, código JavaScript ou código Python. As FDUs aceitam colunas de entrada, realizam ações na entrada e devolvem o resultado dessas ações como valor.
Pode definir FDUs como persistentes ou temporárias. Pode reutilizar FDUs persistentes em várias consultas, enquanto as FDUs temporárias existem apenas no âmbito de uma única consulta.
Pode criar FUDs para utilização com rotinas de ocultação personalizadas, que devolvem o valor de uma coluna após a aplicação de uma FUD à coluna. Depois de criar a rotina de ocultação personalizada, esta fica disponível como uma regra de ocultação em Criar políticas de dados.
Para mais informações sobre as FDU, consulte os seguintes recursos:
- Funções definidas pelo utilizador
- Funções definidas pelo utilizador no SQL antigo
- Compare UDFs e UDAFs
FDUs baseadas em idiomas
- As UDFs baseadas em SQL suportam parâmetros de UDFs baseados em modelos, que podem corresponder a mais do que um tipo de argumento quando a UDF é chamada. As UDFs SQL também podem devolver o valor de uma subconsulta escalar.
- As FDUs baseadas em JavaScript permitem-lhe chamar código escrito em JavaScript a partir de uma consulta SQL.
- Normalmente, as UDFs de JavaScript consomem mais recursos de espaços em comparação com as consultas SQL padrão, o que diminui o desempenho das tarefas.
- Se a função puder ser expressa em SQL, é frequentemente mais otimizado executar o código como uma tarefa de consulta SQL padrão.
- As UDFs baseadas em Python são criadas e executadas em recursos geridos pelo BigQuery. Estas FDUs permitem-lhe implementar uma função em Python e usá-la numa consulta SQL.
- Pode aceder a um Google Cloud serviço ou a um serviço externo a partir de uma UDF Python através da conta de serviço Cloud resource connection.
- Também pode instalar bibliotecas de terceiros a partir do Python Package Index (PyPI).
FDUs contribuídas pela comunidade
Além das UDFs que cria, as UDFs contribuídas pela comunidade estão disponíveis no
bigquery-public-data.persistent_udfs
conjunto de dados público e no repositório
bigquery-utils
GitHub de código aberto.
Funções de agregação definidas pelo utilizador (UDAFs)
Uma FDUA permite-lhe criar uma função de agregação através de uma expressão que contém código SQL ou Javascript. Uma FDAA aceita colunas de entrada, realiza um cálculo num grupo de linhas de cada vez e, em seguida, devolve o resultado desse cálculo como um único valor.
As FUAs não podem alterar dados, comunicar com sistemas externos nem enviar registos para o Google Cloud Observability ou aplicações semelhantes.
Para obter mais informações, consulte os seguintes recursos:
UDAFs de SQL
Normalmente, as UDAFs SQL agregam parâmetros de funções em todas as linhas de um grupo.
No entanto, pode especificar um parâmetro de função como não agregado através da palavra-chave NOT AGGREGATE
. Um parâmetro de função não agregada é um parâmetro de função escalar com um valor constante para todas as linhas num grupo. As FUAs SQL podem conter parâmetros agregados e não agregados.
UDAFs JavaScript
As FUAsJs podem incluir bibliotecas JavaScript. O corpo da função JavaScript pode incluir código JavaScript personalizado, como variáveis globais de JavaScript e funções personalizadas.
Uma vez que as funções baseadas em JavaScript usam normalmente mais recursos, consultar estas sugestões de desempenho pode ser útil.
As FUADs de Javascript têm algumas restrições. Apenas são permitidas codificações de tipo específico e existem requisitos para serialização e desserialização.
Compare UDFs e UDAFs
A escolha de uma FDU em vez de uma FDUA depende da tarefa específica que está a tentar realizar.
- Para fazer um cálculo ou uma transformação em valores de dados individuais, use uma UDF.
- Para fazer o mesmo em grupos de valores de dados, use uma UDAF.
Por exemplo, se quiser calcular a média de uma coluna de números, use uma UDAF. Se quiser converter uma coluna de strings em letras maiúsculas, use uma UDF.
As UDFs e as UDAFs têm as seguintes semelhanças:
- As UDFs e as UDAFs não podem alterar dados, comunicar com sistemas externos nem enviar registos para o Google Cloud Observability ou aplicações semelhantes. A exceção são as UDFs do Python, que podem aceder a serviços externos através de uma ligação de recursos do Google Cloud. No entanto, as UDFs Python não suportam os VPC Service Controls nem as chaves de encriptação geridas pelo cliente (CMEK).
- As FUAs têm as mesmas limitações que as FUs, além de algumas mais.
- As FDU e as FADUs têm as mesmas quotas e limites.
As UDFs e as UDAFs têm as seguintes diferenças:
Atributo |
UDFs |
UDAFs |
---|---|---|
Definição |
As funções definidas pelo utilizador (FDUs) aceitam colunas de entrada, realizam ações na entrada e devolvem o resultado dessas ações como valor. |
As funções de agregação definidas pelo utilizador (UDAFs) aceitam colunas de entrada, realizam um cálculo num grupo de linhas de cada vez e, em seguida, devolvem o resultado desse cálculo como um único valor. |
Idiomas compatíveis |
SQL, Javascript e Python |
SQL e JavaScript |
Persistência |
|
|
Argumentos e tipos de dados |
As UDFs aceitam valores de parâmetros em conformidade com os tipos de dados do GoogleSQL para o BigQuery. Alguns tipos de SQL têm um mapeamento direto para tipos de JavaScript, mas outros não. Consulte os tipos suportados para JavaScript. Para uma UDF SQL, os valores dos parâmetros podem ser Apenas as UDFs Javascript têm um especificador de determinismo que fornece uma sugestão ao BigQuery sobre se o resultado da consulta pode ser colocado em cache. |
As UDAFs de SQL e Javascript aceitam valores de parâmetros em conformidade com os tipos de dados do GoogleSQL para o BigQuery. Os parâmetros das funções podem ser agregados ou não agregados. |
Utilização |
As UDFs são usadas frequentemente para limpeza, transformação e validação de dados. |
As UDAFs são usadas frequentemente para calcular estatísticas de resumo, como médias, somas e contagens. |
Funções de tabela
Uma função de tabela, também denominada função de valor de tabela (TVF), é uma FDU que devolve uma tabela. Pode usar uma função de tabela em qualquer lugar onde possa usar uma tabela. As funções de tabela comportam-se de forma semelhante às vistas, mas uma função de tabela pode receber parâmetros.
Pode fazer o seguinte com as funções de tabela:
- Transmita vários parâmetros.
- Chame uma função de tabela em qualquer contexto em que uma tabela seja válida.
- Junte o resultado de uma função de tabela com outra tabela.
- Use uma função de tabela numa subconsulta.
Para mais informações sobre as funções de tabela, consulte Funções de tabela, Limitações e Quotas e limites.
Funções remotas
As funções remotas permitem-lhe implementar a sua função noutros idiomas que não o SQL e o Javascript, ou usar bibliotecas ou serviços que não são suportados nas UDFs do BigQuery.
Uma função remota do BigQuery integra a sua função Google SQL com as funções do Cloud Run e o Cloud Run através de qualquer idioma suportado e, em seguida, invoca essas funções a partir de consultas Google SQL.
As seguintes tarefas são exemplos do que pode fazer com funções remotas:
A criação de uma função remota requer os seguintes passos:
- Crie o ponto final HTTP nas funções do Cloud Run ou no Cloud Run.
- Crie uma função remota no BigQuery através do tipo de ligação
CLOUD_RESOURCE
. - Use a função remota numa consulta tal como qualquer outra FDU para o BigQuery.
Para mais informações sobre funções remotas, consulte Funções remotas, Limitações e Quotas e limites.
Procedimentos armazenados
Um procedimento armazenado de SQL é uma coleção de declarações que podem ser chamadas a partir de outras consultas ou outros procedimentos armazenados. Dá um nome e armazena um procedimento num conjunto de dados do BigQuery.
Os procedimentos armazenados suportam declarações de linguagem processual, que lhe permitem fazer ações como definir variáveis e implementar o fluxo de controlo. Pode saber mais acerca das declarações de linguagem processual na referência de linguagem processual.
Um procedimento armazenado pode fazer o seguinte:
- Aceitar argumentos de entrada e devolver valores como saída.
- Aceder ou modificar dados em vários conjuntos de dados por vários utilizadores.
- Contenha uma consulta com várias declarações.
Alguns procedimentos armazenados estão integrados no BigQuery e não precisam de ser criados. Estes são denominados procedimentos do sistema e pode saber mais sobre eles na Referência de procedimentos do sistema.
Os procedimentos armazenados para o Spark no BigQuery também são suportados. Estes procedimentos têm quotas e limites.
Para saber mais sobre os procedimentos armazenados, consulte Procedimentos armazenados de SQL.