问题描述
有没有办法在dbt中使用基于python的钩子?
我正在使用种子数据通过Jinja创建动态模型,但与jinja本身相比,我正在寻找更多的python灵活性。作为比较,Django视图可以将变量注入模板的方式类似。
我是dbt的新手,也许会遇到这种错误。感谢任何人的帮助或建议。
这是一个示例,其中我正在寻找使用python zip并最终使用类似的sql逻辑。我也有使用python枚举的类似需求。对于这些类型的场景,我应该只在python上使用sql吗?我想大多数(即使不是全部)都可以通过sql来实现(在进行这种类型操作时,我恰好比python更熟悉python)。
使用sql的当前工作示例:
{% set mappings = dbt_utils.get_query_results_as_dict("select
CONCAT(my_field,' AS ',my_alias) AS my_pairs FROM " ~
ref('data_seed_schema1_to_schema2') ) %}
SELECT
{% for map in mappings %}
{{',\n\t\t'.join(mappings[map]) }}
{% endfor %}
FROM my_table
->
SELECT
fooA AS bara,fooB AS barb
FROM my_table
所需的python示例:
{% set mappings = dbt_utils.get_query_results_as_dict("select * FROM " ~
ref('data_seed_schema1_to_schema2') ) %}
# my_zip = [f"{x} AS {y} for x,y in zip(mappings['my_field'],mappings['my_alias'])]
SELECT
{% for x in my_zip%}
{{',\n\t\t'.join(x) }}
{% endfor %}
FROM my_table
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)