Создание нескольких таблиц в 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/
каталог) представлен одним объектом (таблицей / представлением) в вашем хранилище данных - на данный момент нет никакого способа обойти это.
Если вам нужно поддерживать отдельные таблицы для каждой учетной записи, я бы подумал:
- Обертывание логики в макрос:
-- 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') }}
В зависимости от конкретного варианта использования вы также можете подумать о создании главной таблицы для всех учетных записей, объединив их вместе. Таким образом, вам нужно создать только одну модель. Ознакомьтесь со статьей " Объединение воедино идентично структурированных источников ", чтобы узнать о некоторых методах этого подхода.