使用 Azure SQL 服务器作为后端数据库运行 Apache Airflow

Posted

技术标签:

【中文标题】使用 Azure SQL 服务器作为后端数据库运行 Apache Airflow【英文标题】:Running Apache Airflow with Azure SQL server as backend DB 【发布时间】:2020-12-16 13:05:20 【问题描述】:

我正在尝试使用 mssql+pyodbc 连接字符串以 Azure SQL 数据库作为后端运行气流(已安装所有相关驱动程序)。

虽然气流能够连接到数据库并创建表,即 airflow initdb 成功运行,但我在运行气流调度程序时遇到了问题,因此,触发的任务总是在“运行”状态。

这是我在运行气流调度程序时遇到的错误:

*sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near '1'. (102) (SQLExecDirectW)")
     [SQL: SELECT dag.dag_id AS dag_dag_id
    FROM dag
    WHERE dag.is_paused IS 1 AND dag.dag_id IN (?)]
    [parameters: ('example_http_operator',)]*

(此错误的背景:http://sqlalche.me/e/13/f405)

我正在使用apache-airflow==1.10.11。 如果您能够使用任何配置运行气流 + azure SQL DB,请随时加入。

【问题讨论】:

airflow 不正式支持 mssql / azure 作为后端数据库。它仅针对 mysql 和 PostgreSQL 进行了测试。 @Elad 的评论仍然成立吗? 2.2.0 版本说明(2021 年底)仍将 MSSQL 称为实验性版本。我的 DBA 只支持 MSSQL,对我有很大帮助。 Airflow 2.2 不支持 mssql。未来的版本将支持它。 【参考方案1】:

我找到了一个文档,并讨论了有关运行气流 + azure SQL DB 的配置。或许对你有帮助。

参考:Setting up Airflow on Azure & connecting to MS SQL Server

本帖也给出了一些配置:Apache Airflow - Connection issue to MS SQL Server using pymssql + SQLAlchemy

【讨论】:

【参考方案2】:

对于作为后端数据库的 MSSQL,Airflow#10713 中有解决方法。我使用apache-airflow==1.10.15 并解决了与您相同的错误。

建议的命令已附加,但我使用vi更新而不是运行sed命令。

RUN sed -i 's/import copy/import copy,sqlalchemy/g' /usr/local/lib/python3.6/site-packages/airflow/models/dag.py \ && sed -i 's/DagModel.is_paused.is_(True)/DagModel.is_paused == sqlalchemy.sql.expression.true()/g' /usr/local/lib/python3.6/site-packages/airflow/models/dag.py

【讨论】:

以上是关于使用 Azure SQL 服务器作为后端数据库运行 Apache Airflow的主要内容,如果未能解决你的问题,请参考以下文章

Azure 上的 .NET Core 无法连接到 SQL Server 数据库

Azure App Service Application Insights 不显示依赖的 sql 命令文本

在 Azure 移动应用服务后端将字符串属性反序列化为 Json 对象

使用 Azure SQL 数据库后端在 MS Access 中添加和编辑表的工作流

使用 azure 作为 Django 的存储后端(使用 django-storages)

SQL Azure 作为链接服务器 -> 获取插入行的标识