Airflow 2.0创建Webhook的HTTP连接失败报sqlalchemy错误如何解决
Airflow 2.1.0 创建HTTP连接抛出sqlalchemy DataError 解决方案
问题根因
该错误是Airflow 2.1.0版本的已知官方bug,版本升级时对元数据库connection表的schema字段长度限制做了错误调整:从Airflow 1.x的255字符上限错误修改为10字符,填写https(5字符)看似不会超限,但如果字段存在前后空格、特殊字符,或者关联的其他连接字段触发了写入校验,就会抛出数据写入类型的sqlalchemy.exc.DataError错误。
可执行解决方法
- 临时修复(无需升级/改库)
先清空当前连接的Schema输入框,重新手动输入https,不要复制粘贴避免带入不可见的空白字符,提交测试是否可以正常保存。如果依然报错,可以将协议头直接写到Host字段,例如Host填写https://xxx.xxx.com,Schema字段留空,Webhook Operator运行时会自动识别Host中的协议头,不会影响正常调用。 - 永久修复方案1(修改元数据库)
直接调整元数据库connection表的schema字段长度限制,对应不同数据库执行语句如下:
MySQL/MariaDB:ALTER TABLE connection MODIFY COLUMN schema VARCHAR(255) NULL;
PostgreSQL:ALTER TABLE connection ALTER COLUMN schema TYPE VARCHAR(255);
SQLite:
执行完成后重启Airflow Webserver和Scheduler服务即可。ALTER TABLE connection RENAME TO connection_old; CREATE TABLE connection ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, conn_id VARCHAR(250) NOT NULL, conn_type VARCHAR(50) NOT NULL, host VARCHAR(500), schema VARCHAR(255), login VARCHAR(500), password VARCHAR(500), port INTEGER, extra TEXT, created_date TIMESTAMP, last_modified TIMESTAMP, is_encrypted BOOLEAN, is_extra_encrypted BOOLEAN, UNIQUE (conn_id) ); INSERT INTO connection SELECT * FROM connection_old; DROP TABLE connection_old; - 永久修复方案2(版本升级)
官方在Airflow 2.1.1及后续小版本中已经修复了该字段长度错误的问题,直接将Airflow版本升级到2.1.1+即可,无需额外修改配置或数据库。
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

