sql/moz-fx-data-shared-prod/fenix_derived/feature_usage_metrics_v2/query.sql (290 lines of code) (raw):

WITH baseline_clients AS ( SELECT submission_date AS dau_date, client_id, LEAD(submission_date) OVER (PARTITION BY client_id ORDER BY submission_date) AS next_dau FROM `moz-fx-data-shared-prod.fenix.baseline_clients_daily` WHERE submission_date >= DATE_SUB(@submission_date, INTERVAL 4 DAY) AND durations > 0 AND LOWER(COALESCE(isp, "")) <> "browserstack" AND LOWER(COALESCE(distribution_id, "")) <> "mozillaonline" ), client_attribution AS ( SELECT client_id, adjust_network, FROM `moz-fx-data-shared-prod.fenix.attribution_clients` ), metrics_dau AS ( -- assign a DAU date for each metric ping while keeping it de-duplicated SELECT m.*, MAX(dau_date) OVER (PARTITION BY document_id) AS dau_date FROM `moz-fx-data-shared-prod.fenix.metrics` m JOIN baseline_clients ON client_info.client_id = client_id -- offset by at least one to reflect metrics ping design considerations AND DATE_DIFF(DATE(submission_timestamp), dau_date, DAY) BETWEEN 1 AND 4 -- exclude metrics pings that should be matched to next DAU date AND DATE(submission_timestamp) <= DATE_ADD(next_dau, INTERVAL 1 DAY) WHERE DATE(submission_timestamp) BETWEEN DATE_SUB(@submission_date, INTERVAL 3 DAY) AND @submission_date QUALIFY ROW_NUMBER() OVER (PARTITION BY document_id ORDER BY submission_timestamp) = 1 ), metric_ping_clients_feature_usage AS ( SELECT dau_date, client_info.client_id, ARRAY_AGG(normalized_channel ORDER BY submission_timestamp DESC)[SAFE_OFFSET(0)] AS channel, ARRAY_AGG(normalized_country_code ORDER BY submission_timestamp DESC)[ SAFE_OFFSET(0) ] AS country, LOGICAL_OR(COALESCE(metrics.boolean.metrics_default_browser, FALSE)) AS is_default_browser, --Credential Management: Logins SUM(COALESCE(metrics.counter.logins_deleted, 0)) AS logins_deleted, SUM(COALESCE(metrics.counter.logins_modified, 0)) AS logins_modified, MAX(COALESCE(metrics.quantity.logins_saved_all, 0)) AS currently_stored_logins, --Credential Management: Credit Cards SUM(COALESCE(metrics.counter.credit_cards_deleted, 0)) AS credit_cards_deleted, MAX(COALESCE(metrics.quantity.credit_cards_saved_all, 0)) AS currently_stored_credit_cards, --Credential Management: Addresses SUM(COALESCE(metrics.counter.addresses_deleted, 0)) AS addresses_deleted, SUM(COALESCE(metrics.counter.addresses_updated, 0)) AS addresses_modified, MAX(COALESCE(metrics.quantity.addresses_saved_all, 0)) AS currently_stored_addresses, --Bookmark SUM( COALESCE( mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.metrics_bookmarks_add), 0 ) ) AS bookmarks_add, SUM( COALESCE( mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.metrics_bookmarks_delete), 0 ) ) AS bookmarks_delete, SUM( COALESCE( mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.metrics_bookmarks_edit), 0 ) ) AS bookmarks_edit, SUM( COALESCE( mozfun.map.extract_keyed_scalar_sum(metrics.labeled_counter.metrics_bookmarks_open), 0 ) ) AS bookmarks_open, SUM( COALESCE(metrics.counter.metrics_desktop_bookmarks_count, 0) ) AS metrics_desktop_bookmarks_count, SUM( COALESCE(metrics.counter.metrics_mobile_bookmarks_count, 0) ) AS metrics_mobile_bookmarks_count, CAST( MAX(COALESCE(metrics.boolean.metrics_has_desktop_bookmarks, FALSE)) AS INT64 ) AS metrics_has_desktop_bookmarks, CAST( MAX(COALESCE(metrics.boolean.metrics_has_mobile_bookmarks, FALSE)) AS INT64 ) AS metrics_has_mobile_bookmarks, --Privacy CAST( MAX( COALESCE(LOWER(metrics.string.preferences_enhanced_tracking_protection) = "standard", FALSE) ) AS INT64 ) AS etp_standard, CAST( MAX( COALESCE(LOWER(metrics.string.preferences_enhanced_tracking_protection) = "strict", FALSE) ) AS INT64 ) AS etp_strict, CAST( MAX( COALESCE(LOWER(metrics.string.preferences_enhanced_tracking_protection) = "custom", FALSE) ) AS INT64 ) AS etp_custom, CAST( MAX( COALESCE( LOWER(metrics.string.preferences_enhanced_tracking_protection) NOT IN ( 'custom', 'standard', 'strict' ), FALSE ) ) AS INT64 ) AS etp_disabled, --Tab count MAX( COALESCE(metrics.counter.metrics_private_tabs_open_count, 0) ) AS metrics_private_tabs_open_count, MAX(COALESCE(metrics.counter.metrics_tabs_open_count, 0)) AS metrics_tabs_open_count, --Default browser CAST( MAX(COALESCE(metrics.boolean.metrics_default_browser, FALSE)) AS INT64 ) AS metrics_default_browser, --Awesomebar Location CAST( MAX( COALESCE(metrics.string.preferences_toolbar_position_setting IN ('top', 'fixed_top'), FALSE) ) AS INT64 ) AS awesomebar_top, CAST( MAX(COALESCE(metrics.string.preferences_toolbar_position_setting = 'bottom', FALSE)) AS INT64 ) AS awesomebar_bottom, CAST( MAX( COALESCE( LOWER(metrics.string.preferences_toolbar_position_setting) NOT IN ( 'top', 'fixed_top', 'bottom' ), FALSE ) ) AS INT64 ) AS awesomebar_null, --Notification CAST( MAX(COALESCE(metrics.boolean.metrics_notifications_allowed, FALSE)) AS INT64 ) AS metrics_notifications_allowed, CAST( MAX(COALESCE(metrics.boolean.events_marketing_notification_allowed, FALSE)) AS INT64 ) AS events_marketing_notification_allowed, --Customize Homepage CAST( MAX(COALESCE(metrics.boolean.customize_home_contile, FALSE)) AS INT64 ) AS customize_home_contile, CAST( MAX(COALESCE(metrics.boolean.customize_home_jump_back_in, FALSE)) AS INT64 ) AS customize_home_jump_back_in, CAST( MAX(COALESCE(metrics.boolean.customize_home_most_visited_sites, FALSE)) AS INT64 ) AS customize_home_most_visited_sites, CAST( MAX(COALESCE(metrics.boolean.customize_home_pocket, FALSE)) AS INT64 ) AS customize_home_pocket, CAST( MAX(COALESCE(metrics.boolean.customize_home_recently_saved, FALSE)) AS INT64 ) AS customize_home_recently_saved, CAST( MAX(COALESCE(metrics.boolean.customize_home_recently_visited, FALSE)) AS INT64 ) AS customize_home_recently_visited FROM metrics_dau GROUP BY dau_date, client_id ) -- Aggregated feature usage SELECT @submission_date AS submission_date, dau_date AS metric_date, COUNT(DISTINCT client_id) AS clients, channel, country, adjust_network, is_default_browser, /*Logins*/ --logins deleted COUNT(DISTINCT IF(logins_deleted > 0, client_id, NULL)) AS logins_deleted_users, SUM(logins_deleted) AS logins_deleted, --logins modified COUNT(DISTINCT IF(logins_modified > 0, client_id, NULL)) AS logins_modified_users, SUM(logins_modified) AS logins_modified, --logins currently stored COUNT(DISTINCT IF(currently_stored_logins > 0, client_id, NULL)) AS currently_stored_logins_users, SUM(currently_stored_logins) AS currently_stored_logins, /*Credit Card*/ --credit card deleted COUNT(DISTINCT IF(credit_cards_deleted > 0, client_id, NULL)) AS credit_cards_deleted_users, SUM(credit_cards_deleted) AS credit_cards_deleted, --credit card currently stored COUNT( DISTINCT IF(currently_stored_credit_cards > 0, client_id, NULL) ) AS currently_stored_credit_cards_users, SUM(currently_stored_credit_cards) AS currently_stored_credit_cards, /*Address*/ --address deleted COUNT(DISTINCT IF(addresses_deleted > 0, client_id, NULL)) AS addresses_deleted_users, SUM(addresses_deleted) AS addresses_deleted, --address modified COUNT(DISTINCT IF(addresses_modified > 0, client_id, NULL)) AS addresses_modified_users, SUM(addresses_modified) AS addresses_modified, -- addresses currently stored COUNT( DISTINCT IF(currently_stored_addresses > 0, client_id, NULL) ) AS currently_stored_addresses_users, SUM(currently_stored_addresses) AS currently_stored_addresses, /*Bookmark*/ --bookmarks_add COUNT(DISTINCT IF(bookmarks_add > 0, client_id, NULL)) AS bookmarks_add_users, SUM(bookmarks_add) AS bookmarks_add, --bookmarks_delete COUNT(DISTINCT IF(bookmarks_delete > 0, client_id, NULL)) AS bookmarks_delete_users, SUM(bookmarks_delete) AS bookmarks_delete, --bookmarks_edit COUNT(DISTINCT IF(bookmarks_edit > 0, client_id, NULL)) AS bookmarks_edit_users, SUM(bookmarks_edit) AS bookmarks_edit, --bookmarks_open COUNT(DISTINCT IF(bookmarks_open > 0, client_id, NULL)) AS bookmarks_open_users, SUM(bookmarks_open) AS bookmarks_open, --metrics_desktop_bookmarks_count COUNT( DISTINCT IF(metrics_desktop_bookmarks_count > 0, client_id, NULL) ) AS metrics_desktop_bookmarks_count_users, SUM(metrics_desktop_bookmarks_count) AS metrics_desktop_bookmarks_count, --metrics_mobile_bookmarks_count COUNT( DISTINCT IF(metrics_mobile_bookmarks_count > 0, client_id, NULL) ) AS metrics_mobile_bookmarks_count_users, SUM(metrics_mobile_bookmarks_count) AS metrics_mobile_bookmarks_count, --metrics_has_desktop_bookmarks COUNT( DISTINCT IF(metrics_has_desktop_bookmarks > 0, client_id, NULL) ) AS metrics_has_desktop_bookmarks_users, SUM(metrics_has_desktop_bookmarks) AS metrics_has_desktop_bookmarks, --metrics_has_mobile_bookmarks COUNT( DISTINCT IF(metrics_has_mobile_bookmarks > 0, client_id, NULL) ) AS metrics_has_mobile_bookmarks_users, SUM(metrics_has_mobile_bookmarks) AS metrics_has_mobile_bookmarks, /*Privacy*/ --etp_standard COUNT(DISTINCT IF(etp_standard > 0, client_id, NULL)) AS etp_standard_users, SUM(etp_standard) AS etp_standard, --etp_strict COUNT(DISTINCT IF(etp_strict > 0, client_id, NULL)) AS etp_strict_users, SUM(etp_strict) AS etp_strict, --etp_custom COUNT(DISTINCT IF(etp_custom > 0, client_id, NULL)) AS etp_custom_users, SUM(etp_custom) AS etp_custom, --etp_disabled COUNT(DISTINCT IF(etp_disabled > 0, client_id, NULL)) AS etp_disabled_users, SUM(etp_disabled) AS etp_disabled, /*Tab Count*/ --metrics_private_tabs_open_count COUNT( DISTINCT IF(metrics_private_tabs_open_count > 0, client_id, NULL) ) AS metrics_private_tabs_open_count_users, SUM(metrics_private_tabs_open_count) AS metrics_private_tabs_open_count, --metrics_tabs_open_count COUNT(DISTINCT IF(metrics_tabs_open_count > 0, client_id, NULL)) AS metrics_tabs_open_count_users, SUM(metrics_tabs_open_count) AS metrics_tabs_open_count, /*Default Browser*/ --metrics_default_browser COUNT(DISTINCT IF(metrics_default_browser > 0, client_id, NULL)) AS metrics_default_browser_users, SUM(metrics_default_browser) AS metrics_default_browser, /*Awesomebar Location*/ --awesomebar_top COUNT(DISTINCT IF(awesomebar_top > 0, client_id, NULL)) AS awesomebar_top_users, --awesomebar_bottom COUNT(DISTINCT IF(awesomebar_bottom > 0, client_id, NULL)) AS awesomebar_bottom_users, --awesomebar_null COUNT(DISTINCT IF(awesomebar_null > 0, client_id, NULL)) AS awesomebar_null_users, /*Notificaion*/ --metrics_notifications_allowed COUNT( DISTINCT IF(metrics_notifications_allowed > 0, client_id, NULL) ) AS metrics_notifications_allowed_users, SUM(metrics_notifications_allowed) AS metrics_notifications_allowed, --events_marketing_notification_allowed COUNT( DISTINCT IF(events_marketing_notification_allowed > 0, client_id, NULL) ) AS events_marketing_notification_allowed_users, SUM(events_marketing_notification_allowed) AS events_marketing_notification_allowed, /*Customize Homepage*/ --customize_home_contile COUNT(DISTINCT IF(customize_home_contile > 0, client_id, NULL)) AS customize_home_contile_users, SUM(customize_home_contile) AS customize_home_contile, --customize_home_jump_back_in_users COUNT( DISTINCT IF(customize_home_jump_back_in > 0, client_id, NULL) ) AS customize_home_jump_back_in_users, SUM(customize_home_jump_back_in) AS customize_home_jump_back_in, --customize_home_most_visited_sites_users COUNT( DISTINCT IF(customize_home_most_visited_sites > 0, client_id, NULL) ) AS customize_home_most_visited_sites_users, SUM(customize_home_most_visited_sites) AS customize_home_most_visited_sites, --customize_home_pocket_users COUNT(DISTINCT IF(customize_home_pocket > 0, client_id, NULL)) AS customize_home_pocket_users, SUM(customize_home_pocket) AS customize_home_pocket, --customize_home_recently_saved_users COUNT( DISTINCT IF(customize_home_recently_saved > 0, client_id, NULL) ) AS customize_home_recently_saved_users, SUM(customize_home_recently_saved) AS customize_home_recently_saved, --customize_home_recently_visited_users COUNT( DISTINCT IF(customize_home_recently_visited > 0, client_id, NULL) ) AS customize_home_recently_visited_users, SUM(customize_home_recently_visited) AS customize_home_recently_visited FROM metric_ping_clients_feature_usage LEFT JOIN client_attribution USING (client_id) WHERE dau_date = DATE_SUB(@submission_date, INTERVAL 4 DAY) GROUP BY submission_date, metric_date, channel, country, adjust_network, is_default_browser