Tous les produits
Search
Centre de documentation

MaxCompute:UDAF overview

Dernière mise à jour :Aug 10, 2026

Une fonction d'agrégation définie par l'utilisateur (UDAF) transforme plusieurs enregistrements d'entrée en une seule valeur de sortie. Utilisez les UDAF lorsqu'aucune fonction d'agrégation intégrée ne répond à votre logique d'agrégation. MaxCompute prend en charge les UDAF écrites en Java ou en Python.

Quand utiliser une UDAF

Les fonctions intégrées sont optimisées pour le traitement distribué et offrent de meilleures performances que les UDAF. Privilégiez une fonction intégrée si elle répond à votre besoin.

Développez une UDAF lorsque votre logique d'agrégation est impossible à exprimer avec des fonctions intégrées, par exemple pour des modèles statistiques personnalisés, des scores métier spécifiques ou des agrégations pondérées sur plusieurs champs.

Types d'UDAF

Type Langage Runtime
UDAF Java Java JVM
UDAF Python 2 Python Python 2.7
UDAF Python 3 Python CPython 3.7.3

Pour les détails d'implémentation, consultez les rubriques UDAF Java, UDAF Python 2 et UDAF Python 3.

Processus de développement

UDAF Java

La figure suivante illustre le flux de travail de développement d'une UDAF Java.

Write a UDF in Java

Étape Requis Description Plateforme Références
1 Non Ajoutez la dépendance SDK odps-sdk-udf à votre fichier POM. Exemple : <dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-udf</artifactId><version>0.29.10-public</version></dependency>. Recherchez la dernière version dans les dépôts Maven. IntelliJ IDEA (Maven)
2 Oui Développez l'UDAF. IntelliJ IDEA (Maven) et MaxCompute Studio Développement d'une UDF en Java
3 Oui Déboguez l'UDAF en local ou via des tests unitaires.
4 Oui Empaquetez le code dans un fichier JAR.
5 Oui Téléchargez le fichier JAR en tant que ressource dans votre projet MaxCompute. Client MaxCompute (odpscmd), MaxCompute Studio, DataWorks Client MaxCompute : Ajout de ressources, Création d'une UDF ; MaxCompute Studio : Empaquetage d'un programme Java, téléchargement du package et création d'une UDF MaxCompute ; DataWorks : Création et utilisation de ressources MaxCompute, Création et utilisation d'une fonction MaxCompute
6 Oui Créez une UDF à partir du fichier JAR téléchargé.
7 Non Appelez l'UDAF dans une requête.

UDAF Python

La figure suivante illustre le flux de travail de développement d'une UDAF Python.

Write a UDF in Python

Étape Requis Description Plateforme Références
1 Oui Développez l'UDAF. MaxCompute Studio Développement d'une UDF Python
2 Oui Déboguez l'UDAF en local ou via des tests unitaires.
3 Oui Téléchargez les fichiers Python et les ressources requises (fichiers, tables, packages tiers) dans votre projet MaxCompute. Client MaxCompute (odpscmd), MaxCompute Studio, DataWorks Client MaxCompute : Ajout de ressources, Création d'une UDF ; MaxCompute Studio : Téléchargement d'un programme Python et création d'une UDF MaxCompute ; DataWorks : Utilisation de ressources pour enregistrer des fonctions
4 Oui Créez une UDF à partir des fichiers Python ou des ressources téléchargés.
5 Non Appelez l'UDAF dans une requête.

Limites

Les UDAF n'ont pas accès à Internet. Pour activer cet accès, soumettez une demande de connexion réseau. Après approbation, l'équipe d'assistance technique MaxCompute configurera la connexion pour vous. Pour plus de détails, consultez la rubrique Processus de connexion réseau.

Notes d'utilisation

  • Performance : Les fonctions intégrées offrent de meilleures performances que les UDAF. Privilégiez une fonction intégrée si elle répond à votre besoin.

  • Mémoire : Si une instruction SQL utilisant une UDAF dépasse l'allocation de mémoire par défaut en raison de volumes de données importants ou d'une distorsion des données, exécutez la commande suivante au niveau de la session pour augmenter la limite :

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

    Pour plus d'informations, consultez la rubrique FAQ sur les UDF MaxCompute.

  • Conflit de noms : Si une UDAF porte le même nom qu'une fonction intégrée, MaxCompute appelle l'UDAF. Pour appeler la fonction intégrée à la place, préfixez-la avec ::, par exemple : select ::concat('ab', 'c');

Appel d'une UDAF

Au sein du même projet : Appelez l'UDAF comme vous le feriez pour une fonction intégrée.

Entre projets : Utilisez le nom du projet comme préfixe. L'exemple suivant appelle udf_in_other_project du projet B depuis le projet A :

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

Pour configurer le partage de ressources entre projets, consultez la rubrique Accès aux ressources entre projets basé sur les packages.