backfill/2024-04-29-fxa_events/frontend/convert_frontend.sql (83 lines of code) (raw):
CREATE TEMPORARY FUNCTION
replace_fractional_offset(timestamp_string STRING)
RETURNS STRING
LANGUAGE js AS """
// Regular expression to match fractional timezone offsets
const regex = /([+-])(\\d{1,2})\\.(\\d{1,2}):00/;
return timestamp_string.replace(regex, (match, sign, hours, fraction) => {
const minutes = Math.floor(parseFloat('0.' + fraction) * 60); // Converts the fractional part to minutes
return `${sign}${hours.padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;
});
""";
SELECT
additional_properties,
client_info,
document_id,
ARRAY(
SELECT
AS STRUCT
CASE
WHEN metrics.string.event_name LIKE 'email\\_%' THEN 'email'
WHEN metrics.string.event_name LIKE 'cached\\_login\\_%' THEN 'cached_login'
WHEN metrics.string.event_name LIKE 'cad\\_firefox\\_%' THEN 'cad_firefox'
WHEN metrics.string.event_name LIKE 'login\\_%' THEN 'login'
WHEN metrics.string.event_name LIKE 'password\\_reset\\_%' THEN 'password_reset'
WHEN metrics.string.event_name LIKE 'reg\\_%' THEN 'reg'
ELSE
ERROR('unknown event')
END
AS category, ARRAY(
SELECT
AS STRUCT
CASE metrics.string.event_reason
WHEN NULL THEN NULL
ELSE
'reason'
END
AS key,
CASE metrics.string.event_reason
WHEN NULL THEN NULL
ELSE
metrics.string.event_reason
END
AS value ) AS extra,
CASE
WHEN metrics.string.event_name LIKE 'email\\_%' THEN REGEXP_EXTRACT(metrics.string.event_name, r'email_(.*)')
WHEN metrics.string.event_name LIKE 'cached\\_login\\_%' THEN REGEXP_EXTRACT(metrics.string.event_name, r'cached_login_(.*)')
WHEN metrics.string.event_name LIKE 'cad\\_firefox\\_%' THEN REGEXP_EXTRACT(metrics.string.event_name, r'cad_firefox_(.*)')
WHEN metrics.string.event_name LIKE 'login\\_%' THEN REGEXP_EXTRACT(metrics.string.event_name, r'login_(.*)')
WHEN metrics.string.event_name LIKE 'password\\_reset\\_%' THEN REGEXP_EXTRACT(metrics.string.event_name, r'password_reset_(.*)')
WHEN metrics.string.event_name LIKE 'reg\\_%' THEN REGEXP_EXTRACT(metrics.string.event_name, r'reg_(.*)')
ELSE
ERROR('unknown event')
END
AS name, UNIX_MILLIS(mozfun.glean.parse_datetime(replace_fractional_offset(ping_info.end_time))) AS timestamp ) AS events,
metadata,
(
SELECT
AS STRUCT (
SELECT
AS STRUCT metrics.string.* EXCEPT (event_name,
event_reason)) AS string,
STRUCT (CAST(NULL AS STRING) AS glean_page_id) AS uuid,
-- boolean metric was added to accounts-events on 7/30
metrics.* EXCEPT (string, boolean)) AS metrics,
normalized_app_name,
normalized_channel,
normalized_country_code,
normalized_os,
normalized_os_version,
ping_info,
sample_id,
submission_timestamp
FROM
`moz-fx-data-shared-prod.accounts_frontend_stable.accounts_events_v1`
WHERE
DATE(submission_timestamp) = @submission_date
AND ( metrics.string.event_name LIKE 'email\\_%'
OR metrics.string.event_name LIKE 'cached\\_login\\_%'
OR metrics.string.event_name LIKE 'cad\\_firefox\\_%'
OR metrics.string.event_name LIKE 'cad\\_approve\\_device\\_%'
OR metrics.string.event_name LIKE 'cad\\_mobile\\_pair\\_%'
OR metrics.string.event_name LIKE 'login%'
OR metrics.string.event_name LIKE 'password\\_reset\\_%'
OR metrics.string.event_name LIKE 'reg%' )