如何通过CLI参数参数化Kedro数据目录适配调度任务?
解决Kedro流水线中通过CLI参数动态配置数据目录的问题
核心思路
直接利用Kedro的参数插值功能,把CLI传入的date和country参数嵌入到数据目录(catalog)的数据集配置中,实现动态生成SQL查询的需求。
具体步骤
通过Kedro CLI传递参数
用kedro run命令的--params选项直接传入所需参数,格式为key:value,多个参数用逗号分隔:kedro run --params date:2022-01-03,country:UK在数据目录中配置动态SQL查询
在conf/base/catalog.yml里定义你的SQL数据集,用{{ params.xxx }}的语法引用CLI传入的参数,自动完成插值:# conf/base/catalog.yml input_data: type: pandas.SQLTableDataSet sql: "SELECT * FROM input_data_{{ params.country }} WHERE date = '{{ params.date }}'" credentials: db_credentials # 替换成你实际的数据库凭证配置 load_args: index_col: None这里的
{{ params.country }}和{{ params.date }}会自动替换为CLI传入的对应值,生成你需要的SQL语句。验证参数传递效果
- 可以先运行
kedro config list查看当前生效的参数,确认date和country已被正确加载 - 也可以在节点代码中打印
context.params来验证参数:def predict_node(context, input_data): print("传入的日期:", context.params["date"]) print("传入的国家:", context.params["country"]) # 后续预测逻辑
- 可以先运行
适配调度器调用
调度器只需执行上述kedro run --params ...命令即可,和之前直接调用python predict的逻辑完全对齐,支持任意日期和国家参数。
补充说明
- 如果需要对参数做类型转换(比如把字符串日期转成
datetime对象),可以在节点代码里处理:from datetime import datetime def predict_node(context, input_data): date_param = datetime.strptime(context.params["date"], "%Y-%m-%d") # 处理后的日期可以用于后续逻辑 - 若要设置参数默认值,可在
conf/base/parameters.yml中添加:
这样即使CLI不传参数,也会使用默认值兜底。# conf/base/parameters.yml date: "2022-01-01" country: "UK"
内容的提问来源于stack exchange,提问作者w_sz
相关产品推荐
相关产品推荐

