Créez des fonctions définies par l'utilisateur (UDF) et utilisez-les dans MaxCompute SQL.
Modèle d'objet
PyODPS représente les UDF à l'aide de deux types d'objets :
Objet d'entrée MaxCompute (
o) : expose les méthodes au niveau du projet, notammentcreate_function(),delete_function(),get_function(),list_functions()etexist_function().Objet Function : expose les méthodes au niveau de l'instance, à savoir
update()etdrop(), et contient des propriétés telles queclass_typeetresources.
Savoir quel objet possède quelle méthode vous permet d'écrire un code PyODPS correct : effectuez toujours les opérations au niveau du projet sur o et les opérations au niveau de l'instance sur un objet function préalablement récupéré.
Créer une UDF
Appelez create_function() sur l'objet d'entrée MaxCompute. Indiquez le nom de la fonction, la classe d'implémentation (class_type) et une liste de ressources.
Les exemples suivants créent une UDF qui référence une ressource dans le projet actuel et dans un autre projet :
# Reference a resource in the current project.
resource = o.get_resource('my_udf.py')
function = o.create_function('test_function', class_type='my_udf.Test', resources=[resource])
# Reference a resource in another project.
resource2 = o.get_resource('my_udf.py', project='another_project')
function2 = o.create_function('test_function2', class_type='my_udf.Test', resources=[resource2])
Répertorier les UDF
Appelez list_functions() sur l'objet d'entrée MaxCompute pour obtenir toutes les UDF d'un projet spécifique.
for func in o.list_functions():
print(func.name)
Vérifier l'existence d'une UDF
Appelez exist_function() sur l'objet d'entrée MaxCompute.
o.exist_function('test_function')
Obtenir une UDF
Appelez get_function() sur l'objet d'entrée MaxCompute pour récupérer un objet function.
function = o.get_function('test_function')
Mettre à jour une UDF
Récupérez d'abord l'objet function, puis modifiez ses propriétés class_type et resources, et appelez update().
function = o.get_function('test_function')
new_resource = o.get_resource('my_udf2.py')
function.class_type = 'my_udf2.Test'
function.resources = [new_resource, ]
function.update() # Update the function.
Supprimer une UDF
Deux méthodes sont disponibles :
delete_function()sur l'objet d'entrée : utilisez cette méthode si vous ne disposez que du nom de la fonction.drop()sur l'objet function : utilisez cette méthode si vous détenez déjà un objet function.
# Delete by name.
o.delete_function('test_function')
# Delete using the function object.
function.drop() # Call the drop() method if the function exists.