我有一个Variable
存储如下:
x | {"a": 1, "b": 2}
我想在我的DAG脚本中以dict的形式检索这个完整的JSON。以下工作:
from airflow.models import Variable
op = CustomOperator(
templated_field = Variable.get('x', deserialize_json = True)
)
# called in CustomOperator:
templated_field.keys()
# dict_keys(['a', 'b'])
documentation表示以下应该是等价的:
The second call [using
Variable.get(deserialize_json=True)
] assumes json content and will be deserialized......or if you need to deserialize a json object from the variable [using a Jinja template]:
{{ var.json.<variable_name> }}
但是,当我使用此方法然后尝试提取密钥时,会出现错误:
op = CustomOperator(
templated_field = '{{ var.json.x }}'
)
# called in CustomOperator
templated_field.keys()
AttributeError: 'str' object has no attribute 'keys'
错误表明json实际上没有反序列化:
# same error
"{'a': 1, 'b': 2}".keys()
我在网上找到的唯一使用var.json
方法的例子不是从JSON中提取dict,而是使用JSON路径来提取标量:
# https://www.applydatascience.com/airflow/airflow-variables/
{{ var.json.example_variables_config.var3 }}
# https://gist.github.com/kaxil/61f41dd87a69230d1a637dc3a1d2fa2c
{{ var.json.dag1_config.var1 }}
Hossein很有帮助地指出这个字段应该模板化;下面是来自CustomOperator
的一行:
class CustomOperator(SuperCustomOperator):
template_fields = SuperCustomOperator.template_fields + ('template_field',)
我错过什么了吗?Jinja var.json
方法是只适合提取标量,还是也可以将JSON提取为dict?你知道吗
实际上你应该在
templated fileds
上使用它!模板化字段是由jinaja
呈现的字段,例如,假定BashOperator
:相关问题 更多 >
编程相关推荐