Skip to content

Instantly share code, notes, and snippets.

View markrittman's full-sized avatar

Mark Rittman markrittman

View GitHub Profile
@markrittman
markrittman / ten_next_pageviews_after_landing_page.sql
Created May 29, 2022 22:43
Return first ten page views after landing on a particular page using Segment
with events as (
select
anonymous_id,
user_id,
cast(null as string) as name,
cast(null as string) as email,
timestamp,
'page_view' as event_type,
concat(split(context_ip,'.')[safe_offset(0)],'.***.***.',split(context_ip,'.')[safe_offset(3)]) as context_ip,
context_page_path,
@markrittman
markrittman / landing_page_user_paths.sql
Last active December 30, 2022 10:23
Most common user paths from a given landing page
with events as (
select
anonymous_id,
user_id,
cast(null as string) as name,
cast(null as string) as email,
timestamp,
'page_view' as event_type,
concat(split(context_ip,'.')[safe_offset(0)],'.***.***.',split(context_ip,'.')[safe_offset(3)]) as context_ip,
context_page_path,
@markrittman
markrittman / segment_consideration_stage_journey.sql
Created May 29, 2022 13:28
Segment Events unioned with Identify Event, ID Stitched, User Details Backfilled and Events Grouped into User Consideration-Stage Journey
with events as (
select
anonymous_id,
user_id,
cast(null as string) as name,
cast(null as string) as email,
timestamp,
'page_view' as event_type,
concat(split(context_ip,'.')[safe_offset(0)],'.***.***.',split(context_ip,'.')[safe_offset(3)]) as context_ip,
context_page_path,
@markrittman
markrittman / segment_inferred_identity_stitching.sql
Created May 23, 2022 20:50
Example BigQuery SQL statement to stitch user identities together across multiple Segment and other sources based on inferred connections
with
meeting_bookings as # meetings have names and email addresses, but no anonymous_id
(
select
# union of three events that are logically the same but were recorded as three different events historically
id,
timestamp,
email as anonymous_id,
cast(null as string) as context_ip,
cast(null as string) as context_page_path,
@markrittman
markrittman / snowflake_dbt_setup.sql
Created March 2, 2022 17:24
Setup Script for Snowflake DW for use with dbt
use role accountadmin;
create or replace role loader;
create or replace role transformer;
create or replace role reporter;
create or replace role looker_role;
grant role loader to role sysadmin;
grant role transformer to role sysadmin;
grant role reporter to role sysadmin;
grant role looker_role to role sysadmin;
@markrittman
markrittman / bigquery_monthy_query_costs.sql
Created February 21, 2022 20:14
BigQuery Listing of Current Months' Queries Ordered by Cost, with Running Totals for Cost and % of All Cost
with
query_cost as (
select
date_trunc(date(creation_time),month) as billing_month,
user_email,
query,
job_type,
project_id,
priority,
concat(destination_table.dataset_id,'.',destination_table.table_id) as destination_table,
@markrittman
markrittman / snowplow_multi_touch_attribution.sql
Last active November 5, 2021 00:41
First, Last, Even-Click and Time-Decay Multi-Touch Attribution Model for Snowplow (BigQuery Standard SQL)
WITH
events AS (
SELECT
events_true_tstamp_time as event_ts,
events_user_fingerprint AS user_pseudo_id,
events_user_id as user_id,
mkt_network as channel,
events_mkt_medium as medium,
events_mkt_source as source,
events_mkt_campaign as campaign,
@markrittman
markrittman / ga4_session_event_counts.sql
Last active June 7, 2022 03:34
Count various event types for a GA4 session, whether user is returning and whether it's a bounced session and/or converting session
WITH events as (SELECT
user_pseudo_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_number') AS session_number,
replace(lower(event_name),' ','_') event_name,
count(*) events
FROM `ra-development.analytics_277223877.events_*`
GROUP BY
1, 2, 3, 4),
session_events_pivoted as (
@markrittman
markrittman / ga4_list_events_params.sql
Last active November 5, 2021 16:43
List out all GA4 events and parameters
SELECT
event_name,
event_params.key AS event_params_key
FROM
`ra-development.analytics_277223877.events_*` AS t
CROSS JOIN UNNEST (t.event_params) AS event_params
group by 1,2
order by 1,2
@markrittman
markrittman / ga4_sessions.sql
Created July 18, 2021 16:14
SQL Query to list out all sessions in GA4
SELECT
user_pseudo_id,
TIMESTAMP_MICROS(event_timestamp) AS session_start_ts,
CAST(LEAD(TIMESTAMP_MICROS(event_timestamp),1) OVER (PARTITION BY CONCAT(user_pseudo_id)
ORDER BY
event_timestamp) AS timestamp) AS session_end_ts,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_number') AS session_number,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_referrer') AS referrer,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'page_location') AS landing_page_path,