Todos os produtos
Search
Central de documentação

MaxCompute:Visão geral das UDFs do MaxCompute

Última atualização: Jun 26, 2026

O MaxCompute oferece funções integradas para tarefas comuns de processamento de dados. Quando essas funções não expressam sua lógica, estenda o MaxCompute com funções definidas pelo usuário (UDFs).

As funções integradas têm desempenho superior ao das UDFs. Use-as sempre que possível e crie uma UDF apenas quando as funções integradas não atenderem à sua lógica.

Quando usar uma UDF

Use uma UDF quando a lógica de transformação não puder ser expressa com funções integradas. Os cenários mais comuns incluem:

  • Análise personalizada de strings ou transformações específicas do negócio

  • Análise de dados espaciais

  • Pipelines de processamento de dados entre projetos

Para agregações padrão, operações de string e aritmética, prefira as funções integradas. Elas não exigem implantação e apresentam desempenho significativamente melhor em escala.

Se uma UDF e uma função integrada tiverem o mesmo nome, o MaxCompute chama a UDF. Para chamar a função integrada, adicione o prefixo :: . Exemplo: select ::concat('ab', 'c');

Tipos de UDF

Em sentido amplo, as UDFs incluem funções escalares definidas pelo usuário (UDF), funções de agregação definidas pelo usuário (UDAF) e funções com valor de tabela definidas pelo usuário (UDTF). Em sentido estrito, o termo UDF refere-se apenas às funções escalares definidas pelo usuário.

O MaxCompute suporta três tipos principais de UDF.

Tipo

Mapeamento de entrada-saída

Comportamento

UDF (função escalar definida pelo usuário)

Um para um

Cada linha de entrada retorna um valor de saída

UDTF (função com valor de tabela definida pelo usuário)

Um para muitos

Cada linha de entrada retorna múltiplos valores como uma tabela

UDAF (função de agregação definida pelo usuário)

Muitos para um

Várias linhas de entrada são agregadas em um único valor de saída

O MaxCompute também fornece tipos especializados de UDF para cenários específicos.

Tipo

Caso de uso

UDFs com código incorporado

Incorpora código Java ou Python diretamente em scripts SQL para simplificar o desenvolvimento e melhorar a legibilidade

UDFs SQL

Encapsula lógica SQL reutilizável para reduzir a duplicação de código

UDFs geoespaciais

Aplica funções geoespaciais do Hive para analisar dados espaciais no MaxCompute

Restrições e considerações

Limites rígidos

Acesso à Internet — Por padrão, as UDFs não acessam a Internet. Para ative esse acesso, envie uma solicitação de conexão de rede. Após a aprovação, a equipe de suporte técnico do MaxCompute entrará em contato para estabelecer a conexão. Para mais detalhes, consulte Network Connection Request FormProcesso de conexão de rede.

Acesso à VPC — Por padrão, as UDFs não acessam recursos em uma virtual private cloud (VPC). Para permitir o acesso à VPC, estabeleça uma conexão de rede entre o MaxCompute e a VPC. Para mais detalhes, consulte Usar UDFs para acessar recursos em VPCs.

Tipos de tabela não suportados — UDFs, UDAFs e UDTFs não leem dados dos seguintes tipos de tabela:

  • Tabelas com evolução de schema

  • Tabelas com tipos de dados complexos

  • Tabelas com tipos de dados json

  • Tabelas transacionais

Considerações

Uso de memória — Ao processar grandes conjuntos de dados com skew de dados, o job de computação pode exceder a alocação padrão de memória da JVM. Para aumentar o limite de memória, execute o seguinte comando no nível da sessão:

set odps.sql.udf.joiner.jvm.memory=xxxx;

Para mais informações, consulte FAQ sobre UDFs do MaxCompute.

Desenvolver uma UDF

O processo de desenvolvimento para UDFs com código incorporado, UDFs SQL e UDFs geoespaciais difere do fluxo de trabalho padrão de UDF, UDTF e UDAF. Consulte a documentação vinculada para esses tipos.

Java

A figura a seguir ilustra o fluxo de trabalho de desenvolvimento de UDF em Java.

Java UDF development workflow

Etapa

Obrigatório

Ação

Plataforma

Observações

1

Opcional

Adicione a dependência odps-sdk-udf ao arquivo POM

IntelliJ IDEA (Maven)

Pesquise por odps-sdk-udf nos repositórios Maven para obter a versão mais recente. Exemplo: 0.29.10-public

2

Obrigatório

Escreva o código da UDF

IntelliJ IDEA (Maven), MaxCompute Studio

Siga as Especificações de desenvolvimento de UDF e processo geral (Java)

3

Obrigatório

Depure na máquina local ou execute testes unitários

Verifique se a saída corresponde ao esperado

4

Obrigatório

Empacote o código em um arquivo JAR

5

Obrigatório

Faça upload do JAR como recurso para o projeto MaxCompute

Console do DataWorks, Cliente MaxCompute, MaxCompute Studio

Três métodos disponíveis: console do DataWorks (visual), cliente MaxCompute (SQL) ou MaxCompute Studio (código). Consulte os guias específicos da plataforma vinculados.

6

Obrigatório

Crie a UDF a partir do JAR enviado

7

Opcional

Chame a UDF nas consultas

Python

A figura a seguir ilustra o fluxo de trabalho de desenvolvimento de UDF em Python.

Python UDF development workflow

Etapa

Obrigatório

Ação

Plataforma

Observações

1

Obrigatório

Escreva o código da UDF

MaxCompute Studio

Siga as Especificações de desenvolvimento de UDF e processo geral (Python 3) ou Python 2

2

Obrigatório

Depure na máquina local ou execute testes unitários

Verifique se a saída corresponde ao esperado

3

Obrigatório

Envie arquivos Python e quaisquer recursos necessários (recursos de arquivo, recursos de tabela, pacotes de terceiros) para o projeto MaxCompute

Console do DataWorks, Cliente MaxCompute, MaxCompute Studio

Três métodos disponíveis: console do DataWorks (visual), cliente MaxCompute (SQL) ou MaxCompute Studio (código). Consulte os guias específicos da plataforma vinculados.

4

Obrigatório

Crie a UDF a partir dos arquivos enviados

5

Opcional

Chame a UDF nas consultas

Referência de SDK

Os SDKs a seguir suportam o desenvolvimento de UDFs em Java. Para detalhes sobre pacotes e classes, consulte o SDK do MaxCompute.

SDK

Descrição

odps-sdk-core

Gerencia recursos básicos do MaxCompute

odps-sdk-commons

Utilitários comuns para Java

odps-sdk-udf

APIs de UDF

odps-sdk-mapred

API MapReduce

odps-sdk-graph

API Graph

Chamar uma UDF

Após registrar uma UDF, chame-a da mesma forma que uma função integrada.

  • Dentro de um projeto — Chame a UDF diretamente, como qualquer função integrada.

  • Entre projetos — Para usar uma UDF do projeto B no projeto A, referencie-a com o prefixo do projeto:

    select B:udf_in_other_project(arg0, arg1) as res from table_t;

    Para configurar o compartilhamento entre projetos, consulte Acesso a recursos entre projetos baseado em pacotes.

Próximos passos

Explore exemplos completos para ver o desenvolvimento de UDFs na prática: