Skip to content
Open
4 changes: 4 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,5 +36,9 @@ Note: dbt-expectations currently does not support database adapters other than t
- Postgres
- Snowflake
- BigQuery
- DuckDB
- Spark (experimental)
- Trino
- Teradata

### Additional Context
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,34 @@ This package supports:
* DuckDB
* Spark (experimental)
* Trino
* Teradata

For latest release, see [https://github.com/metaplane/dbt-expectations/releases](https://github.com/metaplane/dbt-expectations/releases)

### Dependencies

This package includes a reference to [`dbt-date`](https://github.com/godatadriven/dbt-date), so there's no need to also import `dbt-date` in your local project.

#### For Teradata adapter:
There is dependency on dbt-labs/dbt_utils and Teradata/teradata_utils, so user need to add the dependency in packages.yml and create search order config in dbt_project.yml as mentioned below:

`packages.yml`
```yaml
packages:
- package: dbt-labs/dbt_utils
version: 1.3.0
- package: Teradata/teradata_utils
version: 1.3.0
```

`dbt_project.yml`
```yaml
- macro_namespace: dbt_date
search_order: ['teradata_utils', 'dbt_utils', 'dbt_date']
- macro_namespace: dbt_utils
search_order: ['teradata_utils', 'dbt_utils']
```

### Variables

The following variables need to be defined in your `dbt_project.yml` file:
Expand Down
66 changes: 66 additions & 0 deletions integration_tests/models/schema_tests/data_test.sql
Original file line number Diff line number Diff line change
@@ -1,3 +1,68 @@
{% if target.type == 'teradata' %}
{# Teradata requires explicit CAST and FROM clause for literal selects #}
select
1 as idx,
CAST('2020-10-21' AS DATE) as date_col,
CAST(0 AS FLOAT) as col_numeric_a,
CAST(1 AS FLOAT) as col_numeric_b,
CAST('a' AS VARCHAR(10)) as col_string_a,
CAST('b' AS VARCHAR(10)) as col_string_b,
CAST(NULL AS VARCHAR(100)) as col_null,
CAST(NULL AS VARCHAR(100)) as col_null_2,
CAST(1.0 AS FLOAT) as col_numeric_a_plus_b,
2 as idx_multiplied_by_2,
-2 as idx_multiplied_by_minus_2
from SYS_CALENDAR.CALENDAR where day_of_calendar = 1

union all

select
2 as idx,
CAST('2020-10-22' AS DATE) as date_col,
CAST(1 AS FLOAT) as col_numeric_a,
CAST(0 AS FLOAT) as col_numeric_b,
CAST('b' AS VARCHAR(10)) as col_string_a,
CAST('ab' AS VARCHAR(10)) as col_string_b,
CAST(NULL AS VARCHAR(100)) as col_null,
CAST(NULL AS VARCHAR(100)) as col_null_2,
CAST(1.0 AS FLOAT) as col_numeric_a_plus_b,
4 as idx_multiplied_by_2,
-4 as idx_multiplied_by_minus_2
from SYS_CALENDAR.CALENDAR where day_of_calendar = 1

union all

select
3 as idx,
CAST('2020-10-23' AS DATE) as date_col,
CAST(0.5 AS FLOAT) as col_numeric_a,
CAST(0.5 AS FLOAT) as col_numeric_b,
CAST('c' AS VARCHAR(10)) as col_string_a,
CAST('abc' AS VARCHAR(10)) as col_string_b,
CAST(NULL AS VARCHAR(100)) as col_null,
CAST(NULL AS VARCHAR(100)) as col_null_2,
CAST(1.0 AS FLOAT) as col_numeric_a_plus_b,
6 as idx_multiplied_by_2,
-6 as idx_multiplied_by_minus_2
from SYS_CALENDAR.CALENDAR where day_of_calendar = 1

union all

select
4 as idx,
CAST('2020-10-23' AS DATE) as date_col,
CAST(0.5 AS FLOAT) as col_numeric_a,
CAST(0.5 AS FLOAT) as col_numeric_b,
CAST('c' AS VARCHAR(10)) as col_string_a,
CAST('abcd' AS VARCHAR(10)) as col_string_b,
CAST(NULL AS VARCHAR(100)) as col_null,
CAST(NULL AS VARCHAR(100)) as col_null_2,
CAST(1.0 AS FLOAT) as col_numeric_a_plus_b,
8 as idx_multiplied_by_2,
-8 as idx_multiplied_by_minus_2
from SYS_CALENDAR.CALENDAR where day_of_calendar = 1
{% else %}
{# Other adapters support simpler literal selects #}
select
1 as idx,
'2020-10-21' as date_col,
Expand Down Expand Up @@ -55,3 +120,4 @@ select
1.0 as col_numeric_a_plus_b,
8 as idx_multiplied_by_2,
-8 as idx_multiplied_by_minus_2
{% endif %}
38 changes: 38 additions & 0 deletions integration_tests/models/schema_tests/data_test_factored.sql
Original file line number Diff line number Diff line change
@@ -1,3 +1,40 @@
{% if target.type == 'teradata' %}
{# Teradata requires explicit column list when combining SELECT * with additional columns #}
select
sb1.idx,
sb1.date_col,
sb1.col_numeric_a,
sb1.col_numeric_b,
sb1.col_string_a,
sb1.col_string_b,
sb1.col_null,
sb1.col_null_2,
sb1.col_numeric_a_plus_b,
sb1.idx_multiplied_by_2,
sb1.idx_multiplied_by_minus_2,
1 as factor
from
{{ ref("data_test") }} as sb1

union all

select
sb.idx,
sb.date_col,
sb.col_numeric_a,
sb.col_numeric_b,
sb.col_string_a,
sb.col_string_b,
sb.col_null,
sb.col_null_2,
sb.col_numeric_a_plus_b,
sb.idx_multiplied_by_2,
sb.idx_multiplied_by_minus_2,
2 as factor
from
{{ ref("data_test") }} as sb
{% else %}
{# Other adapters support SELECT * with additional columns #}
select
1 as factor,
*
Expand All @@ -11,3 +48,4 @@ select
*
from
{{ ref("data_test") }}
{% endif %}
38 changes: 38 additions & 0 deletions integration_tests/models/schema_tests/data_text.sql
Original file line number Diff line number Diff line change
@@ -1,25 +1,63 @@
{% if target.type == 'teradata' %}
{# Teradata requires FROM clause for literal selects #}
select
'ab@gmail.com' as email_address,
'91001' as postal_code_5,
'91001-123' as postal_code_5_3
from SYS_CALENDAR.CALENDAR where day_of_calendar = 1


union all

select
'ab@mail.com' as email_address,
'90210' as postal_code_5,
'90210-123' as postal_code_5_3
from SYS_CALENDAR.CALENDAR where day_of_calendar = 1


union all

select
'abc@gmail.com' as email_address,
'90026' as postal_code_5,
'90026-123' as postal_code_5_3
from SYS_CALENDAR.CALENDAR where day_of_calendar = 1


union all

select
'abc.com@gmail.com' as email_address,
'09876' as postal_code_5,
'09876-023' as postal_code_5_3
from SYS_CALENDAR.CALENDAR where day_of_calendar = 1
{% else %}
{# Other adapters support literal selects without FROM clause #}
select
'ab@gmail.com' as email_address,
'91001' as postal_code_5,
'91001-123' as postal_code_5_3

union all

select
'ab@mail.com' as email_address,
'90210' as postal_code_5,
'90210-123' as postal_code_5_3

union all

select
'abc@gmail.com' as email_address,
'90026' as postal_code_5,
'90026-123' as postal_code_5_3

union all

select
'abc.com@gmail.com' as email_address,
'09876' as postal_code_5,
'09876-023' as postal_code_5_3
{% endif %}

2 changes: 2 additions & 0 deletions integration_tests/models/schema_tests/schema.yml
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,8 @@ models:
sigma_threshold: 6
take_logs: false
severity: warn
config:
enabled: "{{ target.type != 'teradata' }}"


- name: data_test
Expand Down
5 changes: 5 additions & 0 deletions integration_tests/models/schema_tests/timeseries_data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,12 @@ add_row_values as (
add_logs as (

select
{% if target.type == 'teradata' %}
{# Teradata: Explicit column list to avoid SELECT * issues #}
add_row_values.*,
{% else %}
*,
{% endif %}
{{ dbt_expectations.log_natural('nullif(row_value, 0)') }} as row_value_log
from
add_row_values
Expand Down
13 changes: 13 additions & 0 deletions integration_tests/models/schema_tests/timeseries_data_extended.sql
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,15 @@ row_values as (
add_row_values as (

select
{% if target.type == 'teradata' %}

cast(cast(dates.date_day as date) as {{ dbt_expectations.type_datetime() }}) as date_day,
cast(row_values.generated_number as {{ dbt.type_float() }}) as row_value
{% else %}

cast(dates.date_day as {{ dbt_expectations.type_datetime() }}) as date_day,
cast(100 * abs({{ dbt_expectations.rand() }}) as {{ dbt.type_float() }}) as row_value
{% endif %}

from
dates
Expand All @@ -18,7 +25,13 @@ add_row_values as (
add_logs as (

select
{% if target.type == 'teradata' %}
{# Teradata: Explicit column list to avoid SELECT * issues #}
add_row_values.*,
{% else %}
{# Other adapters: SELECT * works fine #}
*,
{% endif %}
{{ dbt_expectations.log_natural('nullif(row_value, 0)') }} as row_value_log
from
add_row_values
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ add_row_values as (
add_logs as (

select
{% if target.type == 'teradata' %}
{# Teradata: Explicit column list to avoid SELECT * issues #}
add_row_values.*,
{% else %}
*,
{% endif %}
{{ dbt_expectations.log_natural('nullif(row_value, 0)') }} as row_value_log
from
add_row_values
Expand Down
5 changes: 5 additions & 0 deletions integration_tests/models/schema_tests/timeseries_hourly.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
{% if target.type == 'teradata' %}
{% set end_date = modules.datetime.datetime.today() %}
{% set start_date = (end_date - modules.datetime.timedelta(days=10)) %}
{% else %}
{% set end_date = modules.datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0) %}
{% set start_date = (end_date - modules.datetime.timedelta(days=10)) %}
{% endif %}

{{ dbt_date.get_base_dates(
start_date=start_date,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@ add_row_values as (
add_logs as (

select
{% if target.type == 'teradata' %}
{# Teradata: Explicit column list to avoid SELECT * issues #}
add_row_values.*,
{% else %}
*,
{% endif %}
{{ dbt_expectations.log_natural('nullif(row_value, 0)') }} as row_value_log
from
add_row_values
Expand Down
Loading
Loading