多代码位置下Dagster全资产物化配置异常求助
问题解答
场景可行性
你描述的场景完全符合Dagster的设计目标,是可行的——多code location跨团队协作、自动触发上游依赖物化、带配置的资产管理都是Dagster的核心能力。
错误原因
出现dagster._core.errors.DagsterInvalidSubsetError的核心问题是AssetKey不匹配,具体可能是以下几种情况:
service-2中用SourceAsset关联上游load_data时,AssetKey拼写/大小写错误,或与service-1中load_data的实际AssetKey不一致;- 配置定义(
LoadDataConfig/ProcessDataConfig)导致资产的默认AssetKey被修改,使得中央服务器注册表中不存在process_data这个Key; service-2的Definitions未正确包含process_data资产,导致code location注册时该资产未被中央服务器识别。
排查与修复步骤
校验AssetKey一致性
- 在
service-1中打印load_data的实际AssetKey,确认其值:from dagster import asset, Definitions @asset(config_schema=LoadDataConfig) def load_data(context): # 业务逻辑 pass print(load_data.key) # 输出如 AssetKey(['load_data']) - 在
service-2中,确保SourceAsset的Key与上述输出完全一致:from dagster import SourceAsset, asset # 这里的key必须和service-1中load_data的Key严格匹配 load_data_source = SourceAsset(key="load_data") @asset(config_schema=ProcessDataConfig, deps=[load_data_source]) def process_data(context): # 业务逻辑 pass
- 在
检查配置是否修改了AssetKey
- 确认资产装饰器中未通过
asset_key参数自定义Key(除非你明确需要),以下错误写法会导致AssetKey偏离预期:# 错误示例:不要随意修改asset_key @asset(config_schema=LoadDataConfig, asset_key="custom_load_data") def load_data(context): pass
- 确认资产装饰器中未通过
验证code location的资产加载
- 确保
service-2的Definitions正确包含所有资产:from dagster import Definitions defs = Definitions( assets=[process_data, load_data_source] # 其他配置如资源、调度等 ) - 本地运行
dagster dev启动service-2单独实例,查看UI中是否能正常看到process_data资产,确认资产加载正常。
- 确保
为上游依赖传递配置
- 物化
process_data时,需在配置中同时指定上游load_data的参数,UI中的配置示例如下:assets: load_data: config: input_path: "/path/to/source.csv" process_data: config: output_path: "/path/to/processed.csv"
- 物化
内容的提问来源于stack exchange,提问作者Eren Yilmaz
相关产品推荐
相关产品推荐

