dbt fromyaml 上下文方法简单说明
fromyaml 上下文方法可以用来加载yaml 内容,属于一个工具类,比如automate-dv 就使用了不少方法
参考使用
{%- set info -%}
source_model:
raw_staging: "raw_customer"
derived_columns:
SOURCE: "!1"
LOAD_DATETIME: "CRM_DATA_INGESTION_TIME"
EFFECTIVE_FROM: "BOOKING_DATE"
START_DATE: "BOOKING_DATE"
END_DATE: "TO_DATE('9999-12-31')"
hashed_columns:
CUSTOMER_HK: "CUSTOMER_ID"
NATION_HK: "NATION_ID"
CUSTOMER_NATION_HK:
- "CUSTOMER_ID"
- "NATION_ID"
CUSTOMER_HASHDIFF:
is_hashdiff: true
columns:
- "CUSTOMER_NAME"
- "CUSTOMER_ID"
- "CUSTOMER_PHONE"
- "CUSTOMER_DOB"
{%- endset -%}
{% set metadata_dict = fromyaml(info) %}
{{log(metadata_dict, info=True)}}
内部处理
- 实际上就是包装了一个context 方法
@contextmember()
@staticmethod
def fromyaml(value: str, default: Any = None) -> Any:
"""The fromyaml context method can be used to deserialize a yaml string
into a Python object primitive, eg. a `dict` or `list`.
:param value: The yaml string to deserialize
:param default: A default value to return if the `string` argument
cannot be deserialized (optional)
Usage:
{% set my_yml_str -%}
dogs:
- good
- bad
{%- endset %}
{% set my_dict = fromyaml(my_yml_str) %}
{% do log(my_dict['dogs'], info=true) %}
-- ["good", "bad"]
{% do my_dict['dogs'].pop() }
{% do log(my_dict['dogs'], info=true) %}
-- ["good"]
"""
try:
return safe_load(value)
except (AttributeError, ValueError, yaml.YAMLError):
return default
- safe_load 方法
def safe_load(contents) -> Optional[Dict[str, Any]]:
return yaml.load(contents, Loader=SafeLoader)
参考资料
https://docs.getdbt.com/reference/dbt-jinja-functions/fromyaml
https://automate-dv.readthedocs.io/en/latest/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2022-05-10 citus vs greenplum 对比参考
2022-05-10 使用citus 列式存储压缩数据
2022-05-10 citus 以及timescaledb对于时许数据存储的处理
2021-05-10 cubestore 配置
2019-05-10 dinoql 使用nodejs 运行的几个问题
2019-05-10 dinoql 试用
2019-05-10 dinoql 使用graphql 语法查询javascript objects