From c7d589e4e5725b47ccbba9290eaaf98d232263d0 Mon Sep 17 00:00:00 2001 From: Doug Guthrie Date: Sun, 11 Feb 2024 16:32:30 +0000 Subject: [PATCH] spatial data --- .../bike_station_point_features.sql | 12 +++++++++ models/staging/bikes/_bikes__sources.yml | 21 +++++++++++++++ .../staging/bikes/stg_bikes_station_info.sql | 26 +++++++++++++++++++ .../bikes/stg_bikes_station_status.sql | 25 ++++++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 models/demo_examples/bike_station_point_features.sql create mode 100644 models/staging/bikes/_bikes__sources.yml create mode 100644 models/staging/bikes/stg_bikes_station_info.sql create mode 100644 models/staging/bikes/stg_bikes_station_status.sql diff --git a/models/demo_examples/bike_station_point_features.sql b/models/demo_examples/bike_station_point_features.sql new file mode 100644 index 00000000..6fe0a116 --- /dev/null +++ b/models/demo_examples/bike_station_point_features.sql @@ -0,0 +1,12 @@ +{{ + config( + materialized='table', + post_hook='alter table {{ this }} add search optimization on geo(point_features);' + ) +}} + +select + + -- https://docs.snowflake.com/en/sql-reference/functions/st_collect + st_collect(point) as point_features +from {{ ref('stg_bikes_station_info') }} diff --git a/models/staging/bikes/_bikes__sources.yml b/models/staging/bikes/_bikes__sources.yml new file mode 100644 index 00000000..a7747798 --- /dev/null +++ b/models/staging/bikes/_bikes__sources.yml @@ -0,0 +1,21 @@ +version: 2 + + +sources: + - name: bikes + database: chicago_divvy_bike_station_status + schema: public + tables: + - name: station_info_flatten + columns: + - name: station_id + tests: + - not_null + - unique + - name: lat + tests: + - dbt_utils.expression_is_true: + expression: "lat between -90 and 90" + - dbt_utils.expression_is_true: + expression: "lon between -180 and 180" + - name: station_status_flatten_full diff --git a/models/staging/bikes/stg_bikes_station_info.sql b/models/staging/bikes/stg_bikes_station_info.sql new file mode 100644 index 00000000..1b01e8c0 --- /dev/null +++ b/models/staging/bikes/stg_bikes_station_info.sql @@ -0,0 +1,26 @@ +with source as ( + select * from {{ source('bikes', 'station_info_flatten') }} +), + +recast as ( + select + short_name::varchar as short_name, + station_type::varchar as station_type, + name::varchar as name, + electric_bike_surcharge_waiver, + external_id::varchar as external_id, + legacy_id::int as legacy_id, + capacity, + has_kiosk, + station_id::varchar as station_id, + region_id::int as region_id, + eightd_station_services, + lat as latitude, + lon as longitude, + + -- https://docs.snowflake.com/en/sql-reference/functions/st_makepoint + st_makepoint(lon, lat) as point + from source +) + +select * from recast diff --git a/models/staging/bikes/stg_bikes_station_status.sql b/models/staging/bikes/stg_bikes_station_status.sql new file mode 100644 index 00000000..aef970ea --- /dev/null +++ b/models/staging/bikes/stg_bikes_station_status.sql @@ -0,0 +1,25 @@ +with source as ( + select * from {{ source('bikes', 'station_status_flatten_full') }} +), + +recast as ( + select + station_id::varchar as station_id, + station_status::varchar as station_status, + num_ebikes_available, + num_bikes_available, + num_docks_available, + num_docks_disabled, + num_bikes_disabled, + is_installed, + num_ebikes_available_bool as is_ebikes_available, + is_renting, + is_returning, + eightd_has_available_keys, + legacy_id::varchar as legacy_id, + last_updated, + last_reported + from source +) + +select * from recast