SQL Advertising automotive

Paid Campaign List Calc

Paid Campaign List Calc model for advertising automotive.

source-preserved

Blocks

paid_campaign_list_calc.sql · 41 lines
inferred
-- models/paid_campaign_list_calc.sql
{{ config(materialized='view') }}

SELECT
app_id,
domain_userid,
domain_sessionidx,
mkt_source,
mkt_medium,
mkt_campaign
FROM (
  SELECT
  app_id,
  domain_userid,
  domain_sessionidx,
  FIRST_VALUE(mkt_source)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_source,
  FIRST_VALUE(mkt_medium)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_medium,
  FIRST_VALUE(mkt_campaign)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_campaign
  FROM atomic.events
  WHERE mkt_source IS NOT NULL
) t
GROUP BY 1,2,3,4,5,6

# models/schema.yml
version: 2

models:
  - name: paid_campaign_list_calc
    columns:
      - name: application_id
      - name: user_id
      - name: session_index

Assumptions

  • materialized='view' is the default; no persist hint found.
  • schema.yml columns come from view dimensions; a primary_key dimension gets unique + not_null tests.
paid_campaign_list_calc.sql · 28 lines
source-preserved validation: parses
SELECT
app_id,
domain_userid,
domain_sessionidx,
mkt_source,
mkt_medium,
mkt_campaign
FROM (
  SELECT
  app_id,
  domain_userid,
  domain_sessionidx,
  FIRST_VALUE(mkt_source)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_source,
  FIRST_VALUE(mkt_medium)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_medium,
  FIRST_VALUE(mkt_campaign)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_campaign
  FROM atomic.events
  WHERE mkt_source IS NOT NULL
) t
GROUP BY 1,2,3,4,5,6
paid_campaign_list_calc.view.lkml · 48 lines
inferred
view: paid_campaign_list_calc {
  derived_table: {
    sql: SELECT
app_id,
domain_userid,
domain_sessionidx,
mkt_source,
mkt_medium,
mkt_campaign
FROM (
  SELECT
  app_id,
  domain_userid,
  domain_sessionidx,
  FIRST_VALUE(mkt_source)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_source,
  FIRST_VALUE(mkt_medium)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_medium,
  FIRST_VALUE(mkt_campaign)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_campaign
  FROM atomic.events
  WHERE mkt_source IS NOT NULL
) t
GROUP BY 1,2,3,4,5,6 ;;
  }

  dimension: application_id {
    sql: ${TABLE}.app_id ;;
  }

  dimension: user_id {
    sql: ${TABLE}.domain_userid ;;
  }

  dimension: session_index {
    sql: ${TABLE}.domain_sessionidx ;;
  }

  measure: count {
    type: count
  }
}
paid_campaign_list_calc.view.lookml · 39 lines
source-preserved
- view: paid_campaign_list_calc
  derived_table:
    sql: SELECT
app_id,
domain_userid,
domain_sessionidx,
mkt_source,
mkt_medium,
mkt_campaign
FROM (
  SELECT
  app_id,
  domain_userid,
  domain_sessionidx,
  FIRST_VALUE(mkt_source)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_source,
  FIRST_VALUE(mkt_medium)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_medium,
  FIRST_VALUE(mkt_campaign)
    OVER (PARTITION BY app_id, domain_userid, domain_sessionidx
    ORDER BY dvce_tstamp
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS mkt_campaign
  FROM atomic.events
  WHERE mkt_source IS NOT NULL
) t
GROUP BY 1,2,3,4,5,6
  fields:
  - dimension: application_id
    sql: ${TABLE}.app_id
  - dimension: user_id
    sql: ${TABLE}.domain_userid
  - dimension: session_index
    sql: ${TABLE}.domain_sessionidx
  - measure: count
    type: count

Contents

  • paid_campaign_list_calc.sql
  • paid_campaign_list_calc.sql
  • paid_campaign_list_calc.view.lkml
  • paid_campaign_list_calc.view.lookml