You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需Airflow UI配置Airflow-MSSQL连接及报错排查求助

问题解决方案

一、解决ModuleNotFoundError: No module named 'airflow.providers.microsoft.mssql'

Airflow官方Docker镜像默认未预装MSSQL provider,你本地安装的依赖无法同步到容器内部,需通过自定义镜像完成依赖安装:

  1. 构建自定义Airflow镜像
    在项目根目录新建Dockerfile,内容如下:

    FROM apache/airflow:2.4.1
    USER root
    # 安装ODBC依赖(MSSQL连接必备)
    RUN apt-get update && apt-get install -y unixodbc-dev
    USER airflow
    # 安装与Airflow 2.4.1兼容的MSSQL provider版本
    RUN pip install apache-airflow-providers-microsoft-mssql==3.3.0
    
  2. 修改docker-compose.yaml配置
    将原有Airflow服务的image字段替换为构建自定义镜像的配置:

    services:
      airflow-webserver:
        build: .
        # 保留原有的ports、volumes、environment等其他配置
      airflow-scheduler:
        build: .
        # 保留原有的其他配置
      airflow-worker:
        build: .
        # 保留原有的其他配置
    
  3. 重启容器生效

    docker-compose down
    docker-compose build
    docker-compose up -d
    

二、解决PyCharm的符号链接警告

该警告是Airflow尝试创建日志目录符号链接时,因系统权限不足或Windows环境不支持符号链接导致的,可直接关闭符号链接功能:

  • 在PyCharm的DAG运行配置中,添加环境变量:
    AIRFLOW__LOGGING__SYMLINK_LATEST=False
    
  • 若使用Windows系统,也可尝试以管理员权限启动PyCharm,允许创建符号链接。

三、验证DAG示例

确保DAG中导入正确的钩子并使用配置好的连接:

from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.providers.microsoft.mssql.hooks.mssql import MsSqlHook
from datetime import datetime

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2023, 1, 1),
}

with DAG('mssql_read_dag', default_args=default_args, schedule_interval='@daily', catchup=False) as dag:
    def read_mssql_data():
        # 使用配置好的连接ID获取钩子
        hook = MsSqlHook(mssql_conn_id='MY_MSSQL')
        conn = hook.get_conn()
        cursor = conn.cursor()
        cursor.execute("SELECT TOP 10 * FROM your_target_table")
        results = cursor.fetchall()
        for row in results:
            print(row)
        conn.close()

    read_task = PythonOperator(
        task_id='read_mssql_data',
        python_callable=read_mssql_data
    )

    read_task

四、确认连接配置正确性

检查docker-compose.yaml中的环境变量格式是否符合要求,因MSSQL部署在Airflow容器内,连接字符串示例:

environment:
  AIRFLOW_CONN_MY_MSSQL: "mssql+pyodbc://sa:YourStrongPassword@localhost:1433/YourDatabaseName?driver=ODBC+Driver+17+for+SQL+Server"

内容的提问来源于stack exchange,提问作者swede

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:30:54