O MaxCompute oferece suporte a dois tipos de funções: integradas e definidas pelo usuário (UDFs). As funções integradas estão disponíveis imediatamente, sem necessidade de configuração. Já as UDFs exigem registro antes da chamada em instruções SQL.
Este tópico aborda operações comuns de gerenciamento de UDFs: criação, exclusão e visualização.
Visão geral das operações
|
Operação |
Permissão necessária |
Plataformas |
|
Permissão de escrita em funções |
Cliente MaxCompute, console DataWorks, MaxCompute Studio |
|
|
Permissão de exclusão em funções |
— |
|
|
Permissão de leitura em funções |
— |
|
|
Permissão de listagem em objetos do projeto |
— |
|
|
Permissão de listagem em objetos do projeto |
— |
Pré-requisitos
Antes de começar, verifique se você possui:
Um recurso JAR ou Python contendo o código da UDF, carregado no MaxCompute
As permissões necessárias para a operação (consulte a tabela acima)
Crie uma UDF
Registra uma UDF em um projeto do MaxCompute para permitir chamadas em instruções SQL.
Limitações
Os nomes das funções devem ser exclusivos no projeto. Não é permitido criar uma função com o mesmo nome de outra já existente.
UDFs não podem sobrescrever funções integradas. Somente o proprietário do projeto pode registrar uma UDF com o mesmo nome de uma função integrada. Se essa UDF for invocada, um aviso aparecerá no Logview Summary após a execução do job SQL.
Sintaxe
create function <function_name> as '<package_to_class>' using '<resource_list>';
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da UDF a ser criada. Deve ser exclusivo no projeto. |
|
|
Sim |
Caminho totalmente qualificado da classe da UDF. Diferencia maiúsculas de minúsculas. Deve estar entre aspas simples ( |
|
|
Sim |
Lista de nomes de recursos separados por vírgula, entre aspas simples ( |
Nomes de recursos Python não diferenciam maiúsculas de minúsculas na camada subjacente. O nome do recurso subjacente é determinado pelo nome usado durante o primeiro upload. Por exemplo, se você carregar inicialmente pyudf_test.py e depois renomeá-lo para PYUDF_TEST.py, o nome do recurso subjacente permanecerá pyudf_test.py. Ao registrar a UDF, o nome da classe deve corresponder ao nome subjacente: pyudf_test.SampleUDF. Execute list resources; para verificar os nomes subjacentes de todos os recursos.
Exemplos
Exemplo 1: UDF Java
Crie a função my_lower usando a classe Java org.alidata.odps.udf.examples.Lower em my_lower.jar.
create function my_lower as 'org.alidata.odps.udf.examples.Lower' using 'my_lower.jar';
Exemplo 2: UDF Python de outro projeto
Crie a função my_lower usando a classe Python MyLower no script pyudf_test.py, que é um recurso em test_project.
create function my_lower as 'pyudf_test.MyLower' using 'test_project/resources/pyudf_test.py';
Exemplo 3: Função com valor de tabela definida pelo usuário (UDTF) Java com múltiplos recursos
Crie test_udtf utilizando a classe com.aliyun.odps.examples.udf.UDTFResource em udtfexample1.jar. A função também depende de um recurso de arquivo, um recurso de tabela e um recurso de arquivo compactado.
create function test_udtf as 'com.aliyun.odps.examples.udf.UDTFResource' using 'udtfexample1.jar, file_resource.txt, table_resource1, test_archive.zip';
Exclua uma UDF
Remove uma UDF existente de um projeto do MaxCompute.
Sintaxe
drop function <function_name>;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da UDF a ser excluída. |
Exemplo
-- Delete the my_lower function.
drop function my_lower;
Visualize uma UDF
Retorna os metadados de uma UDF específica: nome, proprietário, hora de criação, classe e lista de recursos.
Sintaxe
desc function <function_name>;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome da UDF a ser inspecionada. |
Campos de saída
|
Campo |
Descrição |
|
|
Nome da UDF. |
|
|
Conta que registrou a UDF. |
|
|
Horário de criação da UDF. |
|
|
Caminho da classe da UDF. Diferencia maiúsculas de minúsculas. |
|
|
Lista de recursos associados à UDF. |
Exemplo
-- View details of the my_lower function.
desc function my_lower;
Saída:
Name my_lower
Owner ALIYUN$****
Created Time 2020-06-18 15:50:19
Class org.alidata.odps.udf.examples.Lower
Resources project_name/my_lower.jar
Listar todas as UDFs
Retorna todas as UDFs registradas em um projeto do MaxCompute.
Sintaxe
Use um dos seguintes comandos:
list functions [-p <project_name>];
show functions;
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Nome do projeto MaxCompute a ser consultado. Se omitido, o sistema usa o projeto atual. Suportado apenas com |
Exemplo
list functions;
Saída:
Name Owner Create Time Class Resources
ipv4_ipv6_aton ALIYUN$****@aliyun.com 2021-11-15 13:42:14 com.aliyun.odps.udf.udfFunction.IpLocation ipv4.txt,ipv6.txt,udf-1.0-SNAPSHOT.jar
Lower_test ALIYUN$****@aliyun.com 2021-08-25 15:51:22 com.aliyun.odps.udf.example.Lower udf-1.0-SNAPSHOT.jar
my_add ALIYUN$****@aliyun.com 2021-05-08 11:26:02
my_index ALIYUN$****@aliyun.com 2021-08-25 12:01:05 com.aliyun.odps.examples.udf.UdfArray udf-1.0-SNAPSHOT.jar
my_sum ALIYUN$****@aliyun.com 2021-05-08 10:24:58
my_udtf ALIYUN$****@aliyun.com 2021-02-23 11:37:30 com.aliyun.odps.examples.udf.UDTFResource udf-1.0-SNAPSHOT.jar
numpy ALIYUN$****@aliyun.com 2020-11-11 14:12:50 numpy.TryImport numpy.py,numpy-1.19.4-cp37-cp37m-manylinux1_x86_64.zip
ST_Aggr_ConvexHull ALIYUN$****@aliyun.com 2021-03-18 17:06:29 com.esri.hadoop.hive.ST_Aggr_ConvexHull esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Aggr_Intersection ALIYUN$****@aliyun.com 2021-03-18 17:06:29 com.esri.hadoop.hive.ST_Aggr_Intersection esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Aggr_Union ALIYUN$****@aliyun.com 2021-03-18 17:06:30 com.esri.hadoop.hive.ST_Aggr_Union esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Area ALIYUN$****@aliyun.com 2021-03-18 17:06:30 com.esri.hadoop.hive.ST_Area esri-geometry-api.jar,spatial-sdk-hive.jar
ST_AsBinary ALIYUN$****@aliyun.com 2021-03-18 17:06:30 com.esri.hadoop.hive.ST_AsBinary esri-geometry-api.jar,spatial-sdk-hive.jar
ST_AsGeoJson ALIYUN$****@aliyun.com 2021-03-18 17:06:49 com.esri.hadoop.hive.ST_AsGeoJson esri-geometry-api.jar,spatial-sdk-hive.jar
ST_AsJson ALIYUN$****@aliyun.com 2021-03-18 17:06:50 com.esri.hadoop.hive.ST_AsJson esri-geometry-api.jar,spatial-sdk-hive.jar
ST_AsShape ALIYUN$****@aliyun.com 2021-03-18 17:06:50 com.esri.hadoop.hive.ST_AsShape esri-geometry-api.jar,spatial-sdk-hive.jar
ST_AsText ALIYUN$****@aliyun.com 2021-03-18 17:06:50 com.esri.hadoop.hive.ST_AsText esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Bin ALIYUN$****@aliyun.com 2021-03-18 17:06:50 com.esri.hadoop.hive.ST_Bin esri-geometry-api.jar,spatial-sdk-hive.jar
ST_BinEnvelope ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_BinEnvelope esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Boundary ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_Boundary esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Buffer ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_Buffer esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Centroid ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_Centroid esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Contains ALIYUN$****@aliyun.com 2021-03-18 17:07:01 com.esri.hadoop.hive.ST_Contains esri-geometry-api.jar,spatial-sdk-hive.jar
ST_ConvexHull ALIYUN$****@aliyun.com 2021-03-18 17:07:13 com.esri.hadoop.hive.ST_ConvexHull esri-geometry-api.jar,spatial-sdk-hive.jar
ST_CoordDim ALIYUN$****@aliyun.com 2021-03-18 17:07:14 com.esri.hadoop.hive.ST_CoordDim esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Crosses ALIYUN$****@aliyun.com 2021-03-18 17:07:14 com.esri.hadoop.hive.ST_Crosses esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Difference ALIYUN$****@aliyun.com 2021-03-18 17:07:14 com.esri.hadoop.hive.ST_Difference esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Dimension ALIYUN$****@aliyun.com 2021-03-18 17:07:14 com.esri.hadoop.hive.ST_Dimension esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Disjoint ALIYUN$****@aliyun.com 2021-03-18 17:07:31 com.esri.hadoop.hive.ST_Disjoint esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Distance ALIYUN$****@aliyun.com 2021-03-18 17:07:31 com.esri.hadoop.hive.ST_Distance esri-geometry-api.jar,spatial-sdk-hive.jar
ST_EndPoint ALIYUN$****@aliyun.com 2021-03-18 17:07:31 com.esri.hadoop.hive.ST_EndPoint esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Envelope ALIYUN$****@aliyun.com 2021-03-18 17:07:32 com.esri.hadoop.hive.ST_Envelope esri-geometry-api.jar,spatial-sdk-hive.jar
ST_EnvIntersects ALIYUN$****@aliyun.com 2021-03-18 17:07:32 com.esri.hadoop.hive.ST_EnvIntersects esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Equals ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_Equals esri-geometry-api.jar,spatial-sdk-hive.jar
ST_ExteriorRing ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_ExteriorRing esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeodesicLengthWGS84 ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_GeodesicLengthWGS84 esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeomCollection ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_GeomCollection esri-geometry-api.jar,spatial-sdk-hive.jar
ST_Geometry ALIYUN$****@aliyun.com 2021-03-18 17:07:44 com.esri.hadoop.hive.ST_Geometry esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeometryN ALIYUN$****@aliyun.com 2021-03-18 17:07:55 com.esri.hadoop.hive.ST_GeometryN esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeometryType ALIYUN$****@aliyun.com 2021-03-18 17:07:55 com.esri.hadoop.hive.ST_GeometryType esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeomFromGeoJson ALIYUN$****@aliyun.com 2021-03-18 17:07:55 com.esri.hadoop.hive.ST_GeomFromGeoJson esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeomFromJson ALIYUN$****@aliyun.com 2021-03-18 17:07:55 com.esri.hadoop.hive.ST_GeomFromJson esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeomFromShape ALIYUN$****@aliyun.com 2021-03-18 17:07:56 com.esri.hadoop.hive.ST_GeomFromShape esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeomFromText ALIYUN$****@aliyun.com 2021-03-18 17:08:10 com.esri.hadoop.hive.ST_GeomFromText esri-geometry-api.jar,spatial-sdk-hive.jar
ST_GeomFromWKB ALIYUN$****@aliyun.com 2021-03-18 17:08:10 com.esri.hadoop.hive.ST_GeomFromWKB esri-geometry-api.jar,spatial-sdk-hive.jar
As colunas de saída são:
|
Coluna |
Descrição |
|
|
Nome da UDF. |
|
|
Conta que registrou a UDF. |
|
|
Horário de criação da UDF. |
|
|
Caminho da classe da UDF. Vazio se a informação da classe não estiver disponível. |
|
|
Recursos associados à UDF. Vazio se nenhum recurso estiver registrado. |
Listar todas as funções integradas
Retorna informações sobre as funções integradas disponíveis no MaxCompute, incluindo assinaturas de função e tipos de dados suportados.
Este comando requer o cliente MaxCompute V0.43.0 ou posterior.
Sintaxe
show builtin functions [<function_name>];
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Nome de uma função integrada específica a ser pesquisada. Se omitido, o sistema retorna todas as funções integradas. |
Exemplo
show builtin functions;
Saída (parcial):
ID = 20230307081023424gef2hwowr1
::ABS SCALAR DECIMAL(?,?) ABS(DECIMAL(?,?) arg0),DOUBLE ABS(DOUBLE arg0),BIGINT ABS(BIGINT arg0),INT ABS(INT arg0)
::ACOS SCALAR DOUBLE ACOS(DOUBLE arg0),DOUBLE ACOS(DECIMAL(?,?) arg0)
::ADD_MONTHS SCALAR STRING ADD_MONTHS(DATE arg0, BIGINT arg1),STRING ADD_MONTHS(TIMESTAMP arg0, BIGINT arg1),STRING ADD_MONTHS(STRING arg0, BIGINT arg1)
::ALL_MATCH SCALAR BOOLEAN ALL_MATCH(ARRAY<T> arg0, java.util.function.Function<T, java.lang.Boolean> arg1)
::ANY_MATCH SCALAR BOOLEAN ANY_MATCH(ARRAY<T> arg0, java.util.function.Function<T, java.lang.Boolean> arg1)
::ANY_VALUE AGGREGATOR T ANY_VALUE([DISTINCT] T arg1)
::APPROX_DISTINCT AGGREGATOR BIGINT APPROX_DISTINCT([DISTINCT] P arg1, DOUBLE arg2),BIGINT APPROX_DISTINCT([DISTINCT] P arg1)
::ARG_MAX AGGREGATOR R ARG_MAX([DISTINCT] T arg1, R arg2)
::ARG_MIN AGGREGATOR R ARG_MIN([DISTINCT] T arg1, R arg2)
::ARRAY SCALAR ARRAY<STRING> ARRAY(),ARRAY<T> ARRAY(T arg0...)
::ARRAYS_OVERLAP SCALAR BOOLEAN ARRAYS_OVERLAP(ARRAY<T> arg0, ARRAY<T> arg1)
::ARRAYS_ZIP SCALAR null
::ARRAY_CONTAINS SCALAR BOOLEAN ARRAY_CONTAINS(ARRAY<T> arg0, T arg1)
::ARRAY_DISTINCT SCALAR ARRAY<T> ARRAY_DISTINCT(ARRAY<T> arg0)
::ARRAY_EXCEPT SCALAR ARRAY<T> ARRAY_EXCEPT(ARRAY<T> arg0, ARRAY<T> arg1)
::ARRAY_INTERSECT SCALAR null
::ARRAY_JOIN SCALAR STRING ARRAY_JOIN(ARRAY<STRING> arg0, STRING arg1, STRING arg2),STRING ARRAY_JOIN(ARRAY<STRING> arg0, STRING arg1)
::ARRAY_MAX SCALAR T ARRAY_MAX(ARRAY<T> arg0)
::ARRAY_MIN SCALAR T ARRAY_MIN(ARRAY<T> arg0)
::ARRAY_NORMALIZE SCALAR ARRAY<FLOAT> ARRAY_NORMALIZE(ARRAY<FLOAT> arg0, FLOAT arg1),ARRAY<DOUBLE> ARRAY_NORMALIZE(ARRAY<DOUBLE> arg0, DOUBLE arg1)
::ARRAY_POSITION SCALAR BIGINT ARRAY_POSITION(ARRAY<T> arg0, T arg1, BIGINT arg2),BIGINT ARRAY_POSITION(ARRAY<T> arg0, T arg1)
::ARRAY_REDUCE SCALAR OUT ARRAY_REDUCE(ARRAY<IN> arg0, BUF arg1, java.util.function.BiFunction<BUF, IN, BUF> arg2, java.util.function.Function<BUF, OUT> arg3)
::ARRAY_REMOVE SCALAR ARRAY<T> ARRAY_REMOVE(ARRAY<T> arg0, T arg1)
::ARRAY_REPEAT SCALAR ARRAY<T> ARRAY_REPEAT(T arg0, BIGINT arg1)
::ARRAY_SORT SCALAR ARRAY<T> ARRAY_SORT(ARRAY<T> arg0, java.util.function.BiFunction<T, T, java.lang.Long> arg1)
::ARRAY_UNION SCALAR ARRAY<T> ARRAY_UNION(ARRAY<T> arg0, ARRAY<T> arg1)
::ASCII SCALAR BIGINT ASCII(STRING arg0)
::ASIN SCALAR DOUBLE ASIN(DOUBLE arg0),DOUBLE ASIN(DECIMAL(?,?) arg0)
::ATAN SCALAR DOUBLE ATAN(DECIMAL(?,?) arg0),DOUBLE ATAN(DOUBLE arg0)
::ATAN2 SCALAR DOUBLE ATAN2(DECIMAL(?,?) arg0, DECIMAL(?,?) arg1),DOUBLE ATAN2(DOUBLE arg0, DOUBLE arg1)
::AVG AGGREGATOR DECIMAL(?,?) AVG([DISTINCT] DECIMAL(?,?) arg1),DOUBLE AVG([DISTINCT] DOUBLE arg1)
::AVG WINDOW DOUBLE AVG([DISTINCT] DOUBLE arg0),DECIMAL(?,?) AVG([DISTINCT] DECIMAL(?,?) arg0)
::BASE64 SCALAR STRING BASE64(BINARY arg0)
::BIN SCALAR STRING BIN(BIGINT arg0)
::BITAND SCALAR BIGINT BITAND(BIGINT arg0, BIGINT arg1)
::BITNOT SCALAR BIGINT BITNOT(BIGINT arg0)
::BITOR SCALAR BIGINT BITOR(BIGINT arg0, BIGINT arg1)
::BITWISE_AND_AGG AGGREGATOR BIGINT BITWISE_AND_AGG([DISTINCT] BIGINT arg1)
::BITWISE_OR_AGG AGGREGATOR BIGINT BITWISE_OR_AGG([DISTINCT] BIGINT arg1)
::BITXOR SCALAR BIGINT BITXOR(BIGINT arg0, BIGINT arg1)
::BROUND SCALAR DOUBLE BROUND(DOUBLE arg0, BIGINT arg1),DOUBLE BROUND(DOUBLE arg0)
......
Cada linha na saída segue o formato: function_name function_type signature(s). O tipo de função é um entre SCALAR, AGGREGATOR ou WINDOW.