MaxCompute propose diverses fonctions intégrées pour répondre à vos besoins métier. Si ces fonctions ne suffisent pas, créez des fonctions définies par l'utilisateur (UDF) en suivant le processus de développement et les exemples décrits dans cette rubrique.
Informations générales
Au sens large, les fonctions définies par l'utilisateur se divisent en trois catégories : fonction scalaire définie par l'utilisateur (UDF), fonction table définie par l'utilisateur (UDTF) et fonction d'agrégation définie par l'utilisateur (UDAF). Au sens strict, le terme UDF désigne uniquement les fonctions scalaires définies par l'utilisateur. Le tableau ci-dessous présente les types de UDF pris en charge par MaxCompute.
|
Type de UDF |
Nom |
Scénario |
|
fonction scalaire définie par l'utilisateur |
Ce type de UDF convient aux scénarios où les données d'entrée et de sortie entretiennent une relation de correspondance un-à-un. Chaque ligne de données lue par la UDF génère une valeur de sortie unique. |
|
|
fonction table définie par l'utilisateur, également appelée UDF table |
Utilisez ce type de UDF lorsque les données d'entrée et de sortie suivent une relation un-à-plusieurs. La lecture d'une seule ligne de données par une UDTF produit plusieurs valeurs, formant ainsi une table. |
|
|
fonction d'agrégation définie par l'utilisateur |
Une UDAF établit une correspondance plusieurs-à-un entre les données d'entrée et de sortie. Elle agrège plusieurs enregistrements d'entrée pour produire une seule valeur de sortie. |
Outre les UDF mentionnées précédemment, MaxCompute met à disposition les types suivants pour des cas d'usage spécifiques.
|
Type de UDF |
Scénario |
|
Pour simplifier le développement des UDF MaxCompute et visualiser la logique métier, intégrez directement du code Java ou Python dans vos scripts SQL. |
|
|
Si votre code contient des duplicatas, privilégiez les UDF SQL afin d'améliorer la réutilisabilité du code et de simplifier le processus de développement. |
|
|
Analysez vos données spatiales dans MaxCompute à l'aide des fonctions géospatiales Hive. |
Limites
-
Accès à Internet via les UDF
Par défaut, MaxCompute interdit l'accès à Internet depuis les UDF. Pour autoriser cet accès, remplissez le formulaire de demande de connexion réseau selon vos besoins métier et soumettez la demande. L'équipe support technique de MaxCompute vous contactera rapidement pour activer la connectivité réseau. Pour plus de détails sur le remplissage du formulaire, consultez la rubrique Processus de connexion réseau.
-
Accès à un VPC via les UDF
Par défaut, MaxCompute n'autorise pas l'accès aux ressources situées dans des VPC depuis les UDF. Pour utiliser des UDF afin d'accéder aux ressources d'un VPC, établissez une connexion réseau entre MaxCompute et le VPC concerné. Pour plus d'informations sur les opérations associées, consultez la rubrique Accéder aux ressources VPC depuis une UDF.
-
Lecture des données de table via les UDF, UDAF ou UDTF
Il est impossible d'utiliser des UDF, UDAF ou UDTF pour lire les données des types de tables suivants :
Tables soumises à une évolution de schéma
Tables contenant des types de données complexes
Tables contenant des types de données JSON
Tables transactionnelles
Précautions
Avant d'utiliser des UDF, tenez compte des points suivants :
Les performances des UDF restent inférieures à celles des fonctions intégrées. Privilégiez toujours les fonctions intégrées pour implémenter votre logique métier.
Lorsque vous utilisez une UDF dans des instructions SQL, la consommation mémoire d'une tâche de calcul peut dépasser la taille allouée par défaut si le volume de données traité est important et qu'un skew de données survient. Dans ce cas, exécutez la commande
set odps.sql.udf.joiner.jvm.memory=xxxx;au niveau de la session pour résoudre le problème. Pour plus d'informations sur les UDF, consultez la rubrique FAQ sur les UDF MaxCompute.Si une UDF porte le même nom qu'une fonction intégrée, le système appelle prioritairement la UDF. Par exemple, si une UDF CONCAT et la fonction intégrée CONCAT coexistent dans MaxCompute, le système invoque automatiquement la UDF CONCAT plutôt que la fonction intégrée. Pour appeler explicitement la fonction intégrée, faites précéder son nom du symbole
::. Exemple :select ::concat('ab', 'c');.
Développement de UDF : outils pris en charge et processus général
Cette section détaille la marche à suivre pour développer une UDF, une UDTF ou une UDAF.
Le processus de développement des Code-embedded UDFs, des UDFs (SQL user-defined functions) et des Geospatial UDFs diffère. Consultez la documentation associée pour plus de détails.
Développer des UDF avec Java
Le schéma ci-dessous illustre le processus de développement d'une UDF MaxCompute en Java.

Étape | Description | Plateforme | Précautions ou références | |
1 | Facultatif | Avant d'écrire du code avec Maven, ajoutez les dépendances SDK appropriées au fichier POM afin de garantir la compilation du code. L'exemple suivant illustre une dépendance SDK : Recherchez |
| Aucune. |
2 | Obligatoire | Rédigez le code de la UDF en fonction de vos besoins métier. |
| Lors du développement de UDF en Java, respectez impérativement les spécifications de développement des UDF Java. Pour plus d'informations, consultez la rubrique Spécifications de développement et processus général des UDF (Java). |
3 | Obligatoire | Déboguez la UDF en l'exécutant sur votre machine locale ou via des tests unitaires afin de vérifier que le résultat correspond aux attentes. | ||
4 | Obligatoire | Déboguez le code de la UDF pour vous assurer qu'il sera correctement empaqueté dans un fichier JAR après une exécution réussie sur votre machine locale. | ||
5 | Obligatoire | Téléchargez le fichier JAR en tant que ressource dans votre projet MaxCompute. | Vous disposez de trois méthodes pour télécharger des ressources et enregistrer des fonctions :
| |
6 | Obligatoire | Créez une UDF à partir du fichier JAR téléchargé. | ||
7 | Facultatif | Appelez la UDF dans le code de requête de données. | Aucune. | |
Développer des UDF avec Python
Le schéma ci-dessous illustre le processus de développement d'une UDF MaxCompute en Python.
Étape | Description | Plateforme | Précautions ou références | |
1 | Obligatoire | Rédigez une UDF en fonction de vos besoins métier. | Lors du développement de UDF en Python, respectez impérativement les spécifications de développement des UDF Python. Pour plus d'informations, consultez les rubriques Spécifications de développement et processus général des UDF (Python 3) ou Spécifications de développement et processus général des UDF (Python 2). | |
2 | Obligatoire | Déboguez la UDF en l'exécutant sur votre machine locale ou via des tests unitaires afin de vérifier que le résultat correspond aux attentes. | ||
3 | Obligatoire | Téléchargez les fichiers Python ou les ressources requises, telles que les ressources de fichier, les ressources de table et les packages tiers, dans un projet MaxCompute. | Vous disposez de trois méthodes pour télécharger des ressources et enregistrer des fonctions :
| |
4 | Obligatoire | Créez une UDF à partir des fichiers Python ou des ressources téléchargés. | ||
5 | Facultatif | Appelez la UDF dans le code de requête de données. | Aucune. | |
Référence de développement : SDK MaxCompute
Le tableau ci-dessous décrit les SDK fournis par MaxCompute. Pour plus d'informations sur les packages inclus dans chaque SDK et les classes contenues dans ces packages, consultez la documentation MaxCompute SDK.
|
Nom du SDK |
Description |
|
odps-sdk-core |
Fournit les classes permettant de gérer les ressources de base de MaxCompute. |
|
odps-sdk-commons |
Propose des utilitaires communs pour Java. |
|
odps-sdk-udf |
Fournit l'interface principale pour la fonctionnalité UDF. |
|
odps-sdk-mapred |
Propose l'API MapReduce. |
|
odps-sdk-graph |
Propose l'API Graph. |
Appeler une UDF
Une fois la UDF développée et enregistrée dans MaxCompute, utilisez-la lors des étapes suivantes du développement de jobs. Voici les méthodes disponibles pour appeler une UDF :
Utiliser une UDF dans un projet MaxCompute : la méthode est similaire à celle des fonctions intégrées. Vous utilisez une fonction définie par l'utilisateur de la même manière qu'une fonction intégrée.
Utiliser une UDF entre projets : appelez une UDF du projet B depuis le projet A. L'instruction suivante illustre cet exemple :
select B:udf_in_other_project(arg0, arg1) as res from table_t;. Pour plus d'informations sur le partage interprojets, consultez la rubrique Accès aux ressources interprojets basé sur les packages.