Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,31 +1,59 @@
{{ config(materialized="incremental", unique_key="canonical_segment_id") }}

with
first_touch_anonymous as (
all_sessions as (
select
anonymous_id,
canonical_segment_id_with_fallback as canonical_segment_id,
min(session_start_tstamp) as record_timestamp
referrer_source as src,
referrer_medium as med,
referrer_id as id,
session_start_tstamp as ts
from {{ ref("int_segment__sessions") }}
),

agg as (
select
canonical_segment_id,
anonymous_id,
array_agg(struct(src, med, id, ts) order by ts) as all_touches,
array_agg(
if(
src in ('direct', 'session_continue'),
null,
struct(src, med, id, ts)
)
ignore nulls
order by ts
) as non_direct_touches
from all_sessions
group by 1, 2
),

first_touch_canonical as (
select
fa.anonymous_id,
fa.canonical_segment_id,
fa.record_timestamp,
s.referrer_id,
s.referrer_source,
s.referrer_medium
from first_touch_anonymous as fa
left join
{{ ref("int_segment__sessions") }} as s
on fa.anonymous_id = s.anonymous_id
and fa.record_timestamp = s.session_start_tstamp
canonical_segment_id,
anonymous_id,
coalesce(
(non_direct_touches[safe_offset(0)]).src,
(all_touches[safe_offset(0)]).src
) as referrer_source,
coalesce(
(non_direct_touches[safe_offset(0)]).med,
(all_touches[safe_offset(0)]).med
) as referrer_medium,
coalesce(
(non_direct_touches[safe_offset(0)]).id,
(all_touches[safe_offset(0)]).id
) as referrer_id,
coalesce(
(non_direct_touches[safe_offset(0)]).ts,
(all_touches[safe_offset(0)]).ts
) as record_timestamp
from agg
qualify
row_number() over (
partition by fa.canonical_segment_id order by fa.record_timestamp asc
partition by canonical_segment_id order by record_timestamp asc
)
= 1
)
Expand Down
Loading