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 regroupent trois types : 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 d'UDF pris en charge par MaxCompute.
|
Type d'UDF |
Nom |
Scénario |
|
fonction scalaire définie par l'utilisateur |
Ce type d'UDF s'applique aux scénarios où les données d'entrée et de sortie entretiennent une relation de correspondance un-à-un. Chaque lecture d'une ligne de données par l'UDF renvoie une valeur de sortie. |
|
|
fonction table définie par l'utilisateur, également appelée UDF table |
Ce type d'UDF convient aux scénarios présentant une relation de correspondance un-à-plusieurs entre les données d'entrée et de sortie. Chaque lecture d'une ligne de données par l'UDTF renvoie plusieurs valeurs, qui constituent une table. |
|
|
fonction d'agrégation définie par l'utilisateur |
Les données d'entrée et de sortie d'une UDAF entretiennent une relation plusieurs-à-un. Plusieurs enregistrements d'entrée sont agrégés pour générer une seule valeur de sortie. |
Outre les UDF précédentes, MaxCompute propose les types suivants pour des cas d'usage spécifiques.
|
Type d'UDF |
Scénario |
|
Pour simplifier le développement des UDF MaxCompute et visualiser la logique du code, intégrez du code Java ou Python directement dans vos scripts SQL. |
|
|
Si votre code contient des duplications, utilisez les UDF SQL pour améliorer la réutilisation du code et simplifier le processus de développement. |
|
|
Exploitez les fonctions géospatiales Hive pour analyser des données spatiales dans MaxCompute. |
Limites
-
Accès à Internet via les UDF
Par défaut, MaxCompute n'autorise pas l'accès à Internet depuis les UDF. Pour activer cette fonctionnalité, remplissez le formulaire de demande de connexion réseau selon vos besoins métier et soumettez la demande. L'équipe support technique MaxCompute vous contactera rapidement pour établir la connectivité. 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 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. 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 les 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 les UDF, tenez compte des points suivants :
Les performances des UDF ne rivalisent pas avec celles des fonctions intégrées. Privilégiez l'utilisation des fonctions intégrées pour implémenter votre logique métier.
Lors de l'utilisation d'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 en cas de traitement volumineux et de skew des données. 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 le nom d'une UDF identique à celui d'une fonction intégrée existe, le système appelle prioritairement l'UDF. Par exemple, si l'UDF CONCAT et la fonction intégrée CONCAT coexistent dans MaxCompute, le système appelle automatiquement l'UDF CONCAT plutôt que la fonction intégrée. Pour appeler explicitement la fonction intégrée, ajoutez le symbole
::devant son nom. Exemple :select ::concat('ab', 'c');.
Développement des UDF : outils pris en charge et processus général
Cette section détaille le développement d'une UDF, UDTF ou 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.
Utiliser Java pour développer des UDF
La figure suivante 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 pour garantir la compilation. Voici un exemple de dépendance SDK : Recherchez |
| Aucune. |
2 | Obligatoire | Écrivez le code de l'UDF selon vos besoins métier. |
| Lors du développement d'UDF en Java, respectez 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 l'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 l'UDF pour vous assurer qu'il peut être 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 les ressources et enregistrer les fonctions :
| |
6 | Obligatoire | Créez une UDF à partir du fichier JAR téléchargé. | ||
7 | Facultatif | Appelez l'UDF dans le code de requête de données. | Aucune. | |
Utiliser Python pour développer des UDF
La figure suivante illustre le processus de développement d'une UDF MaxCompute en Python.
Étape | Description | Plateforme | Précautions ou références | |
1 | Obligatoire | Écrivez une UDF selon vos besoins métier. | Lors du développement d'UDF en Python, respectez 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 l'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 les ressources et enregistrer les fonctions :
| |
4 | Obligatoire | Créez une UDF à partir des fichiers Python ou des ressources téléchargés. | ||
5 | Facultatif | Appelez l'UDF dans le code de requête de données. | Aucune. | |
Référence de développement : SDK MaxCompute
Le tableau suivant décrit les SDK fournis par MaxCompute. Pour plus d'informations sur les packages inclus dans chaque SDK et les classes qu'ils contiennent, consultez la documentation MaxCompute SDK.
|
Nom du SDK |
Description |
|
odps-sdk-core |
Fournit les classes de gestion des ressources de base de MaxCompute. |
|
odps-sdk-commons |
Fournit des utilitaires communs pour Java. |
|
odps-sdk-udf |
Fournit l'interface principale pour la fonctionnalité UDF. |
|
odps-sdk-mapred |
Fournit l'API MapReduce. |
|
odps-sdk-graph |
Fournit l'API Graph. |
Appeler une UDF
Une fois l'UDF développée et enregistrée dans MaxCompute, utilisez-la lors du développement ultérieur de tâches. Utilisez les méthodes suivantes 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 : utilisez une UDF du projet B dans le projet A. Exemple d'instruction :
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.