Buscar K
Aparência
Aparência
Um script Python escrito no nó Python (Pandas) roda no computador do Agente ETL. As entradas chegam como DataFrames do pandas, e o DataFrame que o script deixa em result vira a saída do nó. Serve para o que o SQL não resolve bem: chamar uma biblioteca, aplicar um modelo, tratar texto com regras longas.
| Na biblioteca | kind no YAML | Grupo | Entradas |
|---|---|---|---|
| Python (Pandas) | PythonProcessor | Transformações | nenhuma ou mais |
Para gerar variáveis em vez de linhas, o nó é o Configurador Python, descrito em Configuradores.
| Na tela | No YAML (options) | Tipo | Regra |
|---|---|---|---|
| Editar Código Python | Sourcecode | texto | O script |
| sem campo na tela | FileName | texto | Nós antigos guardavam o script num arquivo no armazenamento do Lumo. Só é lido quando Sourcecode está vazio |
O editor tem um assistente de IA que escreve o script a partir de uma descrição, uma lista de trechos salvos e o histórico de versões do código.
| Nome | O que é |
|---|---|
input_0, input_1... | Um DataFrame por entrada, na ordem em que foram ligadas, com os nomes das colunas em maiúsculas |
| variáveis do Dataflow | Uma variável Python por variável do Dataflow, com o mesmo nome: texto vira str, número vira número, booleano vira bool, data vira datetime.datetime, vazio vira None |
pd, datetime, math, json | Já importados |
O {NOME} não é trocado dentro do script: use a variável pelo nome, como StartDate.
result. df também vale, mas result tem preferência quando os dois estão preenchidos.result = result.reset_index().# input_0: pedidos; input_1: clientes
pedidos = input_0[input_0["DATA_EMISSAO"] >= StartDate]
result = (
pedidos.merge(input_1[["CLIENTE_ID", "SEGMENTO"]], on="CLIENTE_ID", how="left")
.groupby(["SEGMENTO"], as_index=False)["VALOR"].sum()
)Cada execução abre um processo Python separado no computador do Agente ETL. Não há limite de tempo. Tudo o que o script escreve com print ou na saída de erro vai para o log da execução, linha a linha. Se o processo terminar com erro, a mensagem de erro do Python vira a mensagem do nó. Para parar a carga de propósito, use raise Exception("Entrada vazia").
O Agente ETL usa o primeiro Python 3 que encontrar, nesta ordem:
| Agente ETL | Ordem de busca | Python e bibliotecas |
|---|---|---|
| Windows | 1. PythonEmbed\python.exe, na pasta do Agente2. python.exe, python ou python3 do PATH do sistema | O embutido é 3.9, com versão fixa por versão do Agente e um conjunto próprio de bibliotecas: teste o import antes de depender de uma. O do sistema só é usado se a pasta PythonEmbed sumiu ou não responde; aí valem a versão e as bibliotecas instaladas nele |
Linux (contêiner horusbi/etl) | 1. /usr/bin/python32. python ou python3 do PATH | O Python da imagem: 3.13 a partir da 0.9.23 (Debian 13), 3.11 até a 0.9.22. Bibliotecas: pandas, numpy, pyarrow, fastparquet, polars, duckdb, scipy, scikit-learn, statsmodels, prophet, pmdarima, xgboost, lightgbm, optuna, hyperopt, shap, lime, mlxtend, kneed, umap-learn, dask, ray, joblib, multiprocess, celery, nltk, requests, urllib3, aiohttp, beautifulsoup4, scrapy, orjson, openpyxl, gspread, oauth2client, firebase_admin, google-cloud-firestore, kafka-python, psycopg2-binary, mysql-connector-python, pymssql, pymongo, firebird-driver |
Não dá para instalar biblioteca pelo nó. No Windows, instalar uma biblioteca no Python do sistema não adianta enquanto o PythonEmbed existir, porque o Agente usa o embutido primeiro. Um script feito num Agente ETL em contêiner pode falhar num Agente ETL Windows pela versão do Python ou por falta de biblioteca.
Se nenhum Python responde, a execução falha com Python não encontrado neste agente., seguido de cada caminho tentado e o motivo. No Windows, a mensagem diz também se a pasta PythonEmbed existe; reinstalar ou atualizar o Agente recria a pasta.
O Python 3.13 não traz mais alguns módulos antigos da biblioteca padrão, como distutils, imp, cgi, imghdr e telnetlib. Um script que importa um deles para de rodar no contêiner a partir da 0.9.23 com ModuleNotFoundError. Troque pelo substituto indicado na documentação do Python.
Para filtro, join e agrupamento, o SQL (DuckDB) roda dentro do próprio Agente ETL, sem abrir um processo Python nem gravar a saída em arquivo para ler de volta. No Python, prefira operações do pandas sobre a coluna inteira a um laço com iterrows.
Pelo Lumo CLI
O nó também pode ser escrito e versionado em YAML. Veja a referência de flow.