Todos os produtos
Search
Central de documentação

MaxCompute:Visão geral de UDTF

Última atualização: Jun 26, 2026

As funções com valor de tabela definidas pelo usuário (UDTFs) permitem estender os recursos nativos do MaxCompute ao escrever funções personalizadas em Java ou Python. Uma UDTF lê uma linha de entrada e retorna várias linhas; a saída é tratada como uma tabela.

O MaxCompute inclui algumas UDTFs integradas, como EXPLODE. Para mais informações, consulte Outras funções e Funções de tipos complexos.

Quando usar UDTFs

Use uma UDTF quando as funções integradas não expressarem sua lógica — por exemplo, para emitir um número variável de linhas de saída por linha de entrada ou quando a transformação depender de estado acumulado entre linhas de uma partição.

As funções integradas são otimizadas para o mecanismo distribuído do MaxCompute e superam o desempenho das UDTFs em grande escala. Prefira as funções nativas sempre que atenderem ao seu caso de uso.

Linguagens compatíveis

Linguagem

Versão

Java

Python 2

2.7

Python 3

CPython 3.7.3

Para detalhes de implementação, consulte UDTFs Java, UDTF Python 2 e UDTFs Python 3.

Limitações

  • Acesso à Internet: Por padrão, as UDFs não acessam a Internet. Para ative esse acesso, preencha o formulário de 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 obter detalhes, consulte Processo de conexão de rede.

  • Proibição de outras colunas no mesmo SELECT: Instruções SELECT que chamam uma UDTF não podem referenciar outras colunas ou expressões. A instrução a seguir é inválida:

    -- Invalid: mixes a UDTF with another column
    select value, user_udtf(key) as mycol ...
  • Sem aninhamento: Não aninhe UDTFs dentro de outras UDTFs. A instrução a seguir é inválida:

    -- Invalid: user_udtf2 is nested inside user_udtf1
    select user_udtf1(user_udtf2(key)) as mycol...;
  • Incompatibilidade com GROUP BY, DISTRIBUTE BY e SORT BY: Não use uma UDTF na mesma instrução SELECT que contenha essas cláusulas. A instrução a seguir é inválida:

    -- Invalid: UDTF used with GROUP BY
    select user_udtf(key) as mycol ... group by mycol;

Observações de uso

Memória: Se um job de UDF processar grandes volumes de dados com data skew, ele poderá exceder a alocação padrão de memória da JVM. Execute o comando a seguir no nível da sessão para aumentar a memória:

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

Para obter a lista completa de perguntas frequentes sobre UDFs, consulte Perguntas frequentes sobre UDFs do MaxCompute.

Conflitos de nomes: Se uma UDF tiver o mesmo nome de uma função integrada, o MaxCompute chamará a UDF. Para invocar explicitamente a função integrada, adicione o prefixo :::

select ::concat('ab', 'c');

Processo de desenvolvimento

As etapas variam ligeiramente entre Java e Python.

Java

Etapa

Obrigatória

Descrição

Ferramenta

1

Não

Adicione a dependência do SDK Maven ao arquivo POM. Pesquise odps-sdk-udf nos repositórios Maven para obter a versão mais recente. Trecho de exemplo: <dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-udf</artifactId><version>0.29.10-public</version></dependency>

IntelliJ IDEA (Maven)

2

Sim

Escreva o código da UDTF.

IntelliJ IDEA (Maven) ou MaxCompute Studio

3

Sim

Depure a UDTF na máquina local ou por meio de testes unitários.

4

Sim

Empacote a UDTF em um arquivo JAR.

5

Sim

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

Cliente MaxCompute, MaxCompute Studio ou DataWorks

6

Sim

Registre a UDTF usando o arquivo JAR enviado.

7

Não

Chame a UDTF em uma consulta SQL.

Para a etapa 2, consulte Desenvolver uma UDF em Java. Para a etapa 5, veja Adicionar resources e Crie uma função. Para empacotar e registrar em um único fluxo com o MaxCompute Studio, consulte Empacotar um programa Java, fazer upload do pacote e crie uma UDF do MaxCompute.

Write a UDF in Java

Python

Etapa

Obrigatória

Descrição

Ferramenta

1

Sim

Escreva o código da UDTF.

MaxCompute Studio

2

Sim

Depure a UDTF na máquina local ou por meio de testes unitários.

3

Sim

Envie arquivos Python ou resources necessários (resources de arquivo, resources de tabela, pacotes de terceiros) para o projeto MaxCompute.

Cliente MaxCompute, MaxCompute Studio ou DataWorks

4

Sim

Registre a UDTF com base nos arquivos enviados.

5

Não

Chame a UDTF em uma consulta SQL.

Para a etapa 1, consulte Desenvolver uma UDF Python. Para a etapa 3, veja Adicionar resources e Crie uma função. Para enviar e registrar em um único fluxo com o MaxCompute Studio, consulte Enviar um programa Python e crie uma UDF do MaxCompute.

Write a UDF in Python

Chamar uma UDTF

No mesmo projeto: Invoque uma UDTF da mesma forma que uma função integrada.

Entre projetos: Para chamar uma UDTF do projeto B dentro do projeto A, use a sintaxe a seguir:

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

Para mais informações sobre compartilhamento de resources entre projetos, consulte Compartilhamento de resources entre projetos baseado em pacotes.

Próximos passos