sql/moz-fx-data-shared-prod/telemetry_derived/unified_metrics_v1/query.sql (352 lines of code) (raw):
WITH unioned_source AS (
SELECT
submission_date,
normalized_channel,
client_id,
sample_id,
days_since_seen,
days_seen_bits,
days_created_profile_bits,
durations,
normalized_os,
normalized_os_version,
locale,
city,
country,
app_display_version,
device_model,
first_seen_date,
submission_date = first_seen_date AS is_new_profile,
uri_count,
is_default_browser,
CAST(NULL AS string) AS distribution_id,
isp,
'Fenix' AS normalized_app_name
FROM
`moz-fx-data-shared-prod.fenix.clients_last_seen_joined`
WHERE
submission_date = @submission_date
UNION ALL
SELECT
submission_date,
normalized_channel,
client_id,
sample_id,
days_since_seen,
days_seen_bits,
days_created_profile_bits,
durations,
normalized_os,
normalized_os_version,
locale,
city,
country,
app_display_version,
device_model,
first_seen_date,
submission_date = first_seen_date AS is_new_profile,
uri_count,
is_default_browser,
CAST(NULL AS string) AS distribution_id,
isp,
'Firefox iOS' AS normalized_app_name
FROM
`moz-fx-data-shared-prod.firefox_ios.clients_last_seen_joined`
WHERE
submission_date = @submission_date
UNION ALL
SELECT
submission_date,
normalized_channel,
client_id,
sample_id,
days_since_seen,
days_seen_bits,
days_created_profile_bits,
durations,
normalized_os,
normalized_os_version,
locale,
city,
country,
app_display_version,
device_model,
first_seen_date,
submission_date = first_seen_date AS is_new_profile,
uri_count,
is_default_browser,
CAST(NULL AS string) AS distribution_id,
isp,
'Focus iOS' AS normalized_app_name
FROM
`moz-fx-data-shared-prod.focus_ios.clients_last_seen_joined`
WHERE
submission_date = @submission_date
UNION ALL
SELECT
submission_date,
normalized_channel,
client_id,
`moz-fx-data-shared-prod.udf_js.sample_id`(client_id) AS sample_id,
days_since_seen,
days_seen_bits,
days_created_profile_bits,
durations,
os AS normalized_os,
osversion AS normalized_os_version,
locale,
city,
country,
metadata_app_version AS app_display_version,
device AS device_model,
first_seen_date,
submission_date = first_seen_date AS is_new_profile,
NULL AS uri_count,
default_browser AS is_default_browser,
distribution_id,
CAST(NULL AS string) AS isp,
'Focus Android' AS normalized_app_name
FROM
`moz-fx-data-shared-prod.telemetry.core_clients_last_seen`
WHERE
submission_date = @submission_date
AND app_name = 'Focus'
AND os = 'Android'
UNION ALL
SELECT
submission_date,
normalized_channel,
client_id,
sample_id,
days_since_seen,
days_seen_bits,
days_created_profile_bits,
durations,
normalized_os,
normalized_os_version,
locale,
city,
country,
app_display_version,
device_model,
first_seen_date,
submission_date = first_seen_date AS is_new_profile,
uri_count,
is_default_browser,
CAST(NULL AS string) AS distribution_id,
isp,
'Focus Android Glean' AS normalized_app_name
FROM
`moz-fx-data-shared-prod.focus_android.clients_last_seen_joined`
WHERE
submission_date = @submission_date
UNION ALL
SELECT
submission_date,
normalized_channel,
client_id,
sample_id,
days_since_seen,
days_seen_bits,
days_created_profile_bits,
durations,
normalized_os,
normalized_os_version,
locale,
city,
country,
app_display_version,
device_model,
first_seen_date,
submission_date = first_seen_date AS is_new_profile,
uri_count,
is_default_browser,
CAST(NULL AS string) AS distribution_id,
isp,
'Klar iOS' AS normalized_app_name
FROM
`moz-fx-data-shared-prod.klar_ios.clients_last_seen_joined`
WHERE
submission_date = @submission_date
),
unioned AS (
SELECT
* REPLACE (
-- Per bug 1757216 we need to exclude BrowserStack clients from KPIs,
-- so we mark them with a separate app name here. We expect BrowserStack
-- clients only on release channel of Fenix, so the only variant this is
-- expected to produce is 'Fenix BrowserStack'
IF(
isp = 'BrowserStack',
CONCAT(normalized_app_name, ' BrowserStack'),
normalized_app_name
) AS normalized_app_name
)
FROM
unioned_source
),
search_clients AS (
SELECT
client_id,
submission_date,
ad_click,
organic,
search_count,
search_with_ads
FROM
`moz-fx-data-shared-prod.search_derived.mobile_search_clients_daily_v1`
WHERE
submission_date = @submission_date
),
search_metrics AS (
SELECT
unioned.client_id,
unioned.submission_date,
-- the table is more than one row per client (one row per engine, looks like), so we have to aggregate.
SUM(ad_click) AS ad_click,
SUM(organic) AS organic_search_count,
SUM(search_count) AS search_count,
SUM(search_with_ads) AS search_with_ads,
FROM
unioned
LEFT JOIN
search_clients s
ON unioned.client_id = s.client_id
AND unioned.submission_date = s.submission_date
GROUP BY
client_id,
submission_date
),
mobile_with_searches AS (
SELECT
unioned.client_id,
unioned.sample_id,
CASE
WHEN BIT_COUNT(days_seen_bits)
BETWEEN 1
AND 6
THEN 'infrequent_user'
WHEN BIT_COUNT(days_seen_bits)
BETWEEN 7
AND 13
THEN 'casual_user'
WHEN BIT_COUNT(days_seen_bits)
BETWEEN 14
AND 20
THEN 'regular_user'
WHEN BIT_COUNT(days_seen_bits) >= 21
THEN 'core_user'
ELSE 'other'
END AS activity_segment,
unioned.normalized_app_name,
unioned.app_display_version AS app_version,
unioned.normalized_channel,
IFNULL(country, '??') country,
unioned.city,
unioned.days_seen_bits,
unioned.days_created_profile_bits,
DATE_DIFF(unioned.submission_date, unioned.first_seen_date, DAY) AS days_since_first_seen,
unioned.device_model,
unioned.isp,
unioned.is_new_profile,
unioned.locale,
unioned.first_seen_date,
unioned.days_since_seen,
unioned.normalized_os,
unioned.normalized_os_version,
COALESCE(
SAFE_CAST(NULLIF(SPLIT(unioned.normalized_os_version, ".")[SAFE_OFFSET(0)], "") AS INTEGER),
0
) AS os_version_major,
COALESCE(
SAFE_CAST(NULLIF(SPLIT(unioned.normalized_os_version, ".")[SAFE_OFFSET(1)], "") AS INTEGER),
0
) AS os_version_minor,
COALESCE(
SAFE_CAST(NULLIF(SPLIT(unioned.normalized_os_version, ".")[SAFE_OFFSET(2)], "") AS INTEGER),
0
) AS os_version_patch,
unioned.durations,
unioned.submission_date,
unioned.uri_count,
unioned.is_default_browser,
unioned.distribution_id,
CAST(NULL AS string) AS attribution_content,
CAST(NULL AS string) AS attribution_source,
CAST(NULL AS string) AS attribution_medium,
CAST(NULL AS string) AS attribution_campaign,
CAST(NULL AS string) AS attribution_experiment,
CAST(NULL AS string) AS attribution_variation,
search.ad_click,
search.organic_search_count,
search.search_count,
search.search_with_ads,
NULL AS active_hours_sum
FROM
unioned
LEFT JOIN
search_metrics search
ON search.client_id = unioned.client_id
AND search.submission_date = unioned.submission_date
),
desktop AS (
SELECT
client_id,
sample_id,
activity_segments_v1 AS activity_segment,
'Firefox Desktop' AS normalized_app_name,
app_version AS app_version,
normalized_channel,
IFNULL(country, '??') country,
city,
days_visited_1_uri_bits AS days_seen_bits,
days_created_profile_bits,
days_since_first_seen,
CAST(NULL AS string) AS device_model,
isp_name AS isp,
submission_date = first_seen_date AS is_new_profile,
locale,
first_seen_date,
days_since_seen,
os AS normalized_os,
normalized_os_version,
COALESCE(
CAST(NULLIF(SPLIT(normalized_os_version, ".")[SAFE_OFFSET(0)], "") AS INTEGER),
0
) AS os_version_major,
COALESCE(
CAST(NULLIF(SPLIT(normalized_os_version, ".")[SAFE_OFFSET(1)], "") AS INTEGER),
0
) AS os_version_minor,
COALESCE(
CAST(NULLIF(SPLIT(normalized_os_version, ".")[SAFE_OFFSET(2)], "") AS INTEGER),
0
) AS os_version_patch,
subsession_hours_sum AS durations,
submission_date,
COALESCE(
scalar_parent_browser_engagement_total_uri_count_normal_and_private_mode_sum,
scalar_parent_browser_engagement_total_uri_count_sum
) AS uri_count,
is_default_browser,
distribution_id,
attribution.content AS attribution_content,
attribution.source AS attribution_source,
attribution.medium AS attribution_medium,
attribution.campaign AS attribution_campaign,
attribution.experiment AS attribution_experiment,
attribution.variation AS attribution_variation,
ad_clicks_count_all AS ad_clicks,
search_count_organic AS organic_search_count,
search_count_all AS search_count,
search_with_ads_count_all AS search_with_ads,
active_hours_sum
FROM
`moz-fx-data-shared-prod.telemetry.clients_last_seen`
WHERE
submission_date = @submission_date
)
SELECT
*
FROM
mobile_with_searches
UNION ALL
SELECT
*
FROM
desktop