Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor Octopus Jaffle Shop #1

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions jaffle_shop/models/final/finance/_models.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
version: 2

exposures:
- name: Customer returns dashboard
description: A dashboard for showing total value of returned goods by customer.
type: dashboard
url: https://an-example-dashboard-site.com
owner:
email: [email protected]
depends_on:
- ref('fnl_finance_customerreturns')

models:
- name: fnl_finance_customerreturns
meta:
owner: '[email protected]'
description: This table has the total lifetime return value by customer id.
columns:
- name: customer_id
description: This is a unique identifier for a customer
tests:
- unique
- not_null
- name: returned_value
description: Total value of orders returned.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
SELECT customer_id
, SUM(amount) as returned_value
FROM {{ ref('wh_orders') }}
WHERE status = 'returned'
GROUP BY customer_id
ORDER BY SUM(amount) DESC
25 changes: 25 additions & 0 deletions jaffle_shop/models/final/sales/_models.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
version: 2

exposures:
- name: New customer dashboard
description: A dashboard for showing new customers each month.
type: dashboard
url: https://an-example-dashboard-site.com
owner:
email: [email protected]
depends_on:
- ref('fnl_sales_newcustomers')

models:
- name: fnl_sales_newcustomers
meta:
owner: '[email protected]'
description: This table has the count of customers making their first order by month.
columns:
- name: first_order_month
description: This is the month in which a customers first order was placed.
tests:
- unique
- not_null
- name: new_customer_count
description: Total count of new customers placing their first order.
5 changes: 5 additions & 0 deletions jaffle_shop/models/final/sales/fnl_sales_newcustomers.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
SELECT COALESCE(date_trunc('MM', first_order),'2018-01-01') as first_order_month
, COUNT(customer_id) as new_customer_count
FROM {{ ref('wh_customers') }}
GROUP BY date_trunc('MM', first_order)
ORDER BY date_trunc('MM', first_order) ASC
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,20 @@ version: 2

models:
- name: stg_customers
meta:
owner: '[email protected]'
description: >
Staging layer for customers' source data. Sensitive data is hashed.
columns:
- name: customer_id
tests:
- unique
- not_null

- name: stg_orders
meta:
owner: '[email protected]'
description: >
Staging layer for orders' source data.
columns:
- name: order_id
tests:
Expand All @@ -18,8 +25,11 @@ models:
tests:
- accepted_values:
values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']

- name: stg_payments
meta:
owner: '[email protected]'
description: >
Staging layer for payments' source data.
columns:
- name: payment_id
tests:
Expand Down
19 changes: 19 additions & 0 deletions jaffle_shop/models/staging/src_seed/sensitive/_models.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
version: 2

models:
- name: stg_customers_pii
meta:
owner: '[email protected]'
description: >
Staging layer for customers' source data.
columns:
- name: customer_id
tests:
- unique
- not_null
- name: first_name
meta:
sensitive: true
- name: last_name
meta:
sensitive: true
3 changes: 3 additions & 0 deletions jaffle_shop/models/staging/src_seed/stg_customers.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
SELECT
{{hash_sensitive_columns('stg_customers_pii')}}
from {{ref('stg_customers_pii')}}
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,81 +1,68 @@
version: 2

models:
- name: customers
- name: wh_customers
meta:
owner: '[email protected]'
description: This table has basic information about a customer, as well as some derived facts based on a customer's orders

columns:
- name: customer_id
description: This is a unique identifier for a customer
tests:
- unique
- not_null

- name: first_name
description: Customer's first name. PII.

- name: last_name
description: Customer's last name. PII.

- name: first_order
description: Date (UTC) of a customer's first order

- name: most_recent_order
description: Date (UTC) of a customer's most recent order

- name: number_of_orders
description: Count of the number of orders a customer has placed

- name: total_order_amount
description: Total value (AUD) of a customer's orders

- name: orders
- name: wh_orders
meta:
owner: '[email protected]'
description: This table has basic information about orders, as well as some derived facts based on payments

columns:
- name: order_id
tests:
- unique
- not_null
description: This is a unique identifier for an order

- name: customer_id
description: Foreign key to the customers table
tests:
- not_null
- relationships:
to: ref('customers')
to: ref('wh_customers')
field: customer_id

- name: order_date
description: Date (UTC) that the order was placed

- name: status
description: '{{ doc("orders_status") }}'
tests:
- accepted_values:
values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']

- name: amount
description: Total amount (AUD) of the order
tests:
- not_null

- name: credit_card_amount
description: Amount of the order (AUD) paid for by credit card
tests:
- not_null

- name: coupon_amount
description: Amount of the order (AUD) paid for by coupon
tests:
- not_null

- name: bank_transfer_amount
description: Amount of the order (AUD) paid for by bank transfer
tests:
- not_null

- name: gift_card_amount
description: Amount of the order (AUD) paid for by gift card
tests:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ final as (

select
customers.customer_id,
customers.first_name,
customers.last_name,
customers.first_name_hash,
customers.last_name_hash,
customer_orders.first_order,
customer_orders.most_recent_order,
customer_orders.number_of_orders,
Expand Down
2 changes: 2 additions & 0 deletions jaffle_shop/seeds/dbt_project_evaluator_exceptions.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
fct_name,column_name,id_to_exclude,comment
fct_staging_dependent_on_staging,parent,stg_customers_pii,Scrubbing pii permitted in staging layer.