dbt
Media engagement
Event Session Map
Event Session Map model for media engagement.
inferred
Blocks
event_session_map.sql · 35 lines
inferred
-- models/event_session_map.sql
{{ config(materialized='view') }}
select em.event_id
, em.event_type
, s.domain_userid
, s.session_id
, row_number() over(partition by s.session_id order by em.e_tstamp) as sess_em_seq_num
, FIRST_VALUE(em.event_type)
over (partition by em.domain_userid order by em.e_tstamp ROWS BETWEEN unbounded preceding AND unbounded following) as user_entry_event
, LAST_VALUE(em.event_type)
over (partition by s.session_id order by em.e_tstamp ROWS BETWEEN unbounded preceding AND unbounded following) as session_exit_event
from {{ ref('events_mapped_to_user') }} as em
inner join {{ ref('sessions') }} as s
on em.domain_userid = s.domain_userid
and em.e_tstamp >= s.session_start
and em.e_tstamp < s.next_session_start
-- limit 10
# models/schema.yml
version: 2
models:
- name: event_session_map
columns:
- name: event_id
tests:
- unique
- not_null
- name: event_type
- name: domain_userid
- name: session_id
- name: sess_em_seq_num
- name: user_entry_event
- name: session_exit_event
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 · 15 lines
source-preserved
validation: not checked
select em.event_id
, em.event_type
, s.domain_userid
, s.session_id
, row_number() over(partition by s.session_id order by em.e_tstamp) as sess_em_seq_num
, FIRST_VALUE(em.event_type)
over (partition by em.domain_userid order by em.e_tstamp ROWS BETWEEN unbounded preceding AND unbounded following) as user_entry_event
, LAST_VALUE(em.event_type)
over (partition by s.session_id order by em.e_tstamp ROWS BETWEEN unbounded preceding AND unbounded following) as session_exit_event
from ${events_mapped_to_user.SQL_TABLE_NAME} as em
inner join ${sessions.SQL_TABLE_NAME} as s
on em.domain_userid = s.domain_userid
and em.e_tstamp >= s.session_start
and em.e_tstamp < s.next_session_start
-- limit 10
event_session_map.view.lkml · 54 lines
inferred
view: event_session_map {
derived_table: {
sql: select em.event_id
, em.event_type
, s.domain_userid
, s.session_id
, row_number() over(partition by s.session_id order by em.e_tstamp) as sess_em_seq_num
, FIRST_VALUE(em.event_type)
over (partition by em.domain_userid order by em.e_tstamp ROWS BETWEEN unbounded preceding AND unbounded following) as user_entry_event
, LAST_VALUE(em.event_type)
over (partition by s.session_id order by em.e_tstamp ROWS BETWEEN unbounded preceding AND unbounded following) as session_exit_event
from ${events_mapped_to_user.SQL_TABLE_NAME} as em
inner join ${sessions.SQL_TABLE_NAME} as s
on em.domain_userid = s.domain_userid
and em.e_tstamp >= s.session_start
and em.e_tstamp < s.next_session_start
-- limit 10 ;;
}
dimension: event_id {
primary_key: yes
sql: ${TABLE}.event_id ;;
}
dimension: event_type {
sql: ${TABLE}.event_type ;;
}
dimension: domain_userid {
sql: ${TABLE}.domain_userid ;;
}
dimension: session_id {
sql: ${TABLE}.session_id ;;
}
dimension: sess_em_seq_num {
type: number
sql: ${TABLE}.sess_em_seq_num ;;
}
dimension: user_entry_event {
sql: ${TABLE}.user_entry_event ;;
}
dimension: session_exit_event {
sql: ${TABLE}.session_exit_event ;;
}
measure: count {
type: count
drill_fields: [drill_fields*]
}
}
event_session_map.view.lookml · 38 lines
source-preserved
- view: event_session_map
derived_table:
sql: select em.event_id
, em.event_type
, s.domain_userid
, s.session_id
, row_number() over(partition by s.session_id order by em.e_tstamp) as sess_em_seq_num
, FIRST_VALUE(em.event_type)
over (partition by em.domain_userid order by em.e_tstamp ROWS BETWEEN unbounded preceding AND unbounded following) as user_entry_event
, LAST_VALUE(em.event_type)
over (partition by s.session_id order by em.e_tstamp ROWS BETWEEN unbounded preceding AND unbounded following) as session_exit_event
from ${events_mapped_to_user.SQL_TABLE_NAME} as em
inner join ${sessions.SQL_TABLE_NAME} as s
on em.domain_userid = s.domain_userid
and em.e_tstamp >= s.session_start
and em.e_tstamp < s.next_session_start
-- limit 10
fields:
- dimension: event_id
primary_key: true
sql: ${TABLE}.event_id
- dimension: event_type
sql: ${TABLE}.event_type
- dimension: domain_userid
sql: ${TABLE}.domain_userid
- dimension: session_id
sql: ${TABLE}.session_id
- dimension: sess_em_seq_num
type: number
sql: ${TABLE}.sess_em_seq_num
- dimension: user_entry_event
sql: ${TABLE}.user_entry_event
- dimension: session_exit_event
sql: ${TABLE}.session_exit_event
- measure: count
type: count
drill_fields:
- drill_fields*
Contents
- event_session_map.sql
- event_session_map.sql
- event_session_map.view.lkml
- event_session_map.view.lookml