Airflow 通过python操作符检查气流连接列表
在执行DAG之前,我想检查连接列表中是否存在特定的连接id。我没有任何保持连接的机制。即使我通过GUI创建连接,当服务器重新启动时,所有连接都会被删除 下面是我认为应该添加的任务,但在运行该任务时出现了一个ascii错误,可能是因为该命令返回的表可能未被记录器充分解析Airflow 通过python操作符检查气流连接列表,airflow,Airflow,在执行DAG之前,我想检查连接列表中是否存在特定的连接id。我没有任何保持连接的机制。即使我通过GUI创建连接,当服务器重新启动时,所有连接都会被删除 下面是我认为应该添加的任务,但在运行该任务时出现了一个ascii错误,可能是因为该命令返回的表可能未被记录器充分解析 def create_connection(**kwargs): print(kwargs.get('ds')) list_conn = BashOperator( task_id='list_connectio
def create_connection(**kwargs):
print(kwargs.get('ds'))
list_conn = BashOperator(
task_id='list_connections',
bash_command='airflow connections --l',
xcom_push=True)
conns = list_conn.execute(context=kwargs)
logging.info(conns)
if not conns:
new_conn = Connection(conn_id='xyz', conn_type='s3',
host='https://api.example.com')
session = settings.Session()
session.add(new_conn)
session.commit()
logging.info('Connection is created')
问:有没有办法让我知道DAG本身是否添加了连接。如果它已经存在,那么我不会创建新的连接。会话。查询(连接)
应该可以做到这一点
def list_connections(**context):
session = settings.Session()
return session.query(Connection)
list_conn = PythonOperator(
task_id='list_connections',
python_callable=list_connections,
provide_context=true,
)
请确保所有代码都包含在任务中。或者为了正确表述,它们应该在
运行时执行,而不是在加载时执行。直接在DAG文件中添加代码会导致它在加载期间运行,这是不推荐的 公认的答案非常有效。我有一个场景,我需要通过连接id获得一个连接来创建DAG。因此,我必须在任务之外,在DAG创建本身中获得它。
以下代码适用于我:
from airflow.hooks.base_hook import BaseHook
conn = BaseHook.get_connection(connection)
希望这可能会对某人有所帮助!:) 由于您已经导入了连接,session.query(Connection)
应该列出所有有效的连接。如果你想把答案贴出来,我会接受的。