Skip to content

Commit 0d83e02

Browse files
fivetran-data-model-botfivetran-catfritzfivetran-joemarkiewiczgithub-actions[bot]
authored
Consolidate source + remove tests (#211)
* Consolidate dbt source into transform * Test/empty actor (#206) * Update packages.yml * Update ticket_chat_event_data.csv * pr updates * tmp model fix * tmp fixes and readme change * Generate dbt docs via GitHub Actions * Update dbt_project.yml * Generate dbt docs via GitHub Actions * Update CHANGELOG.md Co-authored-by: fivetran-catfritz <[email protected]> --------- Co-authored-by: fivetran-catfritz <[email protected]> Co-authored-by: Joe Markiewicz <[email protected]> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
1 parent 1a57d7f commit 0d83e02

File tree

83 files changed

+2903
-83
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+2903
-83
lines changed

CHANGELOG.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
1+
# dbt_zendesk v1.0.0
2+
3+
[PR #211](https://github.com/fivetran/dbt_zendesk/pull/211) includes the following updates:
4+
5+
## Breaking Changes
6+
7+
### Source Package Consolidation
8+
- Removed the dependency on the `fivetran/zendesk_source` package.
9+
- All functionality from the source package has been merged into this transformation package for improved maintainability and clarity.
10+
- If you reference `fivetran/zendesk_source` in your `packages.yml`, you must remove this dependency to avoid conflicts.
11+
- Any source overrides referencing the `fivetran/zendesk_source` package will also need to be removed or updated to reference this package.
12+
- Update any zendesk_source-scoped variables to be scoped to only under this package. See the [README](https://github.com/fivetran/dbt_zendesk/blob/main/README.md) for how to configure the build schema of staging models.
13+
- As part of the consolidation, vars are no longer used to reference staging models, and only sources are represented by vars. Staging models are now referenced directly with `ref()` in downstream models.
14+
15+
### dbt Fusion Compatibility Updates
16+
- Updated package to maintain compatibility with dbt-core versions both before and after v1.10.6, which introduced a breaking change to multi-argument test syntax (e.g., `unique_combination_of_columns`).
17+
- Temporarily removed unsupported tests to avoid errors and ensure smoother upgrades across different dbt-core versions. These tests will be reintroduced once a safe migration path is available.
18+
- Removed all `dbt_utils.unique_combination_of_columns` tests.
19+
- Moved `loaded_at_field: _fivetran_synced` under the `config:` block in `src_zendesk.yml`.
20+
121
# dbt_zendesk v0.25.0
222

323
## Schema/Data Changes

README.md

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Zendesk Support Modeling dbt Package ([Docs](https://fivetran.github.io/dbt_zendesk/))
1+
# Zendesk Support dbt Package ([Docs](https://fivetran.github.io/dbt_zendesk/))
22

33
<p align="left">
44
<a alt="License"
@@ -16,7 +16,7 @@
1616
</p>
1717

1818
## What does this dbt package do?
19-
- Produces modeled tables that leverage Zendesk Support data from [Fivetran's connector](https://fivetran.com/docs/applications/zendesk) in the format described by [this ERD](https://fivetran.com/docs/applications/zendesk#schemainformation) and build off the output of our [zendesk source package](https://github.com/fivetran/dbt_zendesk_source).
19+
- Produces modeled tables that leverage Zendesk Support data from [Fivetran's connector](https://fivetran.com/docs/applications/zendesk) in the format described by [this ERD](https://fivetran.com/docs/applications/zendesk#schemainformation).
2020
- Enables you to better understand the performance of your Support team. It calculates metrics focused on response times, resolution times, and work times for you to analyze. It performs the following actions:
2121
- Creates an enriched ticket model with relevant resolution, response time, and other metrics
2222
- Produces a historical ticket field history model to see velocity of your tickets over time
@@ -68,9 +68,9 @@ Include the following zendesk package version in your `packages.yml` file:
6868
```yml
6969
packages:
7070
- package: fivetran/zendesk
71-
version: [">=0.25.0", "<0.26.0"]
71+
version: [">=1.0.0", "<1.1.0"]
7272
```
73-
> **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.
73+
> All required sources and staging models are now bundled into this transformation package. Do not include `fivetran/zendesk_source` in your `packages.yml` since this package has been deprecated.
7474

7575
### Step 3: Define database and schema variables
7676
#### Option A: Single connection
@@ -93,7 +93,7 @@ To use this functionality, you will need to set the `zendesk_sources` variable i
9393
# dbt_project.yml
9494
9595
vars:
96-
zendesk_sources:
96+
zendesk:
9797
- database: connection_1_destination_name # Required
9898
schema: connection_1_schema_name # Rquired
9999
name: connection_1_source_name # Required only if following the step in the following subsection
@@ -109,7 +109,7 @@ vars:
109109
By default, this package defines one single-connection source, called `zendesk`, which will be disabled if you are unioning multiple connections. This means that your DAG will not include your Zendesk sources, though the package will run successfully.
110110

111111
To properly incorporate all of your Zendesk connections into your project's DAG:
112-
1. Define each of your sources in a `.yml` file in your project. Utilize the following template for the `source`-level configurations, and, **most importantly**, copy and paste the table and column-level definitions from the package's `src_zendesk.yml` [file](https://github.com/fivetran/dbt_zendesk_source/blob/main/models/src_zendesk.yml#L15-L351).
112+
1. Define each of your sources in a `.yml` file in your project. Utilize the following template for the `source`-level configurations, and, **most importantly**, copy and paste the table and column-level definitions from the package's `src_zendesk.yml` [file](https://github.com/fivetran/dbt_zendesk/blob/main/models/staging/src_zendesk.yml#L15-L351).
113113

114114
```yml
115115
# a .yml file in your root project
@@ -124,16 +124,16 @@ sources:
124124
warn_after: {count: 72, period: hour}
125125
error_after: {count: 168, period: hour}
126126
127-
tables: # copy and paste from zendesk_source/models/src_zendesk.yml - see https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/ for how to use anchors to only do so once
127+
tables: # copy and paste from zendesk/models/staging/src_zendesk.yml - see https://support.atlassian.com/bitbucket-cloud/docs/yaml-anchors/ for how to use anchors to only do so once
128128
```
129129

130-
> **Note**: If there are source tables you do not have (see [Step 4](https://github.com/fivetran/dbt_zendesk_source?tab=readme-ov-file#step-4-disable-models-for-non-existent-sources)), you may still include them, as long as you have set the right variables to `False`. Otherwise, you may remove them from your source definition.
130+
> **Note**: If there are source tables you do not have (see [Step 4](https://github.com/fivetran/dbt_zendesk?tab=readme-ov-file#step-4-disable-models-for-non-existent-sources)), you may still include them, as long as you have set the right variables to `False`. Otherwise, you may remove them from your source definition.
131131

132-
2. Set the `has_defined_sources` variable (scoped to the `zendesk_source` package) to `True`, like such:
132+
2. Set the `has_defined_sources` variable (scoped to the `zendesk` package) to `True`, like such:
133133
```yml
134134
# dbt_project.yml
135135
vars:
136-
zendesk_source:
136+
zendesk:
137137
has_defined_sources: true
138138
```
139139

@@ -221,7 +221,7 @@ Example usage:
221221
```yml
222222
# dbt_project.yml
223223
vars:
224-
zendesk_source:
224+
zendesk:
225225
internal_user_criteria: "lower(email) like '%@fivetran.com' or external_id = '12345' or name in ('Garrett', 'Alfredo')" # can reference any non-custom field in USER
226226
```
227227

@@ -265,22 +265,18 @@ By default this package will build the Zendesk Support staging models within a s
265265

266266
```yml
267267
models:
268-
zendesk:
269-
+schema: my_new_schema_name # leave blank for just the target_schema
270-
intermediate:
271-
+schema: my_new_schema_name # leave blank for just the target_schema
272-
sla_policy:
273-
+schema: my_new_schema_name # leave blank for just the target_schema
274-
ticket_history:
275-
+schema: my_new_schema_name # leave blank for just the target_schema
276-
zendesk_source:
277-
+schema: my_new_schema_name # leave blank for just the target_schema
268+
zendesk:
269+
+schema: my_new_schema_name # Leave +schema: blank to use the default target_schema.
270+
intermediate:
271+
+schema: my_new_schema_name # Leave +schema: blank to use the default target_schema.
272+
staging:
273+
+schema: my_new_schema_name # Leave +schema: blank to use the default target_schema.
278274
```
279275

280276
#### Change the source table references
281277
If an individual source table has a different name than the package expects, add the table name as it appears in your destination to the respective variable:
282278

283-
> IMPORTANT: See this project's [`dbt_project.yml`](https://github.com/fivetran/dbt_zendesk_source/blob/main/dbt_project.yml) variable declarations to see the expected names.
279+
> IMPORTANT: See this project's [`dbt_project.yml`](https://github.com/fivetran/dbt_zendesk/blob/main/dbt_project.yml) variable declarations to see the expected names.
284280

285281
```yml
286282
vars:
@@ -302,9 +298,6 @@ This dbt package is dependent on the following dbt packages. These dependencies
302298

303299
```yml
304300
packages:
305-
- package: fivetran/zendesk_source
306-
version: [">=0.18.0", "<0.19.0"]
307-
308301
- package: fivetran/fivetran_utils
309302
version: [">=0.4.0", "<0.5.0"]
310303

dbt_project.yml

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
name: 'zendesk'
2-
version: '0.25.0'
2+
version: '1.0.0'
33

44
config-version: 2
55
require-dbt-version: [">=1.3.0", "<2.0.0"]
66
on-run-start: '{{ fivetran_utils.empty_variable_warning("ticket_field_history_columns", "zendesk_ticket_field_history") }}'
7+
78
models:
89
zendesk:
910
+schema: zendesk
@@ -35,30 +36,40 @@ models:
3536
+materialized: table
3637
utils:
3738
+materialized: ephemeral
39+
staging:
40+
+schema: zendesk_source
41+
+materialized: table
42+
tmp:
43+
+materialized: view
44+
3845
vars:
3946
zendesk:
4047
ticket_field_history_columns: ['assignee_id', 'status', 'priority']
4148
ticket_field_history_updater_columns: []
42-
audit_log: "{{ ref('stg_zendesk__audit_log') }}"
43-
brand: "{{ ref('stg_zendesk__brand') }}"
44-
daylight_time: "{{ ref('stg_zendesk__daylight_time') }}"
45-
domain_name: "{{ ref('stg_zendesk__domain_name') }}"
46-
field_history: "{{ ref('stg_zendesk__ticket_field_history') }}"
47-
group: "{{ ref('stg_zendesk__group') }}"
48-
organization_tag: "{{ ref('stg_zendesk__organization_tag') }}"
49-
organization: "{{ ref('stg_zendesk__organization') }}"
50-
schedule_holiday: "{{ ref('stg_zendesk__schedule_holiday') }}"
51-
schedule: "{{ ref('stg_zendesk__schedule') }}"
52-
ticket_comment: "{{ ref('stg_zendesk__ticket_comment') }}"
53-
ticket_form_history: "{{ ref('stg_zendesk__ticket_form_history') }}"
54-
ticket_schedule: "{{ ref('stg_zendesk__ticket_schedule') }}"
55-
ticket_tag: "{{ ref('stg_zendesk__ticket_tag') }}"
56-
ticket: "{{ ref('stg_zendesk__ticket') }}"
57-
time_zone: "{{ ref('stg_zendesk__time_zone') }}"
58-
user_tag: "{{ ref('stg_zendesk__user_tag') }}"
59-
user: "{{ ref('stg_zendesk__user') }}"
60-
ticket_chat: "{{ ref('stg_zendesk__ticket_chat') }}"
61-
ticket_chat_event: "{{ ref('stg_zendesk__ticket_chat_event') }}"
49+
zendesk__ticket_passthrough_columns: []
50+
zendesk__user_passthrough_columns: []
51+
zendesk__organization_passthrough_columns: []
52+
zendesk_sources: []
53+
audit_log: "{{ source('zendesk', 'audit_log') }}"
54+
brand: "{{ source('zendesk', 'brand') }}"
55+
daylight_time: "{{ source('zendesk', 'daylight_time') }}"
56+
domain_name: "{{ source('zendesk', 'domain_name') }}"
57+
field_history: "{{ source('zendesk', 'ticket_field_history') }}"
58+
group: "{{ source('zendesk', 'group') }}"
59+
organization_tag: "{{ source('zendesk', 'organization_tag') }}"
60+
organization: "{{ source('zendesk', 'organization') }}"
61+
schedule_holiday: "{{ source('zendesk', 'schedule_holiday') }}"
62+
schedule: "{{ source('zendesk', 'schedule') }}"
63+
ticket_comment: "{{ source('zendesk', 'ticket_comment') }}"
64+
ticket_form_history: "{{ source('zendesk', 'ticket_form_history') }}"
65+
ticket_schedule: "{{ source('zendesk', 'ticket_schedule') }}"
66+
ticket_tag: "{{ source('zendesk', 'ticket_tag') }}"
67+
ticket: "{{ source('zendesk', 'ticket') }}"
68+
time_zone: "{{ source('zendesk', 'time_zone') }}"
69+
user_tag: "{{ source('zendesk', 'user_tag') }}"
70+
user: "{{ source('zendesk', 'user') }}"
71+
ticket_chat: "{{ source('zendesk', 'ticket_chat') }}"
72+
ticket_chat_event: "{{ source('zendesk', 'ticket_chat_event') }}"
6273

6374
using_schedules: true
6475
using_domain_names: true

docs/catalog.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/manifest.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

integration_tests/dbt_project.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
config-version: 2
22

33
name: 'zendesk_integration_tests'
4-
version: '0.25.0'
4+
version: '1.0.0'
55

66
profile: 'integration_tests'
77

88
vars:
99
zendesk_schema: zendesk_integration_tests_63
10-
zendesk_source:
10+
zendesk:
1111
zendesk_organization_identifier: "organization_data"
1212
zendesk_schedule_identifier: "schedule_data"
1313
zendesk_schedule_holiday_identifier: "schedule_holiday_data"

integration_tests/seeds/ticket_chat_event_data.csv

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@ chat_id,created_at,_Company_synced,actor_id,chat_index,external_message_id,filen
77
4323.953441.T6OrgbvMIqPplK,2023-12-08 05:07:28.408000,2024-03-19 16:51:30.989000,403959218893,0,,,,No problem. Just share a few details and I'll connect you with someone from our team.,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""text"":{""actions"":[],""text"":""Thanks. Let me connect you with a customer support agent.""}},""id"":""658d843188000ddefeeba3f2"",""metadata"":{""fields"":{}},""received"":""2023-12-28T14:20:33.333Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
88
4323.953441.TzkBGrapJoA,2023-12-28 14:22:12.840000,2024-03-19 16:51:21.702000,403969141094,0,,,,No problem. Just share a few details and I'll connect you with someone from our team.,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""form"":{""block_chat_input"":false,""fields"":[{""label"":""Name"",""name"":""dataCapture.systemField.requester.name"",""text"":{""max_size"":256,""min_size"":1,""text"":""Name""}},{""email"":{""email"":""email""},""label"":""Email"",""name"":""dataCapture.systemField.requester.email""}]}},""id"":""658d841e69c2dcac0bc5a"",""metadata"":{""fields"":{""formId"":{""string_value"":""DataCaptureForm""},""nextNodeId"":{""string_value"":""01HEYB2GDS9HSRDAV_01HJRCQ1Y5EDYFHKZ6""},""nodeId"":{""string_value"":""01HJRCQ1Y4MJEYB2GDS9HSRDAV_01HJRCQ1NZJ77B4""}}},""received"":""2023-12-28T14:20:14.563Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
99
4323.953441.TzkArUd3CjKI,2023-12-28 14:20:35.032000,2024-03-19 16:51:23.267000,403959218893,0,,,,Hi there. Got a question? I'm here to help.,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""text"":{""actions"":[],""text"":""No problem. Just share a few details and I'll connect you with someone from our team.""}},""id"":""658d8481d00e97935de863ab"",""metadata"":{""fields"":{}},""received"":""2023-12-28T14:21:53.345Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
10-
4323.953441.TzAcedetjkcKyq,2023-12-22 10:37:20.489000,2024-03-19 16:51:25.454000,403969141094,0,,,,,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""text"":{""actions"":[],""text"":""No problem. Just share a few details and I'll connect you with someone from our team.""}},""id"":""65bce6a92a2fe21c"",""metadata"":{""fields"":{}},""received"":""2024-02-02T12:57:13.130Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
11-
4323.953441.TyDt23helloZt4E,2023-12-12 11:20:10.181000,2024-03-19 16:51:27.764000,403959218893,0,,,,TALK TO A HUMAN,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""text"":{""actions"":[{""reply"":{""payload"":""goto_node=01HJRCSAC466_01HJRCSAC4FV78SSW""},""text"":""Talk to a human""}],""text"":""Hi there. Got a question? I'm here to help.""}},""id"":""65bce6a06765305e2a2fd629"",""metadata"":{""fields"":{}},""received"":""2024-02-02T12:57:04.171Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
10+
4323.953441.TzAcedetjkcKyq,2023-12-22 10:37:20.489000,2024-03-19 16:51:25.454000,__system,0,,,,,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""text"":{""actions"":[],""text"":""No problem. Just share a few details and I'll connect you with someone from our team.""}},""id"":""65bce6a92a2fe21c"",""metadata"":{""fields"":{}},""received"":""2024-02-02T12:57:13.130Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
11+
4323.953441.TyDt23helloZt4E,2023-12-12 11:20:10.181000,2024-03-19 16:51:27.764000,__trigger,0,,,,TALK TO A HUMAN,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""text"":{""actions"":[{""reply"":{""payload"":""goto_node=01HJRCSAC466_01HJRCSAC4FV78SSW""},""text"":""Talk to a human""}],""text"":""Hi there. Got a question? I'm here to help.""}},""id"":""65bce6a06765305e2a2fd629"",""metadata"":{""fields"":{}},""received"":""2024-02-02T12:57:04.171Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
12+
4323.953441.TzBlankActor,2023-12-31 11:00:00.000000,2024-03-19 16:51:25.454000,"",0,,,,Blank id example,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""text"":{""actions"":[],""text"":""Example message""}},""id"":""dummy_blank_actor"",""metadata"":{""fields"":{}},""received"":""2024-02-02T12:57:13.130Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
13+
4323.953441.TzBlankActorTwo,2023-12-31 11:00:00.000000,2024-03-19 16:51:25.454000,agent:,0,,,,Blank id example two,,,,"{""author"":{""avatar_url"":""url"",""display_name"":""Company Bot"",""type"":""BUSINESS""},""content"":{""text"":{""actions"":[],""text"":""Example message""}},""id"":""dummy_blank_actor"",""metadata"":{""fields"":{}},""received"":""2024-02-02T12:57:13.130Z"",""source"":{""type"":""zd:answerBot""}}",,,,,,,ChatMessage,
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{% macro get_audit_log_columns() %}
2+
3+
{% set columns = [
4+
{"name": "_fivetran_synced", "datatype": dbt.type_timestamp()},
5+
{"name": "id", "datatype": dbt.type_int()},
6+
{"name": "action", "datatype": dbt.type_string()},
7+
{"name": "actor_id", "datatype": dbt.type_int()},
8+
{"name": "change_description", "datatype": dbt.type_string()},
9+
{"name": "created_at", "datatype": dbt.type_timestamp()},
10+
{"name": "source_id", "datatype": dbt.type_int()},
11+
{"name": "source_label", "datatype": dbt.type_string()},
12+
{"name": "source_type", "datatype": dbt.type_string()}
13+
] %}
14+
15+
{{ return(columns) }}
16+
17+
{% endmacro %}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{% macro get_brand_columns() %}
2+
3+
{% set columns = [
4+
{"name": "_fivetran_deleted", "datatype": "boolean"},
5+
{"name": "_fivetran_synced", "datatype": dbt.type_timestamp()},
6+
{"name": "active", "datatype": "boolean"},
7+
{"name": "brand_url", "datatype": dbt.type_string()},
8+
{"name": "has_help_center", "datatype": "boolean"},
9+
{"name": "help_center_state", "datatype": dbt.type_string()},
10+
{"name": "id", "datatype": dbt.type_int()},
11+
{"name": "logo_content_type", "datatype": dbt.type_string()},
12+
{"name": "logo_content_url", "datatype": dbt.type_string()},
13+
{"name": "logo_deleted", "datatype": "boolean"},
14+
{"name": "logo_file_name", "datatype": dbt.type_string()},
15+
{"name": "logo_height", "datatype": dbt.type_int()},
16+
{"name": "logo_id", "datatype": dbt.type_int()},
17+
{"name": "logo_inline", "datatype": "boolean"},
18+
{"name": "logo_mapped_content_url", "datatype": dbt.type_string()},
19+
{"name": "logo_size", "datatype": dbt.type_int()},
20+
{"name": "logo_url", "datatype": dbt.type_string()},
21+
{"name": "logo_width", "datatype": dbt.type_int()},
22+
{"name": "name", "datatype": dbt.type_string()},
23+
{"name": "subdomain", "datatype": dbt.type_string()},
24+
{"name": "url", "datatype": dbt.type_string()}
25+
] %}
26+
27+
{{ return(columns) }}
28+
29+
{% endmacro %}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{% macro get_daylight_time_columns() %}
2+
3+
{% set columns = [
4+
{"name": "_fivetran_synced", "datatype": dbt.type_timestamp()},
5+
{"name": "daylight_end_utc", "datatype": "datetime"},
6+
{"name": "daylight_offset", "datatype": dbt.type_int()},
7+
{"name": "daylight_start_utc", "datatype": "datetime"},
8+
{"name": "time_zone", "datatype": dbt.type_string()},
9+
{"name": "year", "datatype": dbt.type_int()}
10+
] %}
11+
12+
{{ return(columns) }}
13+
14+
{% endmacro %}

0 commit comments

Comments
 (0)