Todos os produtos
Search
Central de documentação

MaxCompute:Visão geral

Última atualização: Sep 17, 2026

O MaxCompute oferece diversas funções integradas para atender às suas necessidades de negócios. Caso essas funções não sejam suficientes, escreva código para criar funções definidas pelo usuário (UDFs) seguindo o processo de desenvolvimento e os exemplos descritos neste tópico.

Informações básicas

Em sentido amplo, as funções definidas pelo usuário abrangem três tipos: função escalar definida pelo usuário (UDF), função com valor de tabela definida pelo usuário (UDTF) e função de agregação definida pelo usuário (UDAF). Em sentido estrito, o termo UDF refere-se apenas às funções escalares definidas pelo usuário. A tabela a seguir descreve os tipos de UDF compatíveis com o MaxCompute.

Tipo de UDF

Nome

Cenário

UDF

função escalar definida pelo usuário

Adequada para cenários em que os dados de entrada e saída possuem um mapeamento de um para um. Cada vez que a UDF lê uma linha de dados, ela retorna um único valor de saída.

UDTF

função com valor de tabela definida pelo usuário, também conhecida como UDF de tabela

Indicada quando há um mapeamento de um para muitos entre entrada e saída. Ao ler uma linha de dados, a UDTF retorna múltiplos valores, tratados como uma tabela.

UDAF

função de agregação definida pelo usuário

Estabelece um mapeamento de muitos para um entre os dados de entrada e saída. Vários registros de entrada são agregados para gerar um único valor de saída.

Além das UDFs mencionadas acima, o MaxCompute disponibiliza outras opções para cenários específicos.

Tipo de UDF

Cenário

Code-embedded UDFs

Para simplificar o desenvolvimento de UDFs no MaxCompute e visualizar a lógica do código, incorpore código Java ou Python diretamente em scripts SQL.

UDFs (SQL user-defined functions)

Caso seu código contenha trechos duplicados, utilize UDFs SQL para aumentar a taxa de reutilização e facilitar o desenvolvimento.

Geospatial UDFs

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

Limites

  • Acesso à Internet por meio de UDFs

    Por padrão, o MaxCompute bloqueia o acesso à Internet via UDFs. Se precisar desse acesso, preencha o formulário de solicitação de conexão de rede conforme suas necessidades de negócios e envie a solicitação. A equipe de suporte técnico do MaxCompute entrará em contato prontamente para habilitar a conectividade de rede. Para mais detalhes sobre como preencher o formulário, consulte Network connection process.

  • Acesso a uma VPC por meio de UDFs

    Por padrão, o MaxCompute não permite que UDFs acessem recursos em VPCs. Para permitir esse acesso, estabeleça uma conexão de rede entre o MaxCompute e a VPC. Para mais informações sobre os procedimentos necessários, consulte Access VPC resources from a UDF.

  • Leitura de dados de tabelas por meio de UDFs, UDAFs ou UDTFs

    Não é possível utilizar UDFs, UDAFs ou UDTFs para ler dados dos seguintes tipos de tabelas:

    • Tabelas com evolução de schema

    • Tabelas com tipos de dados complexos

    • Tabelas com tipos de dados JSON

    • Tabelas transacionais

Precauções

Antes de utilizar UDFs, observe os pontos abaixo:

  • As UDFs não oferecem o mesmo desempenho que as funções integradas. Dê preferência às funções nativas para implementar sua lógica de negócios sempre que possível.

  • Ao usar uma UDF em instruções SQL, o uso de memória de um job de computação pode exceder o tamanho padrão alocado se houver processamento de grandes volumes de dados e ocorrência de data skew. Nesse caso, execute o comando set odps.sql.udf.joiner.jvm.memory=xxxx; no nível da sessão para resolver o problema. Para mais informações sobre UDFs, consulte FAQ about MaxCompute UDFs.

  • Se uma UDF tiver o mesmo nome de uma função integrada, a UDF terá prioridade na chamada. Por exemplo, se existirem simultaneamente a UDF CONCAT e a função integrada CONCAT no MaxCompute, o sistema chamará automaticamente a UDF CONCAT. Para invocar a função integrada, adicione o símbolo :: antes do nome da função. Exemplo: select ::concat('ab', 'c');.

Desenvolvimento de UDFs: ferramentas suportadas e processo geral

Esta seção descreve como desenvolver uma UDF, UDTF ou UDAF.

Nota

Os processos de desenvolvimento de Code-embedded UDFs, UDFs (SQL user-defined functions) e Geospatial UDFs são diferentes. Para mais detalhes, consulte a documentação correspondente.

Usar Java para desenvolver UDFs

A figura a seguir ilustra o fluxo de desenvolvimento de uma UDF do MaxCompute em Java.

Java开发流程

Procedimento

Descrição

Plataforma

Precauções ou referências

1

Opcional

Antes de escrever código com Maven, adicione as dependências do SDK relevantes ao arquivo POM para garantir a compilação correta. Veja abaixo um exemplo de dependência do SDK:

<dependency>
    <groupId>com.aliyun.odps</groupId>
    <artifactId>odps-sdk-udf</artifactId>
   <version>0.29.10-public</version>
</dependency>

Pesquise por odps-sdk-udf nos repositórios Maven para obter a versão da dependência do SDK.

  • IntelliJ IDEA (Maven)

Nenhuma.

2

Obrigatório

Escreva o código da UDF conforme suas necessidades de negócios.

Ao desenvolver UDFs em Java, certifique-se de cumprir os requisitos das especificações de desenvolvimento de UDF Java. Para mais informações, consulte UDF development specifications and general process (Java).

3

Obrigatório

Depure a UDF executando-a localmente ou realizando testes unitários para validar se o resultado atende às expectativas.

4

Obrigatório

Depure o código da UDF para garantir que ele seja empacotado em um arquivo JAR após a execução bem-sucedida em ambiente local.

5

Obrigatório

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

Você pode usar os três métodos a seguir para fazer upload de recursos e registrar funções:

6

Obrigatório

Crie uma UDF com base no arquivo JAR enviado.

7

Opcional

Chame a UDF no código de consulta de dados.

Nenhuma.

Usar Python para desenvolver UDFs

A figura a seguir ilustra o fluxo de desenvolvimento de uma UDF do MaxCompute em Python.Python开发流程

Procedimento

Descrição

Plataforma

Precauções ou referências

1

Obrigatório

Desenvolva a UDF de acordo com suas necessidades de negócios.

MaxCompute Studio

Ao desenvolver UDFs em Python, assegure-se de atender aos requisitos das especificações de desenvolvimento de UDF Python. Para mais detalhes, consulte UDF development specifications and general process (Python 3) ou UDF development specifications and general process (Python 2).

2

Obrigatório

Depure a UDF executando-a localmente ou por meio de testes unitários para verificar se o resultado corresponde ao esperado.

3

Obrigatório

Envie arquivos Python ou recursos necessários, como recursos de arquivo, recursos de tabela e pacotes de terceiros, para um projeto MaxCompute.

Você pode usar os três métodos a seguir para fazer upload de recursos e registrar funções:

4

Obrigatório

Crie uma UDF com base nos arquivos Python enviados ou nos recursos necessários.

5

Opcional

Chame a UDF no código de consulta de dados.

Nenhuma.

Referência de desenvolvimento: MaxCompute SDK

A tabela a seguir descreve os SDKs fornecidos pelo MaxCompute. Para mais informações sobre os pacotes incluídos em cada SDK e as classes correspondentes, consulte MaxCompute SDK.

Nome do SDK

Descrição

odps-sdk-core

Fornece classes para gerenciar recursos básicos do MaxCompute.

odps-sdk-commons

Disponibiliza utilitários comuns para Java.

odps-sdk-udf

Oferece a interface principal para funcionalidades de UDF.

odps-sdk-mapred

Disponibiliza a API MapReduce.

odps-sdk-graph

Oferece a API Graph.

Chamar uma UDF

Após desenvolver e registrar uma UDF no MaxCompute, utilize-a nas etapas subsequentes do desenvolvimento de jobs. Os métodos abaixo mostram como chamar uma UDF:

  • Uso dentro de um projeto MaxCompute: O procedimento é semelhante ao uso de built-in functions. Utilize a função definida pelo usuário da mesma forma que uma função integrada.

  • Uso entre projetos: Utilize uma UDF do Projeto B no Projeto A. Exemplo de instrução: select B:udf_in_other_project(arg0, arg1) as res from table_t;. Para mais informações sobre compartilhamento entre projetos, consulte Cross-project resource access based on packages.

Exemplo de desenvolvimento de UDF