J'essaie d'accéder à des fichiers externes dans une tâche Airflow pour lire du sql et j'obtiens "fichier introuvable". Quelqu'un l'a-t-il rencontré?
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from datetime import datetime, timedelta
dag = DAG(
'my_dat',
start_date=datetime(2017, 1, 1),
catchup=False,
schedule_interval=timedelta(days=1)
)
def run_query():
# read the query
query = open('sql/queryfile.sql')
# run the query
execute(query)
tas = PythonOperator(
task_id='run_query', dag=dag, python_callable=run_query)
Le journal indique ce qui suit:
IOError: [Errno 2] No such file or directory: 'sql/queryfile.sql'
Je comprends que je pourrais simplement copier et coller la requête dans le même fichier, ce n'est vraiment pas une bonne solution. Il y a plusieurs requêtes et le texte est vraiment gros, intégrez-le avec le code Python compromettrait la lisibilité.
Voici un exemple d'utilisation de la variable pour vous faciliter la tâche.
Ajoutez d'abord Variable dans Airflow UI
-> Admin
-> Variable
, par exemple. {key: 'sql_path', values: 'your_sql_script_folder'}
Ajoutez ensuite le code suivant dans votre DAG, pour utiliser Variable from Airflow que vous venez d'ajouter.
Code DAG:
import airflow
from airflow.models import Variable
tmpl_search_path = Variable.get("sql_path")
dag = airflow.DAG(
'tutorial',
schedule_interval="@daily",
template_searchpath=tmpl_search_path, # this
default_args=default_args
)
Vous pouvez maintenant utiliser le nom ou le chemin du script sql sous le dossier Variable
Vous pouvez en savoir plus sur this
Tous les chemins relatifs sont pris en référence à la variable d'environnement AIRFLOW_HOME. Essayer: