Skip to content

Commit

Permalink
Merge pull request #12 from seunghanhong/feature/postgres_support
Browse files Browse the repository at this point in the history
postgres support
  • Loading branch information
clausherther authored Mar 7, 2021
2 parents 4e27ede + 3dabff7 commit 5c16c92
Show file tree
Hide file tree
Showing 13 changed files with 135 additions and 8 deletions.
4 changes: 4 additions & 0 deletions macros/calendar_date/convert_timezone.sql
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,7 @@ from_utc_timestamp(
'{{ target_tz }}'
)
{%- endmacro -%}

{% macro postgres__convert_timezone(column, target_tz, source_tz) -%}
cast({{ column }} at time zone '{{ source_tz }}' at time zone '{{ target_tz }}' as {{ dbt_utils.type_timestamp() }})
{%- endmacro -%}
6 changes: 6 additions & 0 deletions macros/calendar_date/day_name.sql
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,9 @@
{%- set f = '%a' if short else '%A' -%}
format_date('{{ f }}', cast({{ date }} as date))
{%- endmacro %}

{%- macro postgres__day_name(date, short) -%}
{# FM = Fill mode, which suppresses padding blanks #}
{%- set f = 'FMDy' if short else 'FMDay' -%}
to_char({{ date }}, '{{ f }}')
{%- endmacro %}
15 changes: 14 additions & 1 deletion macros/calendar_date/day_of_week.sql
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@



{%- endmacro %}
{%- endmacro %}

{%- macro bigquery__day_of_week(date, isoweek) -%}

Expand All @@ -52,3 +52,16 @@
{%- endmacro %}


{%- macro postgres__day_of_week(date, isoweek) -%}

{%- if isoweek -%}
{%- set dow_part = 'isodow' -%}
-- Monday(1) to Sunday (7)
cast({{ dbt_date.date_part(dow_part, date) }} as {{ dbt_utils.type_int() }})
{%- else -%}
{%- set dow_part = 'dow' -%}
-- Sunday(1) to Saturday (7)
cast({{ dbt_date.date_part(dow_part, date) }} + 1 as {{ dbt_utils.type_int() }})
{%- endif -%}

{%- endmacro %}
4 changes: 3 additions & 1 deletion macros/calendar_date/day_of_year.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,6 @@
{{ dbt_date.date_part('dayofyear', date) }}
{%- endmacro %}


{%- macro postgres__day_of_year(date) -%}
{{ dbt_date.date_part('doy', date) }}
{%- endmacro %}
4 changes: 4 additions & 0 deletions macros/calendar_date/iso_week_of_year.sql
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,7 @@ cast({{ dbt_date.date_part(week_type, date) }} as {{ dbt_utils.type_int() }})
{{ dbt_date._iso_week_of_year(date, 'weekiso') }}
{%- endmacro %}

{%- macro postgres__iso_week_of_year(date) -%}
-- postgresql week is isoweek, the first week of a year containing January 4 of that year.
{{ dbt_date._iso_week_of_year(date, 'week') }}
{%- endmacro %}
3 changes: 3 additions & 0 deletions macros/calendar_date/iso_week_start.sql
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ cast({{ dbt_utils.date_trunc(week_type, date) }} as date)
{{ dbt_date._iso_week_start(date, 'week') }}
{%- endmacro %}

{%- macro postgres__iso_week_start(date) -%}
{{ dbt_date._iso_week_start(date, 'week') }}
{%- endmacro %}
11 changes: 11 additions & 0 deletions macros/calendar_date/month_name.sql
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,14 @@
{%- set f = '%b' if short else '%B' -%}
format_date('{{ f }}', cast({{ date }} as date))
{%- endmacro %}

{%- macro snowflake__month_name(date, short) -%}
{%- set f = 'MON' if short else 'MMMM' -%}
to_char({{ date }}, '{{ f }}')
{%- endmacro %}

{%- macro postgres__month_name(date, short) -%}
{# FM = Fill mode, which suppresses padding blanks #}
{%- set f = 'FMMon' if short else 'FMMonth' -%}
to_char({{ date }}, '{{ f }}')
{%- endmacro %}
4 changes: 4 additions & 0 deletions macros/calendar_date/week_end.sql
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@
{{ dbt_date.n_days_away(6, dt) }}
{%- endmacro %}

{%- macro postgres__week_end(date) -%}
{%- set dt = dbt_date.week_start(date) -%}
{{ dbt_date.n_days_away(6, dt) }}
{%- endmacro %}
14 changes: 12 additions & 2 deletions macros/calendar_date/week_of_year.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
{%- macro week_of_year(date=None, tz=None) -%}
{%-set dt = date if date else dbt_date.today(tz) -%}
cast({{ dbt_date.date_part('week', dt) }} as {{ dbt_utils.type_int() }})
{%- endmacro -%}
{{ adapter.dispatch('week_of_year', packages = dbt_date._get_utils_namespaces()) (dt) }}
{%- endmacro -%}

{%- macro default__week_of_year(date) -%}
cast({{ dbt_date.date_part('week', date) }} as {{ dbt_utils.type_int() }})
{%- endmacro %}

{%- macro postgres__week_of_year(date) -%}
{# postgresql 'week' returns isoweek. Use to_char instead.
WW = the first week starts on the first day of the year #}
cast(to_char({{ date }}, 'WW') as {{ dbt_utils.type_int() }})
{%- endmacro %}
7 changes: 6 additions & 1 deletion macros/calendar_date/week_start.sql
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,9 @@ case
date
) }}
end
{%- endmacro %}
{%- endmacro %}

{%- macro postgres__week_start(date) -%}
-- Sunday as week start date
cast({{ dbt_utils.dateadd('day', -1, dbt_utils.date_trunc('week', dbt_utils.dateadd('day', 1, date))) }} as date)
{%- endmacro %}
4 changes: 2 additions & 2 deletions macros/get_base_dates.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
with date_spine as
(
{% if start_date and end_date %}
{%- set start_date="cast('" ~ start_date ~ "' as datetime)" -%}
{%- set end_date="cast('" ~ end_date ~ "' as datetime)" -%}
{%- set start_date="cast('" ~ start_date ~ "' as " ~ dbt_utils.type_timestamp() ~ ")" -%}
{%- set end_date="cast('" ~ end_date ~ "' as " ~ dbt_utils.type_timestamp() ~ ")" -%}

{% elif n_dateparts and datepart %}

Expand Down
65 changes: 65 additions & 0 deletions macros/get_date_dimension.sql
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,69 @@ select
from
dates_with_prior_year_dates d
order by 1
{% endmacro %}

{% macro postgres__get_date_dimension(start_date, end_date) %}
with base_dates as (
{{ dbt_date.get_base_dates(start_date, end_date) }}
),
dates_with_prior_year_dates as (

select
cast(d.date_day as date) as date_day,
cast({{ dbt_utils.dateadd('year', -1 , 'd.date_day') }} as date) as prior_year_date_day,
cast({{ dbt_utils.dateadd('day', -364 , 'd.date_day') }} as date) as prior_year_over_year_date_day
from
base_dates d

)
select
d.date_day,
{{ dbt_date.yesterday('d.date_day') }} as prior_date_day,
{{ dbt_date.tomorrow('d.date_day') }} as next_date_day,
d.prior_year_date_day as prior_year_date_day,
d.prior_year_over_year_date_day,
{{ dbt_date.day_of_week('d.date_day', isoweek=true) }} as day_of_week,

{{ dbt_date.day_name('d.date_day', short=false) }} as day_of_week_name,
{{ dbt_date.day_name('d.date_day', short=true) }} as day_of_week_name_short,
{{ dbt_date.day_of_month('d.date_day') }} as day_of_month,
{{ dbt_date.day_of_year('d.date_day') }} as day_of_year,

{{ dbt_date.week_start('d.date_day') }} as week_start_date,
{{ dbt_date.week_end('d.date_day') }} as week_end_date,
{{ dbt_date.week_start('d.prior_year_over_year_date_day') }} as prior_year_week_start_date,
{{ dbt_date.week_end('d.prior_year_over_year_date_day') }} as prior_year_week_end_date,
{{ dbt_date.week_of_year('d.date_day') }} as week_of_year,

{{ dbt_date.iso_week_start('d.date_day') }} as iso_week_start_date,
{{ dbt_date.iso_week_end('d.date_day') }} as iso_week_end_date,
{{ dbt_date.iso_week_start('d.prior_year_over_year_date_day') }} as prior_year_iso_week_start_date,
{{ dbt_date.iso_week_end('d.prior_year_over_year_date_day') }} as prior_year_iso_week_end_date,
{{ dbt_date.iso_week_of_year('d.date_day') }} as iso_week_of_year,


cast({{ dbt_date.date_part('week', 'd.prior_year_over_year_date_day') }} as {{ dbt_utils.type_int() }}) as prior_year_week_of_year,

cast({{ dbt_date.date_part('month', 'd.date_day') }} as {{ dbt_utils.type_int() }}) as month_of_year,
{{ dbt_date.month_name('d.date_day', short=false) }} as month_name,
{{ dbt_date.month_name('d.date_day', short=true) }} as month_name_short,

cast({{ dbt_utils.date_trunc('month', 'd.date_day') }} as date) as month_start_date,
cast({{ dbt_utils.last_day('d.date_day', 'month') }} as date) as month_end_date,

cast({{ dbt_utils.date_trunc('month', 'd.prior_year_date_day') }} as date) as prior_year_month_start_date,
cast({{ dbt_utils.last_day('d.prior_year_date_day', 'month') }} as date) as prior_year_month_end_date,

cast({{ dbt_date.date_part('quarter', 'd.date_day') }} as {{ dbt_utils.type_int() }}) as quarter_of_year,
cast({{ dbt_utils.date_trunc('quarter', 'd.date_day') }} as date) as quarter_start_date,
{# dbt_utils.last_day does not support quarter because postgresql does not support quarter interval. #}
cast({{dbt_utils.dateadd('day', '-1', dbt_utils.dateadd('month', '3', dbt_utils.date_trunc('quarter', 'd.date_day')))}} as date) as quarter_end_date,

cast({{ dbt_date.date_part('year', 'd.date_day') }} as {{ dbt_utils.type_int() }}) as year_number,
cast({{ dbt_utils.date_trunc('year', 'd.date_day') }} as date) as year_start_date,
cast({{ dbt_utils.last_day('d.date_day', 'year') }} as date) as year_end_date
from
dates_with_prior_year_dates d
order by 1
{% endmacro %}
2 changes: 1 addition & 1 deletion packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ packages:
- package: fishtown-analytics/dbt_utils
version: [">=0.6.0", "<0.7.0"]
- package: fishtown-analytics/spark_utils
version: 0.1.0
version: 0.1.0

0 comments on commit 5c16c92

Please sign in to comment.