sql/moz-fx-data-shared-prod/firefox_desktop_derived/newtab_items_daily_v1/query.sql (84 lines of code) (raw):
WITH events_unnested AS (
SELECT
DATE(submission_timestamp) AS submission_date,
mozfun.norm.browser_version_info(client_info.app_display_version).major_version AS app_version,
normalized_channel AS channel,
metrics.string.newtab_locale AS locale,
normalized_country_code AS country,
timestamp AS event_timestamp,
category AS event_category,
name AS event_name,
extra AS event_details,
FROM
`moz-fx-data-shared-prod.firefox_desktop_stable.newtab_v1`,
UNNEST(events)
WHERE
DATE(submission_timestamp) = @submission_date
AND category IN ('pocket')
AND name IN ('impression', 'click', 'save', 'dismiss')
AND mozfun.norm.browser_version_info(
client_info.app_display_version
).major_version >= 121 -- the [Pocket team started using Glean](https://github.com/Pocket/dbt-snowflake/pull/459) from this version on. This prevents duplicates for previous releases.
),
flattened_events AS (
SELECT
submission_date,
SAFE_CAST(app_version AS INT64) AS app_version,
channel,
locale,
country,
event_category,
event_name,
mozfun.map.get_key(event_details, 'corpus_item_id') AS corpus_item_id,
SAFE_CAST(mozfun.map.get_key(event_details, 'position') AS INT64) AS position,
SAFE_CAST(mozfun.map.get_key(event_details, 'is_sponsored') AS BOOLEAN) AS is_sponsored,
SAFE_CAST(
mozfun.map.get_key(event_details, 'is_secton_followed') AS BOOLEAN
) AS is_section_followed,
mozfun.map.get_key(event_details, 'matches_selected_topic') AS matches_selected_topic,
mozfun.map.get_key(event_details, 'newtab_visit_id') AS newtab_visit_id,
SAFE_CAST(mozfun.map.get_key(event_details, 'received_rank') AS INT64) AS received_rank,
mozfun.map.get_key(event_details, 'section') AS section,
SAFE_CAST(mozfun.map.get_key(event_details, 'section_position') AS INT64) AS section_position,
mozfun.map.get_key(event_details, 'topic') AS topic,
FROM
events_unnested
)
SELECT
submission_date,
app_version,
channel,
locale,
country,
mozfun.newtab.scheduled_surface_id_v1(country, locale) AS scheduled_surface_id,
corpus_item_id,
position,
is_sponsored,
is_section_followed,
matches_selected_topic,
received_rank,
section,
section_position,
topic,
COUNTIF(event_name = 'impression') AS impression_count,
COUNTIF(event_name = 'click') AS click_count,
COUNTIF(event_name = 'save') AS save_count,
COUNTIF(event_name = 'dismiss') AS dismiss_count
FROM
flattened_events
GROUP BY
submission_date,
app_version,
channel,
locale,
country,
scheduled_surface_id,
corpus_item_id,
position,
is_sponsored,
is_section_followed,
matches_selected_topic,
received_rank,
section,
section_position,
topic