如何在dbt

问题描述

有没有办法在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 (将#修改为@)