feat(DENG-2083): added firefox_ios_derived.clients_activation_v1 and corresponding view (#4631)

* added firefox_ios_derived.clients_activation_v1 and corresponding view

* fixing a missing seperator in firefox_ios_derived.clients_activation_v1 checks

* adding firefox_ios_derived.clients_activation_v1 to shredder configuration

* removed is_suspicious_device_client as it should not be there, thanks bani for pointing this out

* fixed black formatting error inside shredder/config.py

* applied bqetl formatting

* minor styling tweak as suggested by bani in PR#4631
This commit is contained in:
kik-kik 2023-12-05 12:42:39 +01:00 коммит произвёл GitHub
Родитель 0bf4c279d6
Коммит 076a0e0775
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
6 изменённых файлов: 163 добавлений и 0 удалений

Просмотреть файл

@ -161,6 +161,9 @@ DELETE_TARGETS: DeleteIndex = {
client_id_target(table="fenix_derived.new_profile_activation_v1"): FENIX_SRC,
client_id_target(table="fenix_derived.firefox_android_clients_v1"): FENIX_SRC,
client_id_target(table="search_derived.acer_cohort_v1"): DESKTOP_SRC,
client_id_target(
table="firefox_ios_derived.clients_activation_v1"
): FIREFOX_IOS_SRC,
client_id_target(
table="search_derived.mobile_search_clients_daily_v1"
): DESKTOP_SRC,

Просмотреть файл

@ -0,0 +1,7 @@
CREATE OR REPLACE VIEW
`moz-fx-data-shared-prod.firefox_ios.clients_activation`
AS
SELECT
*
FROM
`moz-fx-data-shared-prod.firefox_ios_derived.clients_activation_v1`

Просмотреть файл

@ -0,0 +1,30 @@
#fail
{{ is_unique(["client_id"]) }}
#fail
{{ min_row_count(1, "`submission_date` = @submission_date") }}
#fail
WITH upstream_clients_count AS (
SELECT COUNT(*)
FROM `{{ project_id }}.firefox_ios.firefox_ios_clients`
WHERE first_seen_date = DATE_SUB(@submission_date, INTERVAL 6 DAY)
),
activations_clients_count AS (
SELECT COUNT(*)
FROM `{{ project_id }}.{{ dataset_id }}.{{ table_name }}`
WHERE submission_date = @submission_date
)
SELECT
IF(
(SELECT * FROM upstream_clients_count) <> (SELECT * FROM activations_clients_count),
ERROR("Number of client records should match for the same first_seen_date."),
NULL
);
#fail
SELECT
IF(
DATE_DIFF(submission_date, first_seen_date, DAY) <> 6,
ERROR("Day difference between values inside first_seen_date and submission_date fields should be 6."),
NULL
)
FROM `{{ project_id }}.{{ dataset_id }}.{{ table_name }}`
WHERE `submission_date` = @submission_date;

Просмотреть файл

@ -0,0 +1,26 @@
friendly_name: Clients Activation (Firefox iOS)
description: |-
Mobile activation metric used for Marketing campaign performance.
A records per client indicating whether they became activated.
Activated means, a week has elapsed since the client was first seen
and within days 2 and 7 they had at least one instance of activity along
along with at least 1 search count.
owners:
- vsabino@mozilla.com
- kik@mozilla.com
labels:
incremental: true
bigquery:
time_partitioning:
type: day
field: submission_date
require_partition_filter: false
expiration_days: null
clustering:
fields:
- sample_id
scheduling:
dag_name: bqetl_firefox_ios
date_partition_parameter: submission_date
depends_on_past: false

Просмотреть файл

@ -0,0 +1,66 @@
-- This table implements the Mobile activation metric defined in June 2022
-- Based on data from the first seven days since profile creation, we select
-- clients with at least three days of use (first open plus two) and who
-- perform a search on the later half of the week. As such, this table will
-- always lag new profiles by seven days and the CTEs are filtered for
-- corresponding periods.
-- Each entry in this table corresponds to a new_profile
WITH new_clients AS (
SELECT
client_id,
first_seen_date,
sample_id,
channel,
FROM
firefox_ios.firefox_ios_clients
WHERE
first_seen_date = DATE_SUB(@submission_date, INTERVAL 6 DAY)
),
new_clients_activity AS (
SELECT
client_id,
first_seen_date,
sample_id,
normalized_channel AS channel,
ARRAY_LENGTH(
mozfun.bits28.to_dates(mozfun.bits28.range(days_seen_bits, -5, 6), submission_date)
) AS days_2_7,
FROM
firefox_ios.baseline_clients_last_seen
WHERE
submission_date = @submission_date
AND DATE_DIFF(submission_date, first_seen_date, DAY) = 6
),
clients_search AS (
SELECT
client_id,
sample_id,
channel,
SUM(search_count) AS search_count
FROM
search_derived.mobile_search_clients_daily_v1
WHERE
(submission_date BETWEEN DATE_SUB(@submission_date, INTERVAL 3 DAY) AND @submission_date)
AND os = 'iOS'
AND normalized_app_name = 'Fennec'
GROUP BY
client_id,
sample_id,
channel
)
SELECT
@submission_date AS submission_date,
first_seen_date,
client_id,
sample_id,
(days_2_7 > 1 AND COALESCE(search_count, 0) > 0) AS is_activated,
FROM
new_clients
LEFT JOIN
new_clients_activity
USING
(client_id, first_seen_date, sample_id, channel)
LEFT JOIN
clients_search
USING
(client_id, sample_id, channel)

Просмотреть файл

@ -0,0 +1,31 @@
fields:
- mode: NULLABLE
name: submission_date
type: DATE
description: |
Date when a client activated.
- mode: NULLABLE
name: first_seen_date
type: DATE
description: |
Date when the app first reported a baseline ping for the client.
- mode: NULLABLE
name: client_id
type: STRING
description: |
Unique ID for the client installation.
- mode: NULLABLE
name: sample_id
type: INTEGER
description: |
Sample ID to limit query results during an analysis.
- mode: NULLABLE
name: is_activated
type: BOOLEAN
description: |
Determines if a client is activated based on the activation metric and a 7 day lag.