Windows+SQL Server环境下无法启用Dagster运行重试的方案咨询
解决方案
方案1:切换到本地文件系统事件日志存储
直接将事件日志存储改为本地文件系统,就能绕过SQL Server不支持重试的限制,这是最简便的方法。修改你的dagster.yaml配置:
event_log_storage: module: dagster.core.storage.event_log class: FilesystemEventLogStorage config: base_dir: "C:\\dagster\\event_logs" # 替换为你实际的本地路径
配置完成后重启dagster-webserver,运行重试功能即可正常启用。注意这种方式仅适合单节点部署场景,如果是多节点集群部署,本地存储会存在日志同步问题。
方案2:自定义SQL Server事件日志存储以支持重试
如果必须保留SQL Server作为存储后端,需要自定义实现支持重试的事件日志存储类:
- 创建一个Python模块(比如
custom_ms_sql_event_log.py),继承Dagster的MsSqlEventLogStorage并补充重试相关的方法实现:
from dagster.core.storage.event_log import MsSqlEventLogStorage from dagster.core.storage.event_log.sql_event_log import SqlEventLogStorage from dagster.core.storage.event_log.schema import EventLogSchema from dagster.core.storage.event_log.retries import RetryRecord class CustomMsSqlEventLogStorage(MsSqlEventLogStorage): def get_run_retries(self, run_id): with self.connect() as conn: result = conn.execute( f"""SELECT * FROM {EventLogSchema.TABLE_NAME} WHERE run_id = :run_id AND event_type = 'RUN_RETRY'""", {"run_id": run_id} ).fetchall() return [self._retry_record_from_db_row(row) for row in result] def add_run_retry(self, retry_record): with self.connect() as conn: conn.execute( f"""INSERT INTO {EventLogSchema.TABLE_NAME} (run_id, event_type, event_data, timestamp) VALUES (:run_id, 'RUN_RETRY', :event_data, :timestamp)""", { "run_id": retry_record.run_id, "event_data": self.serialize(retry_record.to_dict()), "timestamp": retry_record.timestamp } ) conn.commit() # 可根据Dagster版本需求补充update_run_retry等其他重试相关方法,参考PostgresEventLogStorage的实现适配SQL Server语法
- 在
dagster.yaml中配置使用自定义存储:
event_log_storage: module: custom_ms_sql_event_log class: CustomMsSqlEventLogStorage config: # 原有的SQL Server连接配置 username: "your_username" password: "your_password" hostname: "your_sql_server_host" db_name: "your_db_name"
这个方案需要你熟悉Dagster的SQL事件日志存储逻辑,以及SQL Server的语法细节,确保所有重试相关方法都正确实现。
方案3:临时绕过检查(不推荐)
如果只是临时需要启用重试,且能接受潜在风险,可以修改Dagster源码中的检查逻辑:
找到Dagster安装目录中触发报错的位置(通常在dagster/core/storage/event_log/sql_event_log.py内的SqlEventLogStorage类初始化或重试检查逻辑中),注释掉关于运行重试的支持校验代码。
但这个方法会破坏Dagster的内置校验逻辑,升级Dagster版本后会失效,且可能导致重试功能出现不可预知的问题,仅建议作为应急临时方案。
内容的提问来源于stack exchange,提问作者cpowr
相关产品推荐
相关产品推荐

