Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add macro to get columns #516

Merged
merged 13 commits into from
Mar 28, 2022
Prev Previous commit
Next Next commit
update name to get_filtered_columns_in_relation from get_columns
  • Loading branch information
patkearns10 committed Mar 24, 2022
commit 77d5a5b025a86d3cb3053e84a4c2b852b46d58c8
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ For compatibility details between versions of dbt-core and dbt-utils, [see this

- [Introspective macros](#introspective-macros):
- [get_column_values](#get_column_values-source)
- [get_columns](#get_columns-source)
- [get_filtered_columns_in_relation](#get_filtered_columns_in_relation-source)
- [get_relations_by_pattern](#get_relations_by_pattern-source)
- [get_relations_by_prefix](#get_relations_by_prefix-source)
- [get_query_results_as_dict](#get_query_results_as_dict-source)
Expand Down Expand Up @@ -586,7 +586,7 @@ This macro returns the unique values for a column in a given [relation](https://
...
```

#### get_columns ([source](macros/sql/get_columns.sql))
#### get_filtered_columns_in_relation ([source](macros/sql/get_filtered_columns_in_relation.sql))
This macro returns an iterable Jinja list of columns for a given [relation](https://docs.getdbt.com/docs/writing-code-in-dbt/class-reference/#relation), (i.e. not from a CTE)
- optionally exclude columns
- the input values are not case-sensitive (input uppercase or lowercase and it will work!)
Expand All @@ -602,7 +602,7 @@ to pull column names in a non-filtered fashion, also bringing along with it othe
**Usage:**
```sql
-- Returns a list of the columns from a relation, so you can then iterate in a for loop
{% set column_names = get_columns(from=ref('your_model'), except=["field_1", "field_2"]) %}
{% set column_names = dbt_utils.get_filtered_columns_in_relation(from=ref('your_model'), except=["field_1", "field_2"]) %}
...
{% for column_name in column_names %}
max({{ column_name }}) ... as max_'{{ column_name }}',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{% macro get_columns(from, except=[], output_lower=False) -%}
{{ return(adapter.dispatch('get_columns', 'dbt_utils')(from, except)) }}
{% macro get_filtered_columns_in_relation(from, except=[], output_lower=False) -%}
{{ return(adapter.dispatch('get_filtered_columns_in_relation', 'dbt_utils')(from, except)) }}
{% endmacro %}

{% macro default__get_columns(from, except=[]) -%}
{%- do dbt_utils._is_relation(from, 'get_columns') -%}
{%- do dbt_utils._is_ephemeral(from, 'get_columns') -%}
{% macro default__get_filtered_columns_in_relation(from, except=[]) -%}
{%- do dbt_utils._is_relation(from, 'get_filtered_columns_in_relation') -%}
{%- do dbt_utils._is_ephemeral(from, 'get_filtered_columns_in_relation') -%}

{# -- Prevent querying of db in parsing mode. This works because this macro does not create any new refs. #}
{%- if not execute -%}
Expand Down
2 changes: 1 addition & 1 deletion macros/sql/star.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
{{ return('') }}
{% endif %}

{%- for col in dbt_utils.get_columns(from, except, output_lower) %}
{%- for col in dbt_utils.get_filtered_columns_in_relation(from, except, output_lower) %}

{%- if relation_alias %}{{ relation_alias }}.{% else %}{%- endif -%}{{ adapter.quote(col)|trim }} {%- if prefix!='' or suffix!='' -%} as {{ adapter.quote(prefix ~ col ~ suffix)|trim }} {%- endif -%}
{%- if not loop.last %},{{ '\n ' }}{% endif %}
Expand Down