Macro to surface models to other schemas - dbt_utils.star()

Viewed 489

Problem


Currently in my CI process, I am surfacing specific models built to multiple schemas. This is generally my current process.

macros/surface_models.sql

{% set model_views = [] %}

{% for node in graph.nodes.values() %}
  {% if some type of filtering criteria %}
    {%- do model_tables.append( graph.node.alias ) -%}
  {% endif %}
{% endfor %}

{% for view in model_views %}
    {% set query %} 
      'create view my_other_schema.' ~ table ~ 'as (select * from initial_schema.' ~ table ~ ');' 
    {% endset %}
    {{ run_query(query) }}
{% endfor %}

while this works, if the underlying table/view's definition changes, the view created from the above macro will return an error like: QUERY EXPECTED X COLUMNS BUT GOT Y

I could fix this by writing each query with each query's explicit names:

select id, updated_at from table

not

select * from table

Question


Is there a way to utilize the above macro concept but using {{ dbt_utils.star() }} instead of *?

0 Answers
Related