我正在尝试访问Airflow任务中的外部文件来读取一些sql,而我收到“找不到文件”。有人遇到过这个吗?
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)
日志状态如下:
IOError: [Errno 2] No such file or directory: 'sql/queryfile.sql'
据我所知,我可以简单地将查询复制并粘贴到同一个文件中,但实际上并不是很简洁。有多个查询,文本真的很大,嵌入Python代码会损害可读性。
答案 0 :(得分:6)
以下是使用变量的示例,以简化操作。
首先在Airflow UI
- >中添加变量 Admin
- > Variable
,例如。 {key: 'sql_path', values: 'your_sql_script_folder'}
然后在DAG中添加以下代码,以便使用您刚刚添加的Airflow变量。
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
)
现在您可以在文件夹Variable
您可以在this
答案 1 :(得分:2)
所有相对路径均参考 AIRFLOW_HOME 环境变量。尝试:
答案 2 :(得分:0)
假设sql
目录是相对于当前Python文件的,可以这样算出sql文件的绝对路径:
import os
CUR_DIR = os.path.abspath(os.path.dirname(__file__))
def run_query():
# read the query
query = open(f"{CUR_DIR}/sql/queryfile.sql")
# run the query
execute(query)