Use uma função definida pelo usuário (UDF) em Python para ler dados de um recurso de tabela do MaxCompute durante a execução da consulta. Este tópico apresenta o fluxo de trabalho completo: escrever a UDF, carregar os recursos, registrar a função e chamá-la em SQL.
Pré-requisitos
Antes de começar, verifique se você tem:
O cliente do MaxCompute instalado e configurado. Para obter instruções de configuração, consulte Instalar e configurar o cliente do MaxCompute.
A tabela de destino registrada como recurso no seu projeto do MaxCompute. Para obter instruções, consulte Adicionar recursos.
Neste tópico, o exemplo usa a tabela udf_test como recurso de tabela registrado. A tabela contém os seguintes dados:
+------+------+
| col1 | col2 |
+------+------+
| 1 | a |
| 2 | b |
| 4 | c |
| 5 | d |
+------+------+
Como funciona
A função get_cache_table() carrega os dados da tabela na memória uma única vez durante a inicialização da classe UDF. Cada chamada subsequente a evaluate() lê esse snapshot em memória, sem reler a tabela para cada linha processada. Por isso, a chamada de carregamento deve ficar em __init__, e não em evaluate().
Etapa 1: Escrever a UDF
A UDF em Python abaixo lê todas as linhas de udf_test para a memória na inicialização e retorna uma linha por chamada de evaluate().
from odps.udf import annotate
from odps.distcache import get_cache_table
@annotate('->string')
class DistCacheTableExample(object):
def __init__(self):
self.records = list(get_cache_table('udf_test'))
self.counter = 0
self.ln = len(self.records)
def evaluate(self):
if self.counter > self.ln - 1:
return None
ret = self.records[self.counter]
self.counter += 1
return str(ret)
Salve este arquivo como table.py no diretório bin do cliente do MaxCompute.
Etapa 2: Carregar recursos e registrar a UDF
Carregar o script Python
Execute o comando a seguir para adicionar table.py como recurso:
add py table.py;
Saída esperada:
OK: Resource 'table.py' have been created.
Para consultar a lista completa de comandos de recursos, veja Adicionar recursos.
Registrar a UDF
Execute o comando abaixo para criar a UDF:
create function table_udf as 'table.DistCacheTableExample' using 'table.py,udf_test';
|
Parâmetro |
Descrição |
|
|
Nome da UDF. Use este nome ao chamar a função em instruções SQL. |
|
|
|
Saída esperada:
Success: Function 'table_udf' have been created.
Para mais informações sobre o registro de UDFs, consulte Criar uma UDF.
Etapa 3: Chamar a UDF
Crie uma tabela de teste, insira dados e chame a UDF:
-- Create a test table
CREATE TABLE table_test (arg bigint);
-- Insert test data
INSERT INTO table_test VALUES (1), (4), (15), (123), (7995);
-- Call the UDF
SELECT table_udf() FROM table_test;
A UDF é chamada uma vez para cada linha em table_test. Como table_test tem 5 linhas, mas udf_test tem apenas 4, a quinta chamada retorna NULL.
Saída esperada:
+----------+
| _c0 |
+----------+
| (4, 'c') |
| (5, 'd') |
| (1, 'a') |
| (2, 'b') |
| NULL |
+----------+
Próximos passos
Para ler recursos de tabela do MaxCompute usando uma função com valor de tabela definida pelo usuário (UDTF) em Java, consulte Usar uma UDTF Java para ler recursos do MaxCompute.