dbt Saas legislation

Event Session Map

Event Session Map model for saas legislation.

inferred

Blocks

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

select a.anonymous_id
            , a.sent_at
            , a.id
            , a.event
            , s.session_id
            , a.user_id
            , row_number() over(partition by s.session_id order by a.sent_at) as event_sequence_number
          from ember.tracks as a
          inner join {{ ref('application_sessions') }} as s
          on a.user_id = s.user_id
            and a.sent_at >= s.session_start_at
            and (a.sent_at < s.next_session_start_at or s.next_session_start_at is null)

# models/schema.yml
version: 2

models:
  - name: event_session_map
    columns:
      - name: anonymous_id
      - name: id
      - name: event
      - name: session_id
      - name: user_id
      - name: event_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.
event_session_map.sql · 12 lines
source-preserved validation: not checked
select a.anonymous_id
            , a.sent_at
            , a.id
            , a.event
            , s.session_id
            , a.user_id
            , row_number() over(partition by s.session_id order by a.sent_at) as event_sequence_number
          from ember.tracks as a
          inner join ${application_sessions.SQL_TABLE_NAME} as s
          on a.user_id = s.user_id
            and a.sent_at >= s.session_start_at
            and (a.sent_at < s.next_session_start_at or s.next_session_start_at is null)
event_session_map.view.lkml · 53 lines
inferred
view: event_session_map {
  derived_table: {
    sql: select a.anonymous_id
            , a.sent_at
            , a.id
            , a.event
            , s.session_id
            , a.user_id
            , row_number() over(partition by s.session_id order by a.sent_at) as event_sequence_number
          from ember.tracks as a
          inner join ${application_sessions.SQL_TABLE_NAME} as s
          on a.user_id = s.user_id
            and a.sent_at >= s.session_start_at
            and (a.sent_at < s.next_session_start_at or s.next_session_start_at is null) ;;
  }

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

  dimension: id {
    type: number
    sql: ${TABLE}.id ;;
  }

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

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

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

  dimension: event_sequence_number {
    type: number
    sql: ${TABLE}.event_sequence_number ;;
  }

  dimension_group: sent {
    type: time
    timeframes: [time, date, week, month]
    sql: ${TABLE}.sent_at ;;
  }

  measure: count {
    type: count
    drill_fields: [detail*]
  }
}
event_session_map.view.lookml · 41 lines
source-preserved
- view: event_session_map
  derived_table:
    sql: select a.anonymous_id
            , a.sent_at
            , a.id
            , a.event
            , s.session_id
            , a.user_id
            , row_number() over(partition by s.session_id order by a.sent_at) as event_sequence_number
          from ember.tracks as a
          inner join ${application_sessions.SQL_TABLE_NAME} as s
          on a.user_id = s.user_id
            and a.sent_at >= s.session_start_at
            and (a.sent_at < s.next_session_start_at or s.next_session_start_at is null)
  fields:
  - dimension: anonymous_id
    sql: ${TABLE}.anonymous_id
  - dimension: id
    type: number
    sql: ${TABLE}.id
  - dimension: event
    sql: ${TABLE}.event
  - dimension: session_id
    sql: ${TABLE}.session_id
  - dimension: user_id
    sql: ${TABLE}.user_id
  - dimension: event_sequence_number
    type: number
    sql: ${TABLE}.event_sequence_number
  - dimension_group: sent
    type: time
    timeframes:
    - time
    - date
    - week
    - month
    sql: ${TABLE}.sent_at
  - measure: count
    type: count
    drill_fields:
    - detail*

Contents

  • event_session_map.sql
  • event_session_map.sql
  • event_session_map.view.lkml
  • event_session_map.view.lookml