Todos los productos
Search
Centro de documentos

MaxCompute:Descripción general de UDTF

Última actualización: Sep 03, 2026

Las funciones con valor de tabla definidas por el usuario (UDTF) permiten extender las capacidades integradas de MaxCompute mediante la escritura de funciones personalizadas en Java o Python. Una UDTF lee una fila de entrada y devuelve varias filas; la salida se trata como una tabla.

MaxCompute incluye algunas UDTF integradas, como EXPLODE. Para obtener más información, consulte Other functions y Complex type functions.

Cuándo usar UDTF

Utilice una UDTF cuando las funciones integradas no puedan expresar su lógica; por ejemplo, cuando necesite emitir un número variable de filas de salida por cada fila de entrada, o cuando su transformación dependa del estado acumulado a través de las filas en una partición.

Las funciones integradas están optimizadas para el motor distribuido de MaxCompute y superan en rendimiento a las UDTF a gran escala. Utilice las funciones integradas siempre que cubran su caso de uso.

Lenguajes compatibles

Lenguaje

Versión

Java

—

Python 2

2.7

Python 3

CPython 3.7.3

Para detalles de implementación, consulte Java UDTFs, Python 2 UDTF y Python 3 UDTFs.

Limitaciones

  • Acceso a Internet: De forma predeterminada, las UDF no pueden acceder a Internet. Para habilitar el acceso a Internet, complete el formulario de solicitud de conexión de red. Tras la aprobación, el equipo de soporte técnico de MaxCompute se pondrá en contacto con usted para establecer la conexión. Para más detalles, consulte Network connection process.

  • No se admiten otras columnas en la misma sentencia SELECT: Una sentencia SELECT que invoque una UDTF no puede hacer referencia a otras columnas ni expresiones. La siguiente sentencia no es válida:

    -- Invalid: mixes a UDTF with another column
    select value, user_udtf(key) as mycol ...
  • No se permite anidamiento: Las UDTF no pueden anidarse dentro de otras UDTF. La siguiente sentencia no es válida:

    -- Invalid: user_udtf2 is nested inside user_udtf1
    select user_udtf1(user_udtf2(key)) as mycol...;
  • Incompatibilidad con GROUP BY, DISTRIBUTE BY y SORT BY: Una UDTF no puede aparecer en la misma sentencia SELECT junto con estas cláusulas. La siguiente sentencia no es válida:

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

Notas de uso

Memoria: Si un trabajo de UDF procesa grandes volúmenes de datos con sesgo de datos, el trabajo podría exceder la asignación de memoria JVM predeterminada. Ejecute el siguiente comando a nivel de sesión para aumentar la memoria:

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

Para consultar la lista completa de temas frecuentes sobre UDF, véase Preguntas frecuentes sobre UDF de MaxCompute.

Conflictos de nombres: Si una UDF comparte nombre con una función integrada, MaxCompute ejecutará la UDF. Para invocar explícitamente la función integrada, añada el prefijo :::

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

Proceso de desarrollo

Los pasos difieren ligeramente entre Java y Python.

Java

Paso

Obligatorio

Descripción

Herramienta

1

No

Agregue la dependencia SDK de Maven a su archivo POM. Busque odps-sdk-udf en los repositorios de Maven para obtener la versión más reciente. Fragmento de ejemplo: <dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-udf</artifactId><version>0.29.10-public</version></dependency>

IntelliJ IDEA (Maven)

2

Sí

Escriba el código de la UDTF.

IntelliJ IDEA (Maven) o MaxCompute Studio

3

Sí

Depure la UDTF en su máquina local o mediante pruebas unitarias.

—

4

Sí

Empaquete la UDTF en un archivo JAR.

—

5

Sí

Cargue el archivo JAR como recurso en su proyecto de MaxCompute.

Cliente de MaxCompute, MaxCompute Studio o DataWorks

6

Sí

Registre la UDTF utilizando el archivo JAR cargado.

—

7

No

Invoque la UDTF en una consulta SQL.

—

Para el paso 2, consulte Desarrollar una UDF en Java. Para el paso 5, consulte Agregar recursos y Create a function. Para empaquetar y registrar en un solo flujo mediante MaxCompute Studio, consulte Empaquetar un programa Java, cargar el paquete y crear una UDF de MaxCompute.

Write a UDF in Java

Python

Paso

Obligatorio

Descripción

Herramienta

1

Sí

Escriba el código de la UDTF.

MaxCompute Studio

2

Sí

Depure la UDTF en su máquina local o mediante pruebas unitarias.

—

3

Sí

Cargue archivos Python o los recursos necesarios (recursos de archivo, recursos de tabla, paquetes de terceros) en su proyecto de MaxCompute.

Cliente de MaxCompute, MaxCompute Studio o DataWorks

4

Sí

Registre la UDTF basándose en los archivos cargados.

—

5

No

Invoque la UDTF en una consulta SQL.

—

Para el paso 1, consulte Desarrollar una UDF en Python. Para el paso 3, consulte Agregar recursos y Create a function. Para cargar y registrar en un solo flujo mediante MaxCompute Studio, consulte Cargar un programa Python y crear una UDF de MaxCompute.

Write a UDF in Python

Invocar una UDTF

Dentro del mismo proyecto: Invoque una UDTF de la misma manera que invoca una función integrada.

Entre proyectos: Para invocar una UDTF del proyecto B dentro del proyecto A, utilice la siguiente sintaxis:

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

Para obtener más información sobre el uso compartido de recursos entre proyectos, consulte Uso compartido de recursos basado en paquetes entre proyectos.

Pasos siguientes