Skip to content

Commit c838953

Browse files
author
Claire Carroll
authored
Merge pull request #275 from fishtown-analytics/fix/bq-schema-pattern
Handle schema pattern on BQ
2 parents 6a9aa6f + 9520785 commit c838953

File tree

7 files changed

+85
-11
lines changed

7 files changed

+85
-11
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
# dbt-utils v0.6.1
2+
3+
## Fixes
4+
- Fix the logic in `get_tables_by_pattern_sql` for matching a schema pattern on BigQuery ([#275](https://github.com/fishtown-analytics/dbt-utils/pull/275/))
5+
16
# dbt-utils v0.6.0
27

38
## Breaking changes
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
user_id,event
2+
5,play
3+
6,pause
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
user_id,event
2+
1,play
3+
2,pause
4+
3,play
5+
4,pause
6+
5,play
7+
6,pause

integration_tests/dbt_project.yml

+4
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,7 @@ seeds:
4646
num_buckets: integer
4747
min_value: float
4848
max_value: float
49+
50+
sql:
51+
data_events_20180103:
52+
+schema: events

integration_tests/models/sql/schema.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ models:
5050
values:
5151
- '5'
5252

53-
- name: test_get_tables_by_prefix_and_union
53+
- name: test_get_relations_by_prefix_and_union
5454
columns:
5555
- name: event
5656
tests:
@@ -117,3 +117,8 @@ models:
117117
tests:
118118
- dbt_utils.equality:
119119
compare_model: ref('data_union_expected')
120+
121+
- name: test_get_relations_by_pattern
122+
tests:
123+
- dbt_utils.equality:
124+
compare_model: ref('data_union_events_expected')
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
{{ config(materialized = 'table') }}
22

3-
{% set relations = dbt_utils.get_relations_by_pattern(target.schema, 'data_events_%') %}
4-
{{ dbt_utils.union_relations(relations) }}
3+
{% set relations = dbt_utils.get_relations_by_pattern(target.schema ~ '%', 'data_events_%') %}
4+
5+
with unioned as (
6+
7+
{{ dbt_utils.union_relations(relations) }}
8+
9+
)
10+
11+
select
12+
13+
user_id,
14+
event
15+
16+
from unioned

macros/sql/get_tables_by_pattern_sql.sql

+46-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
{% macro default__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}
77

8-
select distinct
8+
select distinct
99
table_schema as "table_schema", table_name as "table_name"
1010
from {{database}}.information_schema.tables
1111
where table_schema ilike '{{ schema_pattern }}'
@@ -16,13 +16,51 @@
1616

1717

1818
{% macro bigquery__get_tables_by_pattern_sql(schema_pattern, table_pattern, exclude='', database=target.database) %}
19-
20-
select distinct
21-
table_schema, table_name
2219

23-
from {{adapter.quote(database)}}.{{schema}}.INFORMATION_SCHEMA.TABLES
24-
where table_schema = '{{schema_pattern}}'
25-
and lower(table_name) like lower ('{{table_pattern}}')
26-
and lower(table_name) not like lower ('{{exclude}}')
20+
{% if '%' in schema_pattern %}
21+
{% set schemata=dbt_utils._bigquery__get_matching_schemata(schema_pattern, database) %}
22+
{% else %}
23+
{% set schemata=[schema_pattern] %}
24+
{% endif %}
25+
26+
{% set sql %}
27+
{% for schema in schemata %}
28+
select distinct
29+
table_schema, table_name
30+
31+
from {{ adapter.quote(database) }}.{{ schema }}.INFORMATION_SCHEMA.TABLES
32+
where lower(table_name) like lower ('{{ table_pattern }}')
33+
and lower(table_name) not like lower ('{{ exclude }}')
34+
35+
{% if not loop.last %} union all {% endif %}
36+
37+
{% endfor %}
38+
{% endset %}
39+
40+
{{ return(sql) }}
41+
42+
{% endmacro %}
43+
44+
45+
{% macro _bigquery__get_matching_schemata(schema_pattern, database) %}
46+
{% if execute %}
47+
48+
{% set sql %}
49+
select schema_name from {{ adapter.quote(database) }}.INFORMATION_SCHEMA.SCHEMATA
50+
where lower(schema_name) like lower('{{ schema_pattern }}')
51+
{% endset %}
52+
53+
{% set results=run_query(sql) %}
54+
55+
{% set schemata=results.columns['schema_name'].values() %}
56+
57+
{{ return(schemata) }}
58+
59+
{% else %}
60+
61+
{{ return([]) }}
62+
63+
{% endif %}
64+
2765

2866
{% endmacro %}

0 commit comments

Comments
 (0)