Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Ajuda com erro ao criar Operador

Boa tarde, pessoal

Estou nessa aula Criando operadores exportando ao Data Lake aqui e ao rodar o script do operador pra testar o funcionamento correto, o log aparece, o arquivo json é criado corretamente mas em seguida apresenta o erro:

[2021-07-28 20:58:21,966] {customerio_hook.py:19} INFO - URL: https://beta-api.customer.io/v1/api/broadcasts
Traceback (most recent call last):
  File "/opt/airflow/plugins/operators/customerio_operator.py", line 50, in <module>
    ti.run()
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/utils/session.py", line 70, in wrapper
    return func(*args, session=session, **kwargs)
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", line 1438, in run
    session=session,
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/utils/session.py", line 67, in wrapper
    return func(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", line 1221, in _run_raw_task
    self._run_mini_scheduler_on_child_tasks(session)
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/utils/session.py", line 67, in wrapper
    return func(*args, **kwargs)
  File "/home/airflow/.local/lib/python3.6/site-packages/airflow/models/taskinstance.py", line 1236, in _run_mini_scheduler_on_child_tasks
    session=session,
  File "/home/airflow/.local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3500, in one
    raise orm_exc.NoResultFound("No row was found for one()")
sqlalchemy.orm.exc.NoResultFound: No row was found for one()

Não estou seguindo exatamente o curso. Resolvi fazer com uma outra API (do customer.io e que sei que funciona) e instalar o ambiente via docker, seguindo o tutorial da própria documentação (aqui) sem mudar nada e usando o Airflow mais recente, que esta na 2.1.2.

Para rodar todos os testes airflow.sh que também está na documentação e tudo estava funcionando até esse problema aparecer. Tentei procurar na internet e não encontrei nada que me ajudasse. Entendo que saí um pouco do roteiro do curso, mas se alguém conseguir me ajudar, agradeço demais!

2 respostas
solução!

Ola Roberto, Na versão 2 do Airflow a forma para criar e testar operadores mudou um pouco. Como pode ver nessa tarefa: https://cursos.alura.com.br/course/engenharia-dados-introducao-data-pipelines/task/94359 ou na documentação: https://airflow.apache.org/docs/apache-airflow/stable/howto/custom-operator.html

Acredito que a forma que mostrei no curso para testar o operador não seja exatamente igual a que precisa ser aplicado para a versão 2. No erro parece que o Airflow esta procurando pela instancia no banco de dados do Airflow mas nao encontra nenhum registro.

Voce por tentar criar uma biblioteca de test usando unittest: https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html?highlight=testing%20operator#testing-a-dag

Muito obrigado pela ajuda. Pra conseguir testar o operador, tive que criar uma dag e rodar o comando airflow test dag_id task_id timestamp