PR #89 includes the following changes:
- Fixed an issue where the
shopify__customers
model incorrectly displayed NULL values for thecustomer_tags
field for customers without orders. Updated the logic to ensure customer tags are retrieved even if no orders have been placed for that customer.
- Updated seed data to include customers without orders, verifying that their tags are correctly pulled through.
- Added consistency and integrity tests for the
shopify__customers
model to ensure accurate handling of customer tags for all customers.
PR #87 includes the following changes:
- Coalesces the
backfill_lifetime_sums
fields from incremental loads, as well ascohort_month_number
in the rare cases there are no orders from an incremental period. This fixes the issue of NULL values in the lifetime columns inshopify__customer_cohorts
table. (PR #86).
- Added consistency and integrity tests within
integration_tests
for theshopify__customer_cohorts
model. (PR #87).
PR #83 includes the following changes:
- Addition of the
shopify__line_item_enhanced
model. This model constructs a comprehensive, denormalized analytical table that enables reporting on key revenue, customer, and product metrics from your billing platform. Itβs designed to align with the schema of the*__line_item_enhanced
model found in Shopify, Recharge, Stripe, Zuora, and Recurly, offering standardized reporting across various billing platforms. To see the kinds of insights this model can generate, explore example visualizations in the Fivetran Billing Model Streamlit App. Visit the app for more details.- This model is currently disabled by default. You may enable it by setting the
shopify__standardized_billing_model_enabled
astrue
in yourdbt_project.yml
.
- This model is currently disabled by default. You may enable it by setting the
- Added consistency test within integration_tests for the
shopify__line_item_enhanced
model.
PR #84 includes the following changes:
- Introduced the variable
shopify__calendar_start_date
toshopify__calendar
to allow for the start date to be customized. This can be set in yourdbt_project.yml
. If not used, the default will start at2019-01-01
. See the README for more details.
- Added support for a new
delayed
fulfillment event status from Shopify. This produces a newcount_fulfillment_delayed
field in theshopify__daily_shop
model (PR #81).
- Added validation tests to be used by package maintainers to evaluate the consistency and integrity of subsequent model updates (PR #82).
PR #76 includes the following updates:
β οΈ Since the following changes are breaking, a--full-refresh
after upgrading will be required.
- Performance improvements:
- Added an incremental strategy for the following models. These models were picked for incremental materialization based on the size of their upstream sources.
shopify__customer_cohorts
(For Databricks SQL Warehouse destinations, this model is materialized as a table without support for incremental runs at this time.)shopify__customer_email_cohorts
(For Databricks SQL Warehouse destinations, this model is materialized as a table without support for incremental runs at this time.)shopify__discounts
shopify__order_lines
shopify__orders
shopify__transactions
- Updated the materialization of
shopify__orders__order_line_aggregates
to a table. This model draws on several large upstream sources and is also referenced in several downstream models, so this was done to improve performance. This model was not selected for incremental materialization since its structure was not conducive to incremental strategy.
- Added an incremental strategy for the following models. These models were picked for incremental materialization based on the size of their upstream sources.
- To reduce storage, updated the default materialization of the upstream staging models from tables to views. (See the dbt_shopify_source CHANGELOG for more details.)
- Added a default 7-day look-back to incremental models to accommodate late arriving records. The number of days can be changed by setting the var
lookback_window
in your dbt_project.yml. See the Lookback Window section of the README for more details. - Added macro
shopify_lookback
to streamline the lookback calculation. - Updated the partitioning logic in window functions to use only the necessary columns, depending on whether the unioning feature is used. This benefits mainly Redshift destinations, which can see errors when the staging models are materialized as views.
- Corrected the
fixed_amount_discount_amount
logic to appropriately bring in fixed amount discounts inshopify__orders
. PR #78 - Removed the
index=1
filter instg_shopify__order_discount_code
in thedbt_shopify_source
package to ensure all discount codes are brought in for every orders. For customers with multiple discount codes in an order, this could update thecount_discount_codes_applied
field in theshopify__orders
andshopify__daily_shop
models. PR #78
- Updated the maintainer PR template to the current format.
- Added integration testing pipeline for Databricks SQL Warehouse.
- Added macro
shopify_is_databricks_sql_warehouse
for detecting if a Databricks target is an All Purpose Cluster or a SQL Warehouse.
PR #74 includes the following updates:
- Added
source_relation
to thepartition_by
clauses that determine thecustomer_index
in theint_shopify__customer_email_rollup
table. If the user is leveraging the union feature, this could change data values.
- Included auto-releaser GitHub Actions workflow to automate future releases.
- Added additional casting in seed dependencies for above models
integration_tests/dbt_project.yml
to ensure local testing passed on null cases.
- This release will be a breaking change due to the removal of below dependencies.
- Removed the dependency on dbt-expectations and updates dbt-date dependencies to the latest version. (PR #66)
- Removed the
dbt_expectations.expect_table_row_count_to_equal_other_table
test that ensured no fanouts in the metafield models. We will be working to replace this with a similar test. (PR #66)
(PR #61) includes the following updates:
These changes are made breaking due to changes in the source.
- In June 2023 the Shopify connector received an update which upgraded the connector to be compatible with the new 2023-04 Shopify API. As a result, the following fields have been removed as they were deprecated in the API upgrade: (dbt_shopify_source PR #70)
model | field removed |
---|---|
stg_shopify__customer | lifetime_duration |
stg_shopify__order_line | fulfillment_service |
stg_shopify__order_line | destination_location_* fields |
stg_shopify__order_line | origin_location_* fields |
stg_shopify__order | total_price_usd |
stg_shopify__order | processing_method |
- Please be aware that the removal of the fields from the staging models results in the removal of the fields in the relevant downstream models:
model | field removed |
---|---|
shopify__customer | lifetime_duration |
shopify__customer_emails | lifetime_duration |
shopify__order_lines | fulfillment_service |
shopify__order_lines | destination_location_* fields |
shopify__order_lines | origin_location_* fields |
shopify__orders | total_price_usd |
shopify__orders | processing_method |
- The
shopify_using_shop_metafields
variable was added to the Adding Metafields of the README. It was erroneously omitted in a previous release. - Documentation provided in the README for how to connect sources when leveraging the union schema/database feature.
- Removal of the
current_total_price
yml definition from the shopify__orders model as it was not being created in the model.
PR #58 applies the following changes:
- Adjusts the
int_shopify__customer_email_rollup
model to aggregate distinctcustomer_ids
. - Ensures that each order is tagged with the orderer's
email
before aggregating order metrics inint_shopify__emails__order_aggregates
.
- Ensures transaction
kinds
are being read correctly by applying alower()
function. - Removes unused and potentially problematic fields from
int_shopify__customer_email_rollup
. The removed fields includeorders_count
andtotal_spent
, which are actually calculated inint_shopify__emails__order_aggregates
before being passed toshopify__customer_emails
(which is unaffected by this change). - Removes
updated_timestamp
andcreated_timestamp
fromshopify__customer_emails
. Refer to the following fields instead:first_account_created_at
last_account_created_at
last_updated_at
- Incorporates the new
fivetran_utils.drop_schemas_automation
macro into the end of each Buildkite integration test job (PR #57). - Updates the pull request templates (PR #57).
Lots of new features ahead!! We've revamped the package to keep up-to-date with new additions to the Shopify connector and feedback from the community.
This release does include π¨ Breaking Changes π¨.
- Updated README documentation updates for easier navigation and setup of the dbt package (PR #44).
- Created the DECISIONLOG to log discussions and opinionated stances we took in designing the package (PR #43).
- Ensured Postgres compatibility! (PR #44)
- Addition of the calogica/dbt_expectations package for more robust testing (PR #50).
- Got rid of the
shopify__using_order_adjustment
,shopify__using_order_line_refund
, andshopify__using_refund
variables. Instead, the package will automatically create empty versions of the related models until the sourcerefund
,order_line_refund
, andorder_adjustment
tables exist in your schema. See DECISIONLOG for more details (Source PR #45, PR #46).
- In the intermediate models, we aggregate a lot of metrics and join them together. In previous versions of the package, some order line aggregates were being doubled if their parent order had multiple kinds of transactions, ie a customer used a gift card for part of the purchase (PR #51).
- New end model alert:
- The package now includes customer models that are based on email rather than customer_id (PR #45):
shopify__daily_shop
(PR #48)shopify__inventory_levels
(PR #46)shopify__discounts
(PR #47, PR #48)
- Metafield support! This package now supports metafields for the collection, customer, order, product_image, product, product_variant, and shop objects. If enabled (see the README for more details), respective
shopify__[object]_metafields
models will materialize with all metafields defined within themetafield
source table appended to the object. (PR #50) shopify_<default_source_table_name>_identifier
variables added if an individual source table has a different name than the package expects (PR #38).- Addition of the
shopify_timezone
variable, which converts ALL timestamps included in the package (including_fivetran_synced
) to a single target timezone in IANA Database format, ie "America/Los_Angeles" (PR #41). - The declaration of passthrough variables within your root
dbt_project.yml
has changed (but is backwards compatible). To allow for more flexibility and better tracking of passthrough columns, you will now want to define passthrough columns in the following format (PR #40):
This applies to all passthrough columns within the
dbt_shopify_source
package and not just thecustomer_pass_through_columns
example. See the README for which models have passthrough columns.
vars:
customer_pass_through_columns:
- name: "my_field_to_include" # Required: Name of the field within the source.
alias: "field_alias" # Optional: If you wish to alias the field within the staging model.
transform_sql: "cast(field_alias as string)" # Optional: If you wish to define the datatype or apply a light transformation.
- The following source fields have been added to (β) or removed from (β) their respective models (PR #39, PR #40):
shopify__orders
:- β
total_discounts_set
- β
total_line_items_price_set
- β
total_price_usd
- β
total_price_set
- β
total_tax_set
- β
total_tip_received
- β
is_deleted
- β
app_id
- β
checkout_id
- β
client_details_user_agent
- β
customer_locale
- β
order_status_url
- β
presentment_currency
- β
is_confirmed
- β
shopify__customers
:- β
note
- β
lifetime_duration
- β
currency
- β
marketing_consent_state
(coalescing ofemail_marketing_consent_state
and deprecatedaccepts_marketing
field) - β
marketing_opt_in_level
(coalescing ofemail_marketing_consent_opt_in_level
and deprecatedmarketing_opt_in_level
field) - β
marketing_consent_updated_at
(coalescing ofemail_marketing_consent_consent_updated_at
and deprecatedaccepts_marketing_updated_at
field) - β
accepts_marketing
/has_accepted_marketing
- β
accepts_marketing_updated_at
- β
marketing_opt_in_level
- β
shopify__order_lines
:- β
pre_tax_price_set
- β
price_set
- β
tax_code
- β
total_discount_set
- β
variant_title
- β
variant_inventory_management
- β
properties
- ( )
is_requiring_shipping
is renamed tois_shipping_required
- β
shopify__products
:- β
status
- β
- The following transformed fields have been added to their respective models:
shopify__orders
shipping_discount_amount
(PR #47)percentage_calc_discount_amount
(PR #47)fixed_amount_discount_amount
(PR #47)count_discount_codes_applied
(PR #47)order_tags
(PR #49)order_url_tags
(PR #49)number_of_fulfillments
(PR #49)fulfilmment_services
(PR #49)tracking_companies
(PR #49)tracking_numbers
(PR #49)
shopify__products
collections
(PR #46)tags
(PR #46)count_variants
(PR #46)has_product_image
(PR #46)quantity_sold
renamed tototal_quantity_sold
(PR #49)avg_quantity_per_order_line
(PR #49)product_total_discount
(PR #49)product_avg_discount_per_order_line
(PR #49)product_total_tax
(PR #49)product_avg_tax_per_order_line
(PR #49)shopify__customers
(PR #49)lifetime_abandoned_checkouts
customer_tags
average_order_value
renamed toavg_order_value
lifetime_total_amount
renamed tolifetime_total_net
avg_quantity_per_order
lifetime_total_tax
avg_tax_per_order
lifetime_total_discount
avg_discount_per_order
lifetime_total_shipping
avg_shipping_per_order
lifetime_total_shipping_with_discounts
lifetime_total_shipping_tax
avg_shipping_tax_per_order
avg_shipping_with_discounts_per_order
shopify__order_lines
(PR #49)restock_types
order_line_tax
shopify__transactions
(PR #49)payment_method
parent_kind
parent_created_timestamp
parent_amount
parent_status
PR #40 includes the following breaking changes:
- Dispatch update for dbt-utils to dbt-core cross-db macros migration. Specifically
{{ dbt_utils.<macro> }}
have been updated to{{ dbt.<macro> }}
for the below macros:any_value
bool_or
cast_bool_to_text
concat
date_trunc
dateadd
datediff
escape_single_quotes
except
hash
intersect
last_day
length
listagg
position
replace
right
safe_cast
split_part
string_literal
type_bigint
type_float
type_int
type_numeric
type_string
type_timestamp
array_append
array_concat
array_construct
- For
current_timestamp
andcurrent_timestamp_in_utc
macros, the dispatch AND the macro names have been updated to the below, respectively:dbt.current_timestamp_backcompat
dbt.current_timestamp_in_utc_backcompat
- Dependencies on
fivetran/fivetran_utils
have been upgraded, previously[">=0.3.0", "<0.4.0"]
now[">=0.4.0", "<0.5.0"]
.
π dbt v1.0.0 Compatibility π
-
Adjusts the
require-dbt-version
to now be within the range [">=1.0.0", "<2.0.0"]. Additionally, the package has been updated for dbt v1.0.0 compatibility. If you are using a dbt version <1.0.0, you will need to upgrade in order to leverage the latest version of the package.- For help upgrading your package, I recommend reviewing this GitHub repo's Release Notes on what changes have been implemented since your last upgrade.
- For help upgrading your dbt project to dbt v1.0.0, I recommend reviewing dbt-labs upgrading to 1.0.0 docs for more details on what changes must be made.
-
Upgrades the package dependency to refer to the latest
dbt_shopify_source
. Additionally, the latestdbt_shopify_source
package has a dependency on the latestdbt_fivetran_utils
. Further, the latestdbt_fivetran_utils
package also has a dependency ondbt_utils
[">=0.8.0", "<0.9.0"].- Please note, if you are installing a version of
dbt_utils
in yourpackages.yml
that is not in the range above then you will encounter a package dependency error.
- Please note, if you are installing a version of
-
The
union_schemas
andunion_databases
variables have been replaced withshopify_union_schemas
andshopify_union_databases
respectively. This allows for multiple packages with the union ability to be used and not locked to a single variable that is used across packages.
Refer to the relevant release notes on the Github repository for specific details for the previous releases. Thank you!