使用dbt for循环在bigquery中创建多个表

a8jjtwal  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(249)

我尝试在bigquery中使用dbt中的for循环在单个数据集中创建单个表,遍历帐户列表,但迄今为止没有成功。一点背景知识-我正在使用stitch从facebook广告中获取数据,并将其推送到我们的bigquery仓库。然后,根据下面的模型,为每个帐户创建一个新的单独表,其中包含聚合/建模的数据。
变量的声明如下所示:

-- table that contains list of accounts
{% set account_data = ref('bq_acct_list') %} 
{% set accounts = get_column_values(table=account_data, column='bq_name_suffix') %}

表必须基于的查询是:

SELECT 
        DATE_TRUNC(DATE(date_start), DAY) date,
        account_id,
        account_name,
        ROUND(SUM(spend), 2) ad_spend
FROM `{{ target.project }}.{{account}}.ads_insights`
GROUP BY 1, 2, 3

缺少的(我认为)是查询的 Package 器+for循环本身。有人能帮我填空吗?

tquggr8v

tquggr8v1#

dbt在一种模式(即 .sql 文件在您的 models/ 目录)是由数据仓库中的一个对象(表/视图)表示的-目前没有办法解决这个问题。
如果您需要为每个帐户维护单独的表,我会考虑:
将逻辑 Package 到宏中:

-- macros/account_transform.sql
{% macro account_transform(account) %}
SELECT 
        DATE_TRUNC(DATE(date_start), DAY) date,
        account_id,
        account_name,
        ROUND(SUM(spend), 2) ad_spend
FROM `{{ target.project }}.{{ account }}.ads_insights`
GROUP BY 1, 2, 3
{% endmacro %}

为每个帐户创建单独的模型,并在每个模型中调用宏:

-- models/my_first_account.sql
{{ account_transform('my_first_account') }}
-- models/my_second_account.sql
{{ account_transform('my_second_account') }}

根据具体的用例,您还可以考虑为所有帐户创建一个主表,将它们合并在一起。这样,您只需创建一个模型。查看关于“将相同结构的源统一在一起”的文章,了解这种方法的一些技巧。

相关问题