dbt Saas cloud infrastructure

Track Facts

Track Facts model for saas cloud infrastructure.

inferred

Blocks

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

select t.anonymous_id
    , t.sent_at
    , t.event_id
    , t.event
    , s.session_id
    , t.looker_visitor_id
    , row_number() over(partition by s.session_id order by t.sent_at) as track_sequence_number
  from {{ ref('mapped_tracks') }} as t
  inner join {{ ref('sessions_trk') }} as s
  on t.looker_visitor_id = s.looker_visitor_id
    and t.sent_at >= s.session_start_at
    and (t.sent_at < s.next_session_start_at or s.next_session_start_at is null)

# models/schema.yml
version: 2

models:
  - name: track_facts
    columns:
      - name: event_id
        tests:
          - unique
          - not_null
      - name: event
      - name: session_id
      - name: looker_visitor_id
      - name: sequence_number

Assumptions

  • Each ${view.SQL_TABLE_NAME} was mapped to {{ ref('view') }}; confirm a dbt model exists for each referenced view.
  • 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.
track_facts.sql · 12 lines
source-preserved validation: not checked
select t.anonymous_id
    , t.sent_at
    , t.event_id
    , t.event
    , s.session_id
    , t.looker_visitor_id
    , row_number() over(partition by s.session_id order by t.sent_at) as track_sequence_number
  from ${mapped_tracks.SQL_TABLE_NAME} as t
  inner join ${sessions_trk.SQL_TABLE_NAME} as s
  on t.looker_visitor_id = s.looker_visitor_id
    and t.sent_at >= s.session_start_at
    and (t.sent_at < s.next_session_start_at or s.next_session_start_at is null)
track_facts.view.lkml · 44 lines
inferred
view: track_facts {
  derived_table: {
    sql: select t.anonymous_id
    , t.sent_at
    , t.event_id
    , t.event
    , s.session_id
    , t.looker_visitor_id
    , row_number() over(partition by s.session_id order by t.sent_at) as track_sequence_number
  from ${mapped_tracks.SQL_TABLE_NAME} as t
  inner join ${sessions_trk.SQL_TABLE_NAME} as s
  on t.looker_visitor_id = s.looker_visitor_id
    and t.sent_at >= s.session_start_at
    and (t.sent_at < s.next_session_start_at or s.next_session_start_at is null) ;;
  }

  dimension: event_id {
    primary_key: yes
    hidden: yes
    sql: ${TABLE}.event_id ;;
  }

  dimension: event {
    sql: ${TABLE}.event ;;
  }

  dimension: session_id {
    sql: ${TABLE}.session_id ;;
  }

  dimension: looker_visitor_id {
    sql: ${TABLE}.looker_visitor_id ;;
  }

  dimension: sequence_number {
    type: number
    sql: ${TABLE}.track_sequence_number ;;
  }

  measure: count_visitors {
    type: count_distinct
    sql: ${looker_visitor_id} ;;
  }
}
track_facts.view.lookml · 31 lines
source-preserved
- view: track_facts
  derived_table:
    sql: select t.anonymous_id
    , t.sent_at
    , t.event_id
    , t.event
    , s.session_id
    , t.looker_visitor_id
    , row_number() over(partition by s.session_id order by t.sent_at) as track_sequence_number
  from ${mapped_tracks.SQL_TABLE_NAME} as t
  inner join ${sessions_trk.SQL_TABLE_NAME} as s
  on t.looker_visitor_id = s.looker_visitor_id
    and t.sent_at >= s.session_start_at
    and (t.sent_at < s.next_session_start_at or s.next_session_start_at is null)
  fields:
  - dimension: event_id
    primary_key: true
    hidden: true
    sql: ${TABLE}.event_id
  - dimension: event
    sql: ${TABLE}.event
  - dimension: session_id
    sql: ${TABLE}.session_id
  - dimension: looker_visitor_id
    sql: ${TABLE}.looker_visitor_id
  - dimension: sequence_number
    type: number
    sql: ${TABLE}.track_sequence_number
  - measure: count_visitors
    type: count_distinct
    sql: ${looker_visitor_id}

Contents

  • track_facts.sql
  • track_facts.sql
  • track_facts.view.lkml
  • track_facts.view.lookml