Great Expectations中ExpectationConfiguration如何指定评估参数
报错根因
{"$PARAMETER": "runtime_values"}的写法只是在期望配置中声明:value_set字段需要引用名为runtime_values的运行时评估参数,并没有给这个参数绑定实际值。框架在校验配置加载阶段找不到对应参数的赋值,就会抛出No value found for $PARAMETER runtime_values的异常。
正确配置方式
根据参数值的确定时机,选对应方案即可:
方案1:校验运行时动态传参
适合value_set的值每次校验都可能变化、无法提前硬编码的场景:
- 你当前写的
ExpectationConfiguration定义不需要修改,$PARAMETER占位符的语法本身是正确的。 - 执行校验(调用
checkpoint.run()或validator.validate())时,必须通过runtime_evaluation_parameters字段传入对应参数的实际值,示例:
validation_result = checkpoint.run( # 显式传入所有声明过的运行时评估参数 runtime_evaluation_parameters={ "runtime_values": ["g001", "g002", "g003"] # 替换为业务要求的合法gameid集合 } )
注意:传入的参数字典键名必须和
$PARAMETER后标注的参数名完全一致,大小写敏感,名称不匹配会直接触发参数找不到的报错。
方案2:提前在期望套件中注册固定参数值
适合value_set是固定枚举值、不需要每次运行动态调整的场景:
在添加期望配置之前,先把参数值注册到期望套件的评估参数存储中,后续执行校验不需要额外传参:
# 先注册评估参数 suite.add_evaluation_parameter( parameter_name="runtime_values", parameter_value=["g001", "g002", "g003"] # 替换为实际的合法gameid集合 ) # 再添加你定义的ExpectationConfiguration即可,不需要修改配置内容 suite.add_expectation(expectation_configuration=expectation_configuration_2)
避坑提示
- 如果
value_set是固定值,完全不需要用$PARAMETER占位符,直接在kwargs里写"value_set": ["g001", "g002", "g003"]即可,多余的占位符声明反而会触发参数查找逻辑报错。 - 如果传入的评估参数是嵌套字典结构,比如参数值存在
{"game_config": {"allowed_ids": [1,2,3]}}层级,占位符里的参数名必须写全路径:{"$PARAMETER": "game_config.allowed_ids"},不能只写最后一级键名。 - 不要在未做参数绑定的情况下随意使用
$PARAMETER语法,只要配置里出现该占位符,框架就会强制查找对应参数值,找不到就直接抛错终止运行。
内容的提问来源于stack exchange,提问作者femibyte
相关产品推荐
相关产品推荐

