Создание нескольких таблиц в BigQuery с помощью dbt for-loop

Я пытаюсь создать отдельные таблицы внутри одного набора данных в BigQuery, используя цикл for в dbt, просматривая список учетных записей, но пока безуспешно. Немного контекста - я использую Stitch для получения данных из Facebook Ads и отправки их в наше хранилище 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

Что отсутствует (я думаю), так это обертка запроса + сам цикл for. Кто-нибудь может помочь мне заполнить пробелы?

1 ответ

Dbt работает в рамках парадигмы одной модели (т.е. .sql файл в вашем models/ каталог) представлен одним объектом (таблицей / представлением) в вашем хранилище данных - на данный момент нет никакого способа обойти это.

Если вам нужно поддерживать отдельные таблицы для каждой учетной записи, я бы подумал:

  1. Обертывание логики в макрос:
-- 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 %}
  1. Создайте отдельную модель для каждой учетной записи и вызовите макрос в каждой модели:
-- models/my_first_account.sql
{{ account_transform('my_first_account') }}
-- models/my_second_account.sql
{{ account_transform('my_second_account') }}

В зависимости от конкретного варианта использования вы также можете подумать о создании главной таблицы для всех учетных записей, объединив их вместе. Таким образом, вам нужно создать только одну модель. Ознакомьтесь со статьей " Объединение воедино идентично структурированных источников ", чтобы узнать о некоторых методах этого подхода.

Другие вопросы по тегам