Skip to content

Upgrade schema.yml to v2 #91

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

Merged
merged 6 commits into from
Nov 21, 2018
Merged
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
74 changes: 49 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,58 +82,82 @@ Usage:
This schema test asserts the equality of two relations.

Usage:
```
model_name:
constraints:
dbt_utils.equality:
- ref('other_table_name')
```yaml
version: 2

models:
- name: model_name
tests:
- dbt_utils.equality:
compare_model: ref('other_table_name')

```

#### recency ([source](macros/schema_tests/recency.sql))
This schema test asserts that there is data in the referenced model at least as recent as the defined interval prior to the current timestamp.

Usage:
```
model_name:
constraints:
dbt_utils.recency:
- {field: created_at, datepart: day, interval: 1}
```yaml
version: 2

models:
- name: model_name
tests:
- dbt_utils.recency:
datepart: day
field: created_at
interval: 1
```

#### at_least_one ([source](macros/schema_tests/at_least_one.sql))
This schema test asserts if column has at least one value.

Usage:
```
model_name:
constraints:
dbt_utils.at_least_one:
- column_name
```yaml
version: 2

models:
- name: model_name
columns:
- name: col_name
tests:
- dbt_utils.at_least_one


```

#### not_constant ([source](macros/schema_tests/not_constant.sql))
This schema test asserts if column does not have same value in all rows.

Usage:
```
model_name:
constraints:
dbt_utils.not_constant:
- column_name
```yaml
version: 2

models:
- name: model_name
columns:
- name: column_name
tests:
- dbt_utils.not_constant

```

#### cardinality_equality ([source](macros/schema_tests/cardinality_equality.sql))
This schema test asserts if values in a given column have exactly the same cardinality as values from a different column in a different model.

Usage:
```
model_name:
constraints:
dbt_utils.cardinality_equality:
- {from: column_name, to: ref('other_model_name'), field: other_column_name}
```yaml
version: 2

models:
- name: model_name
columns:
- name: from_column
tests:
- dbt_utils.cardinality_equality:
field: other_column_name
to: ref('other_model_name')

```

---
Expand Down
4 changes: 3 additions & 1 deletion integration_tests/macros/tests.sql
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ select count(*) from {{ model }} where {{ actual }} != {{ expected }}

{% macro test_not_empty_string(model, arg) %}

select count(*) from {{ model }} where {{ arg }} = ''
{% set column_name = kwargs.get('column_name', kwargs.get('arg')) %}

select count(*) from {{ model }} where {{ column_name }} = ''

{% endmacro %}
102 changes: 56 additions & 46 deletions integration_tests/models/cross_db_utils/schema.yml
Original file line number Diff line number Diff line change
@@ -1,46 +1,56 @@

test_concat:
constraints:
assert_equal:
- { actual: actual, expected: expected }

test_current_timestamp:
constraints:
assert_equal:
- { actual: actual, expected: expected }

test_date_trunc:
constraints:
assert_equal:
- { actual: actual, expected: expected }

test_dateadd:
constraints:
assert_equal:
- { actual: actual, expected: expected }

test_datediff:
constraints:
assert_equal:
- { actual: actual, expected: expected }

test_hash:
constraints:
assert_equal:
- { actual: actual, expected: expected }

test_last_day:
constraints:
assert_equal:
- { actual: actual, expected: expected }

test_safe_cast:
constraints:
assert_equal:
- { actual: actual, expected: expected }

test_split_part:
constraints:
assert_equal:
- { actual: actual, expected: expected }

version: 2

models:
- name: test_concat
tests:
- assert_equal:
actual: actual
expected: expected

- name: test_current_timestamp
tests:
- assert_equal:
actual: actual
expected: expected

- name: test_date_trunc
tests:
- assert_equal:
actual: actual
expected: expected

- name: test_dateadd
tests:
- assert_equal:
actual: actual
expected: expected

- name: test_datediff
tests:
- assert_equal:
actual: actual
expected: expected

- name: test_hash
tests:
- assert_equal:
actual: actual
expected: expected

- name: test_last_day
tests:
- assert_equal:
actual: actual
expected: expected

- name: test_safe_cast
tests:
- assert_equal:
actual: actual
expected: expected

- name: test_split_part
tests:
- assert_equal:
actual: actual
expected: expected
11 changes: 6 additions & 5 deletions integration_tests/models/datetime/schema.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
version: 2


test_date_spine:
constraints:
dbt_utils.equality:
- ref('data_date_spine')
models:
- name: test_date_spine
tests:
- dbt_utils.equality:
compare_model: ref('data_date_spine')
11 changes: 7 additions & 4 deletions integration_tests/models/materializations/schema.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
test_insert_by_period:
constraints:
dbt_utils.equality:
- ref('expected_insert_by_period')
version: 2

models:
- name: test_insert_by_period
tests:
- dbt_utils.equality:
compare_model: ref('expected_insert_by_period')
58 changes: 29 additions & 29 deletions integration_tests/models/schema_tests/schema.yml
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@

data_test_not_constant:
constraints:
dbt_utils.not_constant:
- field


data_test_at_least_one:
constraints:
dbt_utils.at_least_one:
- field


test_recency:
constraints:
dbt_utils.recency:
- {field: today, datepart: day, interval: 1}


data_people:
constraints:
dbt_utils.equality:
- ref('data_people')


data_people:
constraints:
dbt_utils.cardinality_equality:
- {from: is_active, to: ref('data_people'), field: is_active}
version: 2

models:
- name: data_test_not_constant
columns:
- name: field
tests:
- dbt_utils.not_constant
- name: data_test_at_least_one
columns:
- name: field
tests:
- dbt_utils.at_least_one
- name: test_recency
tests:
- dbt_utils.recency:
datepart: day
field: today
interval: 1

- name: data_people
columns:
- name: is_active
tests:
- dbt_utils.cardinality_equality:
field: is_active
to: ref('data_people')
Loading