Crie funções definidas pelo usuário (UDFs) e utilize-as no MaxCompute SQL.
Modelo de objetos
O PyODPS representa UDFs com dois tipos de objetos:
Objeto de entrada do MaxCompute (
o): expõe métodos no nível do projeto —create_function(),delete_function(),get_function(),list_functions()eexist_function().Objeto de função: expõe métodos no nível da instância —
update()edrop()— e armazena propriedades comoclass_typeeresources.
Entender qual objeto possui cada método ajuda a escrever código PyODPS correto: sempre chame operações de nível de projeto em o e execute operações de nível de instância em um objeto de função obtido previamente.
Criar uma UDF
Chame create_function() no objeto de entrada do MaxCompute. Forneça o nome da função, a classe de implementação (class_type) e uma lista de recursos.
Os exemplos a seguir criam uma UDF que referencia um recurso no projeto atual e em outro projeto:
# 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])
Listar UDFs
Para obter todas as UDFs de um projeto específico, chame list_functions() no objeto de entrada do MaxCompute.
for func in o.list_functions():
print(func.name)
Verificar se uma UDF existe
Chame exist_function() no objeto de entrada do MaxCompute.
o.exist_function('test_function')
Obter uma UDF
Para recuperar um objeto de função, chame get_function() no objeto de entrada do MaxCompute.
function = o.get_function('test_function')
Atualizar uma UDF
Obtenha primeiro o objeto de função, modifique suas propriedades class_type e resources e chame 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.
Excluir uma UDF
Dois métodos estão disponíveis:
delete_function()no objeto de entrada: use quando você tiver apenas o nome da função.drop()no objeto de função: use quando você já tiver uma referência ao objeto de função.
# Delete by name.
o.delete_function('test_function')
# Delete using the function object.
function.drop() # Call the drop() method if the function exists.