Skip to content

Commit 1ad0a86

Browse files
Feature/remove dbt date (#191)
* feature/remove-dbt-date * add week_end * update for snowflake * update yml * rename macros * formatting * update chagenlog, readme, versions * changelog * Apply suggestions from code review Co-authored-by: Jamie Rodriguez <[email protected]> --------- Co-authored-by: Jamie Rodriguez <[email protected]>
1 parent 7c343f9 commit 1ad0a86

16 files changed

+83
-37
lines changed

CHANGELOG.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
# dbt_zendesk version.version
1+
# dbt_zendesk v0.21.0
2+
3+
This release includes the following updates:
4+
5+
## Dependency Changes
6+
- Removed the package dependency on [calogica/dbt_date](https://github.com/calogica/dbt-date), which is no longer actively maintained. Replaced the following macros with `fivetran_*` equivalents that provide the same functionality and have been tested for compatibility: ([#191](https://github.com/fivetran/dbt_zendesk/pull/191))
7+
- `dbt_date.week_end``zendesk.fivetran_week_end`
8+
- `dbt_date.week_start``zendesk.fivetran_week_start`
29

310
## Documentation
411
- Added Quickstart model counts to README. ([#183](https://github.com/fivetran/dbt_zendesk/pull/183))

README.md

+1-4
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ Include the following zendesk package version in your `packages.yml` file:
6868
```yml
6969
packages:
7070
- package: fivetran/zendesk
71-
version: [">=0.20.0", "<0.21.0"]
71+
version: [">=0.21.0", "<0.22.0"]
7272
7373
```
7474
> **Note**: Do not include the Zendesk Support source package. The Zendesk Support transform package already has a dependency on the source in its own `packages.yml` file.
@@ -304,9 +304,6 @@ packages:
304304
305305
- package: dbt-labs/spark_utils
306306
version: [">=0.3.0", "<0.4.0"]
307-
308-
- package: calogica/dbt_date
309-
version: [">=0.9.0", "<1.0.0"]
310307
```
311308
## How is this package maintained and can I contribute?
312309
### Package Maintenance

dbt_project.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: 'zendesk'
2-
version: '0.20.0'
2+
version: '0.21.0'
33

44
config-version: 2
55
require-dbt-version: [">=1.3.0", "<2.0.0"]

integration_tests/dbt_project.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
config-version: 2
22

33
name: 'zendesk_integration_tests'
4-
version: '0.20.0'
4+
version: '0.21.0'
55

66
profile: 'integration_tests'
77

macros/fivetran_week_end.sql

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{%- macro fivetran_week_end(dt) -%}
2+
{{ return(adapter.dispatch('fivetran_week_end', 'zendesk') (dt)) }}
3+
{%- endmacro -%}
4+
5+
{%- macro default__fivetran_week_end(dt) -%}
6+
{{ dbt.last_day(dt, 'week') }}
7+
{%- endmacro %}
8+
9+
{%- macro snowflake__fivetran_week_end(dt) -%}
10+
cast({{ dbt.dateadd('day', 6, zendesk.fivetran_week_start(dt)) }} as date)
11+
{%- endmacro %}
12+
13+
{%- macro postgres__fivetran_week_end(dt) -%}
14+
cast({{ dbt.dateadd('day', 6, zendesk.fivetran_week_start(dt)) }} as date)
15+
{%- endmacro %}
16+
17+
{%- macro duckdb__fivetran_week_end(dt) -%}
18+
{{ return(zendesk.postgres__fivetran_week_end(dt)) }}
19+
{%- endmacro %}

macros/fivetran_week_start.sql

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{%- macro fivetran_week_start(dt) -%}
2+
{{ return(adapter.dispatch('fivetran_week_start', 'zendesk') (dt)) }}
3+
{%- endmacro -%}
4+
5+
{%- macro default__fivetran_week_start(dt) -%}
6+
cast({{ dbt.date_trunc('week', dt) }} as date)
7+
{%- endmacro %}
8+
9+
{%- macro snowflake__fivetran_week_start(dt) -%}
10+
-- Adjust week start to Sunday
11+
cast(
12+
case
13+
when dayofweekiso({{ dt }}) = 7 then {{ dt }} -- dayofweekiso returns 7 for Sunday
14+
else {{ dbt.dateadd("day", "-1 * dayofweekiso(" ~ dt ~ ")", dt) }}
15+
end
16+
as date)
17+
{%- endmacro %}
18+
19+
{%- macro postgres__fivetran_week_start(dt) -%}
20+
-- Sunday as week start date
21+
cast({{ dbt.dateadd('day', -1, dbt.date_trunc('week', dbt.dateadd('day', 1, dt))) }} as date)
22+
{%- endmacro %}
23+
24+
{%- macro duckdb__fivetran_week_start(dt) -%}
25+
{{ return(zendesk.postgres__fivetran_week_start(dt)) }}
26+
{%- endmacro %}

models/agent_work_time/int_zendesk__ticket_work_time_business.sql

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ with ticket_historical_status as (
5050
status_valid_starting_at,
5151
status_valid_ending_at,
5252
({{ dbt.datediff(
53-
"cast(" ~ dbt_date.week_start('ticket_status_crossed_with_schedule.status_schedule_start','UTC') ~ "as " ~ dbt.type_timestamp() ~ ")",
53+
"cast(" ~ zendesk.fivetran_week_start('ticket_status_crossed_with_schedule.status_schedule_start') ~ "as " ~ dbt.type_timestamp() ~ ")",
5454
"cast(ticket_status_crossed_with_schedule.status_schedule_start as " ~ dbt.type_timestamp() ~ ")",
5555
'second') }} /60
5656
) as start_time_in_minutes_from_week,
@@ -59,7 +59,7 @@ with ticket_historical_status as (
5959
'ticket_status_crossed_with_schedule.status_schedule_end',
6060
'second') }} /60
6161
) as raw_delta_in_minutes,
62-
{{ dbt_date.week_start('ticket_status_crossed_with_schedule.status_schedule_start','UTC') }} as start_week_date
62+
{{ zendesk.fivetran_week_start('ticket_status_crossed_with_schedule.status_schedule_start') }} as start_week_date
6363

6464
from ticket_status_crossed_with_schedule
6565
{{ dbt_utils.group_by(n=8) }}

models/intermediate/int_zendesk__schedule_holiday.sql

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ with schedule as (
1616
schedule_id,
1717
cast({{ dbt.date_trunc('day', 'holiday_start_date_at') }} as {{ dbt.type_timestamp() }}) as holiday_valid_from,
1818
cast({{ dbt.date_trunc('day', 'holiday_end_date_at') }} as {{ dbt.type_timestamp() }}) as holiday_valid_until,
19-
cast({{ dbt_date.week_start('holiday_start_date_at','UTC') }} as {{ dbt.type_timestamp() }}) as holiday_starting_sunday,
20-
cast({{ dbt_date.week_start(dbt.dateadd('week', 1, 'holiday_end_date_at'),'UTC') }} as {{ dbt.type_timestamp() }}) as holiday_ending_sunday,
19+
cast({{ zendesk.fivetran_week_start('holiday_start_date_at') }} as {{ dbt.type_timestamp() }}) as holiday_starting_sunday,
20+
cast({{ zendesk.fivetran_week_start(dbt.dateadd('week', 1, 'holiday_end_date_at')) }} as {{ dbt.type_timestamp() }}) as holiday_ending_sunday,
2121
-- Since the spine is based on weeks, holidays that span multiple weeks need to be broken up in to weeks. First step is to find those holidays.
2222
{{ dbt.datediff('holiday_start_date_at', 'holiday_end_date_at', 'week') }} + 1 as holiday_weeks_spanned
2323
from schedule_holiday

models/intermediate/int_zendesk__schedule_timezones.sql

+3-3
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,9 @@ with split_timezones as (
277277
end_time_utc,
278278
schedule_valid_from,
279279
schedule_valid_until,
280-
-- use dbt_date.week_start to ensure we truncate to Sunday
281-
cast({{ dbt_date.week_start('schedule_valid_from','UTC') }} as {{ dbt.type_timestamp() }}) as schedule_starting_sunday,
282-
cast({{ dbt_date.week_start('schedule_valid_until','UTC') }} as {{ dbt.type_timestamp() }}) as schedule_ending_sunday,
280+
-- use zendesk.fivetran_week_start to ensure we truncate to Sunday
281+
cast({{ zendesk.fivetran_week_start('schedule_valid_from') }} as {{ dbt.type_timestamp() }}) as schedule_starting_sunday,
282+
cast({{ zendesk.fivetran_week_start('schedule_valid_until') }} as {{ dbt.type_timestamp() }}) as schedule_ending_sunday,
283283
-- Check if the start fo the schedule was from a schedule or timezone change for tracking downstream.
284284
case when schedule_valid_from = timezone_valid_from
285285
then 'timezone'

models/reply_times/int_zendesk__ticket_first_reply_time_business.sql

+2-2
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ with ticket_reply_times as (
4040
min(first_reply_time.agent_responded_at) as agent_responded_at,
4141

4242
({{ dbt.datediff(
43-
"cast(" ~ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') ~ "as " ~ dbt.type_timestamp() ~ ")",
43+
"cast(" ~ zendesk.fivetran_week_start('ticket_schedules.schedule_created_at') ~ "as " ~ dbt.type_timestamp() ~ ")",
4444
"cast(ticket_schedules.schedule_created_at as " ~ dbt.type_timestamp() ~ ")",
4545
'second') }} /60
4646
) as start_time_in_minutes_from_week,
@@ -51,7 +51,7 @@ with ticket_reply_times as (
5151
'least(ticket_schedules.schedule_invalidated_at, min(first_reply_time.agent_responded_at))',
5252
'second') }}/60
5353
)) as raw_delta_in_minutes,
54-
{{ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') }} as start_week_date
54+
{{ zendesk.fivetran_week_start('ticket_schedules.schedule_created_at') }} as start_week_date
5555

5656
from first_reply_time
5757
join ticket_schedules

models/resolution_times/int_zendesk__ticket_first_resolution_time_business.sql

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ with ticket_resolution_times_calendar as (
2828
min(ticket_resolution_times_calendar.first_solved_at) as first_solved_at,
2929

3030
({{ dbt.datediff(
31-
"cast(" ~ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') ~ "as " ~ dbt.type_timestamp() ~ ")",
31+
"cast(" ~ zendesk.fivetran_week_start('ticket_schedules.schedule_created_at') ~ "as " ~ dbt.type_timestamp() ~ ")",
3232
"cast(ticket_schedules.schedule_created_at as " ~ dbt.type_timestamp() ~ ")",
3333
'second') }} /60
3434
) as start_time_in_minutes_from_week,
@@ -39,7 +39,7 @@ with ticket_resolution_times_calendar as (
3939
'least(ticket_schedules.schedule_invalidated_at, min(ticket_resolution_times_calendar.first_solved_at))',
4040
'second') }}/60
4141
)) as raw_delta_in_minutes,
42-
{{ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') }} as start_week_date
42+
{{ zendesk.fivetran_week_start('ticket_schedules.schedule_created_at') }} as start_week_date
4343

4444
from ticket_resolution_times_calendar
4545
join ticket_schedules

models/resolution_times/int_zendesk__ticket_full_resolution_time_business.sql

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ with ticket_resolution_times_calendar as (
2727
-- bringing this in the determine which schedule (Daylight Savings vs Standard time) to use
2828
min(ticket_resolution_times_calendar.last_solved_at) as last_solved_at,
2929
({{ dbt.datediff(
30-
"cast(" ~ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') ~ "as " ~ dbt.type_timestamp() ~ ")",
30+
"cast(" ~ zendesk.fivetran_week_start('ticket_schedules.schedule_created_at') ~ "as " ~ dbt.type_timestamp() ~ ")",
3131
"cast(ticket_schedules.schedule_created_at as " ~ dbt.type_timestamp() ~ ")",
3232
'second') }} /60
3333
) as start_time_in_minutes_from_week,
@@ -38,7 +38,7 @@ with ticket_resolution_times_calendar as (
3838
'least(ticket_schedules.schedule_invalidated_at, min(ticket_resolution_times_calendar.last_solved_at))',
3939
'second') }}/60
4040
)) as raw_delta_in_minutes,
41-
{{ dbt_date.week_start('ticket_schedules.schedule_created_at','UTC') }} as start_week_date
41+
{{ zendesk.fivetran_week_start('ticket_schedules.schedule_created_at') }} as start_week_date
4242

4343
from ticket_resolution_times_calendar
4444
join ticket_schedules

models/sla_policy/agent_work_time/int_zendesk__agent_work_time_business_hours.sql

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ with agent_work_time_filtered_statuses as (
6262
status_valid_starting_at,
6363
status_valid_ending_at,
6464
({{ dbt.datediff(
65-
"cast(" ~ dbt_date.week_start('ticket_status_crossed_with_schedule.valid_starting_at','UTC') ~ "as " ~ dbt.type_timestamp() ~ ")",
65+
"cast(" ~ zendesk.fivetran_week_start('ticket_status_crossed_with_schedule.valid_starting_at') ~ "as " ~ dbt.type_timestamp() ~ ")",
6666
"cast(ticket_status_crossed_with_schedule.valid_starting_at as " ~ dbt.type_timestamp() ~ ")",
6767
'second') }} /60
6868
) as valid_starting_at_in_minutes_from_week,
@@ -71,7 +71,7 @@ with agent_work_time_filtered_statuses as (
7171
'ticket_status_crossed_with_schedule.valid_ending_at',
7272
'second') }} /60
7373
) as raw_delta_in_minutes,
74-
{{ dbt_date.week_start('ticket_status_crossed_with_schedule.valid_starting_at','UTC') }} as start_week_date
74+
{{ zendesk.fivetran_week_start('ticket_status_crossed_with_schedule.valid_starting_at') }} as start_week_date
7575

7676
from ticket_status_crossed_with_schedule
7777
{{ dbt_utils.group_by(n=11) }}
@@ -187,7 +187,7 @@ with agent_work_time_filtered_statuses as (
187187
{{ fivetran_utils.timestamp_add(
188188
"minute",
189189
"cast(((7*24*60) * week_number) + breach_minutes_from_week as " ~ dbt.type_int() ~ " )",
190-
"cast(" ~ dbt_date.week_start('valid_starting_at','UTC') ~ " as " ~ dbt.type_timestamp() ~ " )"
190+
"cast(" ~ zendesk.fivetran_week_start('valid_starting_at') ~ " as " ~ dbt.type_timestamp() ~ " )"
191191
) }} as sla_breach_at
192192
from intercepted_periods_agent_filtered
193193
)

models/sla_policy/reply_time/int_zendesk__reply_time_business_hours.sql

+7-7
Original file line numberDiff line numberDiff line change
@@ -66,12 +66,12 @@ with ticket_schedules as (
6666
sla_policy_applied.*,
6767
ticket_schedules.schedule_id,
6868
({{ dbt.datediff(
69-
"cast(" ~ dbt_date.week_start('sla_policy_applied.sla_applied_at','UTC') ~ "as " ~ dbt.type_timestamp() ~ ")",
69+
"cast(" ~ zendesk.fivetran_week_start('sla_policy_applied.sla_applied_at') ~ "as " ~ dbt.type_timestamp() ~ ")",
7070
"cast(sla_policy_applied.sla_applied_at as " ~ dbt.type_timestamp() ~ ")",
7171
'second') }} /60
7272
) as start_time_in_minutes_from_week,
7373
schedule_business_hours.total_schedule_weekly_business_minutes,
74-
{{ dbt_date.week_start('sla_policy_applied.sla_applied_at','UTC') }} as start_week_date
74+
{{ zendesk.fivetran_week_start('sla_policy_applied.sla_applied_at') }} as start_week_date
7575

7676
from sla_policy_applied
7777
left join ticket_schedules on sla_policy_applied.ticket_id = ticket_schedules.ticket_id
@@ -183,20 +183,20 @@ with ticket_schedules as (
183183
select
184184
*,
185185
schedule_end_time + remaining_minutes as breached_at_minutes,
186-
{{ dbt_date.week_start('sla_applied_at','UTC') }} as starting_point,
186+
{{ zendesk.fivetran_week_start('sla_applied_at') }} as starting_point,
187187
{{ fivetran_utils.timestamp_add(
188188
"minute",
189189
"cast(((7*24*60) * week_number) + (schedule_end_time + remaining_minutes) as " ~ dbt.type_int() ~ " )",
190-
"cast(" ~ dbt_date.week_start('sla_applied_at','UTC') ~ " as " ~ dbt.type_timestamp() ~ ")" ) }} as sla_breach_at,
190+
"cast(" ~ zendesk.fivetran_week_start('sla_applied_at') ~ " as " ~ dbt.type_timestamp() ~ ")" ) }} as sla_breach_at,
191191
{{ fivetran_utils.timestamp_add(
192192
"minute",
193193
"cast(((7*24*60) * week_number) + (schedule_start_time) as " ~ dbt.type_int() ~ " )",
194-
"cast(" ~ dbt_date.week_start('sla_applied_at','UTC') ~ " as " ~ dbt.type_timestamp() ~ ")" ) }} as sla_schedule_start_at,
194+
"cast(" ~ zendesk.fivetran_week_start('sla_applied_at') ~ " as " ~ dbt.type_timestamp() ~ ")" ) }} as sla_schedule_start_at,
195195
{{ fivetran_utils.timestamp_add(
196196
"minute",
197197
"cast(((7*24*60) * week_number) + (schedule_end_time) as " ~ dbt.type_int() ~ " )",
198-
"cast(" ~ dbt_date.week_start('sla_applied_at','UTC') ~ " as " ~ dbt.type_timestamp() ~ ")" ) }} as sla_schedule_end_at,
199-
{{ dbt_date.week_end("sla_applied_at", tz="America/UTC") }} as week_end_date
198+
"cast(" ~ zendesk.fivetran_week_start('sla_applied_at') ~ " as " ~ dbt.type_timestamp() ~ ")" ) }} as sla_schedule_end_at,
199+
{{ zendesk.fivetran_week_end("sla_applied_at") }} as week_end_date
200200
from intercepted_periods_with_breach_flag
201201

202202
), reply_time_business_hours_sla as (

models/sla_policy/requester_wait_time/int_zendesk__requester_wait_time_business_hours.sql

+3-3
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ with requester_wait_time_filtered_statuses as (
6262
status_valid_starting_at,
6363
status_valid_ending_at,
6464
({{ dbt.datediff(
65-
"cast(" ~ dbt_date.week_start('ticket_status_crossed_with_schedule.valid_starting_at','UTC') ~ "as " ~ dbt.type_timestamp() ~ ")",
65+
"cast(" ~ zendesk.fivetran_week_start('ticket_status_crossed_with_schedule.valid_starting_at') ~ "as " ~ dbt.type_timestamp() ~ ")",
6666
"cast(ticket_status_crossed_with_schedule.valid_starting_at as " ~ dbt.type_timestamp() ~ ")",
6767
'second') }} /60
6868
) as valid_starting_at_in_minutes_from_week,
@@ -71,7 +71,7 @@ with requester_wait_time_filtered_statuses as (
7171
'ticket_status_crossed_with_schedule.valid_ending_at',
7272
'second') }} /60
7373
) as raw_delta_in_minutes,
74-
{{ dbt_date.week_start('ticket_status_crossed_with_schedule.valid_starting_at','UTC') }} as start_week_date
74+
{{ zendesk.fivetran_week_start('ticket_status_crossed_with_schedule.valid_starting_at') }} as start_week_date
7575

7676
from ticket_status_crossed_with_schedule
7777
{{ dbt_utils.group_by(n=11) }}
@@ -187,7 +187,7 @@ with requester_wait_time_filtered_statuses as (
187187
{{ fivetran_utils.timestamp_add(
188188
"minute",
189189
"cast(((7*24*60) * week_number) + breach_minutes_from_week as " ~ dbt.type_int() ~ " )",
190-
"cast(" ~ dbt_date.week_start('valid_starting_at','UTC') ~ " as " ~ dbt.type_timestamp() ~ " )"
190+
"cast(" ~ zendesk.fivetran_week_start('valid_starting_at') ~ " as " ~ dbt.type_timestamp() ~ " )"
191191
) }} as sla_breach_at
192192
from intercepted_periods_agent_filtered
193193

packages.yml

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
11
packages:
22
- package: fivetran/zendesk_source
3-
version: [">=0.15.0", "<0.16.0"]
4-
5-
- package: calogica/dbt_date
6-
version: [">=0.9.0", "<1.0.0"]
3+
version: [">=0.15.0", "<0.16.0"]

0 commit comments

Comments
 (0)