Skip to main content

🚨 Required Action

All usage of the Buckets Breakdown schema must be migrated to the aggregate_mta table by October 30, 2025. After this date, Buckets Breakdown tables will stop receiving updates (historical data will remain queryable).

What’s Changing

  • New table: aggregate_mta replaces all Buckets Breakdown tables in your data share.
  • Rolled out alongside existing tables so you can build and test without impacting production.
  • aggregate_mta is fully backfilled to your first clean reporting date in Rockerbox.

Key Benefits

  • Significantly faster and more reliable delivery of aggregate attribution and spend — KPIs are available before your stakeholders start their day.
  • Fewer tables to query and manage with all aggregate attribution data across all conversion events available in one streamlined reporting table.

Migration Timeline

  • Migration window: 8 weeks to cut over to aggregate_mta.
  • Deprecation date: October 30, 2025 — Buckets Breakdown tables stop receiving updates.
  • Backfill: At least 1 year of history (or as far back as clean reporting date) available now. Full history available by October 30, 2025.
  • Live Q&A Sessions: Two sessions with Product team (early and late in the migration window).
📜 Historical Access: Historical data in Buckets Breakdown tables will still be available after the deprecation date. We do not intend to remove these tables at this point in time.

Migration Guidance

General Notes

  • Rockerbox will not drop or rename existing Buckets Breakdown tables so as to not break your production reporting.
  • Create views to replicate Buckets Breakdown tables, suffixed with _v2
  • Change the table reference in all queries to point to the view.
  • If you don’t want to create backwards compatible views, then review the Schema Differences section below for a full accounting of the changes.
⚠️ Important: If merging aggregate_mta with historical data sourced from Buckets Breakdown schema, then lowercase all platform_join_key and taxonomy columns (tier_1tier_5) in the historical data from the Buckets Breakdown source table to ensure consistency. Example:
LOWER(tier_1) AS tier_1

Snowflake Instructions

Pre-Requisites

  • Local database and schema where you can define views.
Note: Rockerbox shares data via Secure Data Sharing. The shared database is read-only.

SQL Statement

CREATE OR REPLACE VIEW <TARGET_DB>.<TARGET_SCHEMA>.<VIEW_NAME> AS
SELECT
    advertiser,
    currency_code,
    date,
    SUM(even)                      AS even,
    SUM(first_touch)               AS first_touch,
    fx_rate_to_usd,
    conversion_event_id            AS identifier,
    SUM(last_touch)                AS last_touch,
    SUM(normalized)                AS normalized,
    SUM(ntf_even)                  AS ntf_even,
    SUM(ntf_first_touch)           AS ntf_first_touch,
    SUM(ntf_last_touch)            AS ntf_last_touch,
    SUM(ntf_normalized)            AS ntf_normalized,
    SUM(ntf_revenue_even)          AS ntf_revenue_even,
    SUM(ntf_revenue_first_touch)   AS ntf_revenue_first_touch,
    SUM(ntf_revenue_last_touch)    AS ntf_revenue_last_touch,
    SUM(ntf_revenue_normalized)    AS ntf_revenue_normalized,
    platform,
    LOWER(platform_join_key)       AS platform_join_key,
    MAX(rb_sync_id)                AS rb_sync_id,
    report,
    SUM(revenue_even)              AS revenue_even,
    SUM(revenue_first_touch)       AS revenue_first_touch,
    SUM(revenue_last_touch)        AS revenue_last_touch,
    SUM(revenue_normalized)        AS revenue_normalized,
    SUM(included_spend)            AS spend,
    LOWER(tier_1)                  AS tier_1,
    LOWER(tier_2)                  AS tier_2,
    LOWER(tier_3)                  AS tier_3,
    LOWER(tier_4)                  AS tier_4,
    LOWER(tier_5)                  AS tier_5,
    'attribution'                  AS type,
    MAX(updated_at)                AS updated_at
FROM <SOURCE_DB>.<SOURCE_SCHEMA>.<SOURCE_TABLE>
WHERE conversion_event_id = <12345>
GROUP BY
    advertiser,
    currency_code,
    date,
    fx_rate_to_usd,
    conversion_event_id,
    platform,
    platform_join_key,
    report,
    tier_1,
    tier_2,
    tier_3,
    tier_4,
    tier_5,
    type;

SQL Parameters

ParameterDescription
TARGET_DBDatabase where the view will reside
TARGET_SCHEMASchema where the view will reside
VIEW_NAMEName of the view (match source table name + suffix, e.g. _v2)
CONVERSION_EVENT_IDConversion ID to filter on (match Buckets Breakdown table)
SOURCE_DBRockerbox-shared database
SOURCE_SCHEMARockerbox-shared schema
SOURCE_TABLERockerbox Buckets Breakdown source table

BigQuery Instructions

Pre-Requisites

  • A project created with BigQuery resource enabled.
  • A dataset within the aforementioned project.
Note: these are the same pre-requisites for connecting Rockerbox with BigQuery, so there is no need to create a new project and for the specific purpose of creating these compatibility views.

SQL Statement

CREATE OR REPLACE VIEW `<TARGET_PROJECT>.<TARGET_DATASET>.<VIEW_NAME>` AS
SELECT
    LOWER(tier_1)                 AS tier_1,
    LOWER(tier_2)                 AS tier_2,
    LOWER(tier_3)                 AS tier_3,
    LOWER(tier_4)                 AS tier_4,
    LOWER(tier_5)                 AS tier_5,
    platform,
    LOWER(platform_join_key)      AS platform_join_key,
    SUM(first_touch)              AS first_touch,
    SUM(ntf_first_touch)          AS ntf_first_touch,
    SUM(revenue_first_touch)      AS revenue_first_touch,
    SUM(ntf_revenue_first_touch)  AS ntf_revenue_first_touch,
    SUM(last_touch)               AS last_touch,
    SUM(ntf_last_touch)           AS ntf_last_touch,
    SUM(revenue_last_touch)       AS revenue_last_touch,
    SUM(ntf_revenue_last_touch)   AS ntf_revenue_last_touch,
    SUM(even)                     AS even,
    SUM(ntf_even)                 AS ntf_even,
    SUM(revenue_even)             AS revenue_even,
    SUM(ntf_revenue_even)         AS ntf_revenue_even,
    SUM(normalized)               AS normalized,
    SUM(ntf_normalized)           AS ntf_normalized,
    SUM(revenue_normalized)       AS revenue_normalized,
    SUM(ntf_revenue_normalized)   AS ntf_revenue_normalized,
    SUM(included_spend)           AS spend,
    currency_code,
    fx_rate_to_usd,
    MAX(rb_sync_id)               AS rb_sync_id,
    MAX(updated_at)               AS updated_at,
    date
FROM `<SOURCE_PROJECT>.<SOURCE_DATASET>.<SOURCE_TABLE>`
WHERE conversion_event_id = <12345>
GROUP BY
    tier_1,
    tier_2,
    tier_3,
    tier_4,
    tier_5,
    platform,
    platform_join_key,
    currency_code,
    fx_rate_to_usd,
    date;

SQL Parameters

ParameterDescription
TARGET_PROJECTProject where the view will reside
TARGET_DATASETDataset where the view will reside
VIEW_NAMEName of the view (match source table name + suffix, e.g. _v2)
CONVERSION_EVENT_IDConversion ID to filter on (match Buckets Breakdown table)
SOURCE_PROJECTRockerbox-shared project
SOURCE_DATASETRockerbox-shared dataset
SOURCE_TABLERockerbox Buckets Breakdown source table

Redshift Instructions

Pre-Requisites

  • Local database and schema where you can define views.
  • USAGE permissions on Rockerbox external schema (Glue + S3).
Note: External schema used to share data is read-only.

SQL Statement

CREATE OR REPLACE VIEW <target_db>.<target_schema>.<view_name> AS
SELECT
    LOWER(tier_1)                AS tier_1,
    LOWER(tier_2)                AS tier_2,
    LOWER(tier_3)                AS tier_3,
    LOWER(tier_4)                AS tier_4,
    LOWER(tier_5)                AS tier_5,
    platform,
    LOWER(platform_join_key)     AS platform_join_key,
    SUM(first_touch)             AS first_touch,
    SUM(ntf_first_touch)         AS ntf_first_touch,
    SUM(revenue_first_touch)     AS revenue_first_touch,
    SUM(ntf_revenue_first_touch) AS ntf_revenue_first_touch,
    SUM(last_touch)              AS last_touch,
    SUM(ntf_last_touch)          AS ntf_last_touch,
    SUM(revenue_last_touch)      AS revenue_last_touch,
    SUM(ntf_revenue_last_touch)  AS ntf_revenue_last_touch,
    SUM(even)                    AS even,
    SUM(ntf_even)                AS ntf_even,
    SUM(revenue_even)            AS revenue_even,
    SUM(ntf_revenue_even)        AS ntf_revenue_even,
    SUM(normalized)              AS normalized,
    SUM(ntf_normalized)          AS ntf_normalized,
    SUM(revenue_normalized)      AS revenue_normalized,
    SUM(ntf_revenue_normalized)  AS ntf_revenue_normalized,
    SUM(included_spend)          AS spend,
    currency_code,
    fx_rate_to_usd,
    MAX(rb_sync_id)              AS rb_sync_id,
    MAX(updated_at)              AS updated_at,
    "date"                       AS date
FROM <source_db>.<source_schema>.<source_table>
WHERE conversion_event_id = <12345>
GROUP BY
    tier_1,
    tier_2,
    tier_3,
    tier_4,
    tier_5,
    platform,
    platform_join_key,
    currency_code,
    fx_rate_to_usd,
    "date"
WITH NO SCHEMA BINDING;

SQL Parameters

ParameterDescription
TARGET_DBDatabase where the view will reside
TARGET_SCHEMASchema where the view will reside
VIEW_NAMEName of the view (match source table name + suffix, e.g. _v2)
CONVERSION_EVENT_IDConversion ID to filter on (match Buckets Breakdown table)
SOURCE_DBRockerbox external database
SOURCE_SCHEMARockerbox external schema
SOURCE_TABLERockerbox Buckets Breakdown source table

Schema Differences

Full Schema Diff

ChangeLegacy Schema (Buckets Breakdown)Legacy TypeNew Schema (Aggregate MTA)New TypeNotes
RemovedtypestrOnly visible in Snowflake
reportstrreportstrOnly visible in Snowflake
AddedversionstrOnly visible in Snowflake
Addedpartitionstr
advertiserstradvertiserstrOnly visible in Snowflake
Added/Renamedidentifierintconversion_event_idintRedshift/BigQuery: new column; Snowflake: renamed identifier
datedatedatedate
tier_1strtier_1str
tier_2strtier_2str
tier_3strtier_3str
tier_4strtier_4str
tier_5strtier_5str
platformstrplatformstr
platform_join_keystrplatform_join_keystr
Addedconversion_event_namestr
first_touchintfirst_touchint
ntf_first_touchintntf_first_touchint
revenue_first_touchfloatrevenue_first_touchfloat
ntf_revenue_first_touchfloatntf_revenue_first_touchfloat
last_touchintlast_touchint
ntf_last_touchintntf_last_touchint
revenue_last_touchfloatrevenue_last_touchfloat
ntf_revenue_last_touchfloatntf_revenue_last_touchfloat
evenfloatevenfloat
ntf_evenfloatntf_evenfloat
revenue_evenfloatrevenue_evenfloat
ntf_revenue_evenfloatntf_revenue_evenfloat
normalizedfloatrevenue_evenfloat
ntf_normalizedfloatntf_normalizedfloat
revenue_normalizedfloatrevenue_normalizedfloat
ntf_revenue_normalizedfloatntf_revenue_normalizedfloat
Renamedspendfloatincluded_spendfloat
currency_codestrcurrency_codestr
fx_rate_to_usdfloatfx_rate_to_usdfloat
rb_sync_idintrb_sync_idint
updated_attimestampupdated_attimestamp

Many Tables > One Table

  • Before: One table per conversion event.
    • N tables: buckets_breakdown_add_to_cart, buckets_breakdown_purchase
  • After: One unified table includes conversion_event_id and conversion_event_name for segmentation.
    • One new table: aggregate_mta
  • Guidance: Add a filter to replicate current table behavior.
    • WHERE conversion_event_name = <name>

Partitioned Rows

  • Before: Spend and attributed conversions/revenue in the same row.
  • After: Attribute conversions/revenue in row where partition=mta; spend in separate row where partition=included_spend.
  • Guidance: Aggregate (SUM) metrics across relevant dimension columns (date, tier_1, tier_2, etc.) to compute KPIs such as CPA and ROAS.
🚨 Rows may look duplicated compared to the Buckets Breakdown schema because attribution and spend data are now split across separate rows. This is expected behavior.
Sample SQL (works in Redshift, BigQuery, Snowflake):
SELECT
    date,
    tier_1,
    tier_2,
    SUM(even)           AS even,
    SUM(included_spend) AS spend
FROM aggregate_mta
GROUP BY date, tier_1, tier_2;

Case Differences

  • Issue: platform_join_key and tier_1 through tier_5 may have inconsistent case vs. legacy tables in certain instances.
  • Guidance: Apply LOWER() in queries before joining or merging data from aggregate_mta with ANY of the legacy schemas.