Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
subscription_id,region,valid_from,valid_to
1,US,2020-01-01,2020-02-01
1,US,2020-02-01,2020-03-01
1,EU,2020-01-01,2020-02-01
1,EU,2020-02-01,2020-03-01
2,US,2020-01-01,2020-02-01
2,US,2020-02-01,2020-03-01
2,EU,2020-01-01,2020-02-01
2,EU,2020-02-01,2020-03-01
9 changes: 9 additions & 0 deletions integration_tests/models/generic_tests/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,15 @@ seeds:
upper_bound_column: valid_to
partition_by: subscription_id
zero_length_range_allowed: true

- name: data_test_mutually_exclusive_ranges_multi_partitions
data_tests:
- dbt_utils.mutually_exclusive_ranges:
lower_bound_column: valid_from
upper_bound_column: valid_to
partition_by:
- subscription_id
- region

- name: data_unique_combination_of_columns
data_tests:
Expand Down
25 changes: 23 additions & 2 deletions macros/generic_tests/mutually_exclusive_ranges.sql
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,34 @@
) }}
{% endif %}

{% set partition_clause="partition by " ~ partition_by if partition_by else '' %}
{% if partition_by %}
{% if partition_by is string %}
{% set partition_clause = "partition by " ~ partition_by %}
{% elif partition_by is sequence and partition_by is not string and partition_by | length > 0 %}
{% set partition_clause = "partition by " ~ partition_by | join(', ') %}
{% else %}
{% set partition_clause = "" %}
{% endif %}
{% else %}
{% set partition_clause = "" %}
{% endif %}

with window_functions as (

select
{% if partition_by %}
{{ partition_by }} as partition_by_col,
{% if partition_by is string %}
{{ partition_by }} as partition_by_col,
{% else %}
{% set concat_cols = [] %}
{% for col in partition_by %}
{% do concat_cols.append(col) %}
{% if not loop.last %}
{% do concat_cols.append("'_'") %}
{% endif %}
{% endfor %}
{{ dbt.concat(concat_cols) }} as partition_by_col,
{% endif %}
{% endif %}
{{ lower_bound_column }} as lower_bound,
{{ upper_bound_column }} as upper_bound,
Expand Down
Loading