DBT применяет аналогичное преобразование ко многим таблицам в цикле

Я проверяю dbt для конкретного варианта использования, и у меня есть следующий вопрос.

Могу ли я применить/использовать аналогичные преобразования ко многим таблицам в каком-то цикле?

Например:

Я хочу сделать следующее для многих таблиц, чтобы вставить недостающие строки в целевую таблицу:

INSERT into stage.<table_name> SELECT * FROM loading.<table_name> EXCEPT SELECT * FROM stage.<table_name>;

Как я могу сделать это в цикле FOR или любым другим способом для всех таблиц?

Спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете сделать это, но я чувствую, что вы продвигаетесь по маршруту, который не соответствует использованию dbt. да, вы можете использовать цикл. однако вам следует рассмотреть возможность использования инкрементной модели, а не вставки, которую вы предоставляете.

Шаги, которые вы должны предпринять.

  1. преобразовать свое мышление/логику в инкрементную модель
  2. создать таблицу (внешнюю или внутри семени) со списком таблиц
  3. создайте макрос, который вы используете в своей инкрементной модели, которая генерирует код.

вы можете использовать что-то вроде этого макроса для создания списка из вашей таблицы, затем вы должны вызвать этот макрос из макроса, который вы используете для создания кода своей модели.

{% macro generate_tables_set() %}

{% set tables_sql %}
select table_name
from my_table_of_tables
{% endset %}
{%do return(run_query(tables_sql)) %}

{% endmacro %}

Вот пример макроса, который использует этот список

{% macro do_something() %}

{% set sql_template %}

your sql goes here, use ==TABLE== to denote your table
e.g. select * from stage.==TABLE==


{% endset %}

{%set this_sql_list =[] %}
{% for this_name in generate_tables_set()%}
  {%   set this_sql = this_sql|replace("==TABLE= = ",this_name)%}
  {%   do this_sql_list.append(this_sql) %}
{% endfor %}
{{this_sql_list|join(" UNION ALL ")}}
{% endmacro %}

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