Model with dbt
skipprd is bronze. dbt is silver and gold. Keep business logic out of skippr.yml. Python Session loads the table. dbt run models it.
Land a warehouse first: Snowflake or Postgres. dbt does not read the WAL.
Source
Point dbt at the skipprd-landed table. Snowflake shown; swap database and schema for Postgres (analytics.public).
yaml
# models/sources.yml
version: 2
sources:
- name: skipprd
database: RAW_DATA
schema: PUBLIC
tables:
- name: bikehireSilver
Dedupe to a grain you can test.
sql
-- models/silver/bikehire_silver.sql
select
rider_id,
bike_id,
event_type,
event_date
from {{ source('skipprd', 'bikehire') }}
where rider_id is not nullGold
A tiny aggregate. That is enough to prove the path.
sql
-- models/gold/bikehire_daily.sql
select
bike_id,
event_date,
count(*) as trip_events
from {{ ref('bikehire_silver') }}
group by 1, 2Run
bash
dbt rundbt: keys in skippr.yml (target_schema, silver_suffix, gold_suffix) are naming hints. The engine ignores them at runtime.
If you want an agent to draft the models, that is Skippr IDE / sde. Not required for this recipe.
Then test it.
