Skip to content

Commit f368cec

Browse files
Feature/safe divide (#697)
* add safe_divide documentation * add safe_divide macro * add integration test for safe_divide macro * moved macro and documentation to new SQL generator section Co-authored-by: Grace Goheen <graciegoheen@gmail.com>
1 parent 7eab492 commit f368cec

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

README.md

+16
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ Check [dbt Hub](https://hub.getdbt.com/dbt-labs/dbt_utils/latest/) for the lates
4545
- [generate_series](#generate_series-source)
4646
- [surrogate_key](#surrogate_key-source)
4747
- [safe_add](#safe_add-source)
48+
- [safe_divide](#safe_divide-source)
4849
- [pivot](#pivot-source)
4950
- [unpivot](#unpivot-source)
5051
- [width_bucket](#width_bucket-source)
@@ -1024,6 +1025,21 @@ Implements a cross-database way to sum nullable fields using the fields specifie
10241025
{{ dbt_utils.safe_add('field_a', 'field_b'[,...]) }}
10251026
```
10261027

1028+
#### safe_divide ([source](macros/cross_db_utils/safe_divide.sql))
1029+
1030+
This macro performs division but returns null if the denominator is 0.
1031+
1032+
**Args:**
1033+
1034+
- `numerator` (required): The number you want to divide.
1035+
- `denominator` (required): The number you want to divide by.
1036+
1037+
**Usage:**
1038+
1039+
```
1040+
{{ dbt_utils.safe_divide('numerator', 'denominator') }}
1041+
```
1042+
10271043
#### pivot ([source](macros/sql/pivot.sql))
10281044

10291045
This macro pivots values from rows to columns.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
numerator,denominator,output
2+
6,0,
3+
10,5,2
4+
,,
5+
,0,
6+
17,,
7+
0,,
8+
,9,
9+
0,5,0

integration_tests/models/sql/schema.yml

+6
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ models:
9191
actual: actual
9292
expected: expected
9393

94+
- name: test_safe_divide
95+
tests:
96+
- assert_equal:
97+
actual: actual
98+
expected: expected
99+
94100
- name: test_pivot
95101
tests:
96102
- dbt_utils.equality:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
with data as (
3+
4+
select * from {{ ref('data_safe_divide') }}
5+
6+
)
7+
8+
select
9+
{{ dbt_utils.safe_divide('numerator', 'denominator') }} as actual,
10+
output as expected
11+
12+
from data

macros/sql/safe_divide.sql

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{% macro safe_divide(numerator, denominator) -%}
2+
{{ return(adapter.dispatch('safe_divide', 'dbt_utils')(numerator, denominator)) }}
3+
{%- endmacro %}
4+
5+
{% macro default__safe_divide(numerator, denominator) %}
6+
{{ numerator }} / nullif( {{ denominator }}, 0)
7+
{% endmacro %}

0 commit comments

Comments
 (0)