Consultas de amostra
Esta página de parceiro oferece algumas consultas de amostra de possíveis casos de uso para referência ao configurar suas consultas.
Uma consulta comum pode ser filtrar eventos por tempo.
Você pode filtrá-los pelo horário de ocorrência. As tabelas de eventos são clusterizadas por time, o que torna a filtragem por time ideal:
1
2
3
4
5
-- find custom events that occurred after 04/15/2019 @ 7:02pm (UTC) i.e., timestamp=1555354920
SELECT *
FROM users_behaviors_customevent_shared
WHERE time > 1555354920
LIMIT 10;
Você também pode filtrar eventos pelo horário em que foram persistidos no data warehouse do Snowflake usando sf_created_at. sf_created_at e time não são iguais, mas geralmente são próximos, então essa consulta deve ter características de desempenho semelhantes:
1
2
3
4
5
-- find custom events that arrived in Snowflake after time 04/15/2019 @ 7:02pm (UTC)
SELECT *
FROM users_behaviors_customevent_shared
WHERE sf_created_at > to_timestamp_ntz('2019-04-15 19:02:00')
LIMIT 10;

O valor de sf_created_at é confiável apenas para eventos que foram persistidos após Nov 15th, 2019 9:31 pm UTC.
Você pode usar essa consulta de funil de push para agregar dados brutos de eventos de envios de push, passando por dados brutos de eventos de entregas, até dados brutos de eventos de aberturas. Essa consulta mostra como todas as tabelas devem ser unidas, já que cada evento bruto normalmente tem uma tabela separada:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
COUNT(DISTINCT send."ID" ) AS "users_messages_pushnotification_send.push_sent",
COALESCE((COUNT(DISTINCT send."ID" )),0)-COALESCE((COUNT(DISTINCT bounce."ID" )),0) AS "users_messages_pushnotification_send.push_delivered",
COUNT(DISTINCT open."ID" ) AS "users_messages_pushnotification_open.push_opens"
FROM users_messages_pushnotification_send_shared AS send
LEFT JOIN USERS_MESSAGES_PUSHNOTIFICATION_OPEN_shared AS open ON (send."USER_ID")=(open."USER_ID")
AND
(send."DEVICE_ID")=(open."DEVICE_ID")
AND
((send."MESSAGE_VARIATION_API_ID")=(open."MESSAGE_VARIATION_API_ID")
OR
(send."CANVAS_STEP_API_ID")=(open."CANVAS_STEP_API_ID"))
LEFT JOIN users_messages_pushnotification_bounce_shared AS bounce ON (send."USER_ID")=(bounce."USER_ID")
AND
(send."DEVICE_ID")=(bounce."DEVICE_ID")
AND
((send."MESSAGE_VARIATION_API_ID")=(bounce."MESSAGE_VARIATION_API_ID")
OR
(send."CANVAS_STEP_API_ID")=(bounce."CANVAS_STEP_API_ID"))
LIMIT 500;
Você pode usar essa consulta de cadência de envio de e-mail diário para analisar o intervalo entre os e-mails que um usuário recebe.
Por exemplo, se um usuário recebeu dois e-mails em um dia, ele se enquadra em 0 "days since last received". Se recebeu um e-mail na segunda-feira e outro na terça-feira, ele fica na coorte 1 "days since last received".
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
WITH email_messaging_cadence AS (WITH deliveries AS
(SELECT TO_TIMESTAMP(time) AS delivered_timestamp,
email_address AS delivered_address,
message_variation_api_id AS d_message_variation_api_id,
canvas_step_api_id AS d_canvas_step_api_id,
campaign_api_id AS d_campaign_api_id,
canvas_api_id AS d_canvas_api_id,
id AS delivered_id,
rank() over (partition by delivered_address ORDER BY delivered_timestamp ASC) AS delivery_event,
min(delivered_timestamp) over (partition by delivered_address ORDER BY delivered_timestamp ASC) AS first_delivered,
datediff(day, lag(delivered_timestamp) over (partition by delivered_address ORDER BY delivered_timestamp ASC), delivered_timestamp) AS diff_days,
datediff(week, lag(delivered_timestamp) over (partition by delivered_address ORDER BY delivered_timestamp ASC), delivered_timestamp) AS diff_weeks
from USERS_MESSAGES_EMAIL_DELIVERY_SHARED GROUP BY 1,2,3,4,5,6,7), opens AS
(SELECT DISTINCT email_address AS open_address,
message_variation_api_id AS o_message_variation_api_id,
canvas_step_api_id AS o_canvas_step_api_id
FROM USERS_MESSAGES_EMAIL_OPEN_SHARED), clicks AS
(SELECT DISTINCT email_address AS click_address,
message_variation_api_id AS c_message_variation_api_id,
canvas_step_api_id AS c_canvas_step_api_id
FROM USERS_MESSAGES_EMAIL_CLICK_SHARED) SELECT * FROM deliveries
LEFT JOIN opens
ON (deliveries.delivered_address)=(opens.open_address)
AND ((deliveries.d_message_variation_api_id)=(opens.o_message_variation_api_id) OR (deliveries.d_canvas_step_api_id)=(opens.o_canvas_step_api_id))
LEFT JOIN clicks
ON (deliveries.delivered_address)=(clicks.click_address)
AND ((deliveries.d_message_variation_api_id)=(clicks.c_message_variation_api_id) OR (deliveries.d_canvas_step_api_id)=(clicks.c_canvas_step_api_id))
)
SELECT
email_messaging_cadence."DIFF_DAYS" AS "email_messaging_cadence.days_since_last_received",
(count(distinct email_messaging_cadence."OPEN_ADDRESS", email_messaging_cadence."O_MESSAGE_VARIATION_API_ID")
+count(distinct email_messaging_cadence."OPEN_ADDRESS", email_messaging_cadence."O_CANVAS_STEP_API_ID"))/(COUNT(DISTINCT email_messaging_cadence."DELIVERED_ID" )) AS "email_messaging_cadence.unique_open_rate"
FROM email_messaging_cadence GROUP BY 1
ORDER BY 1
LIMIT 500;
Você pode usar essa consulta de cliques únicos de e-mail para analisar os cliques únicos de e-mail em um determinado período. O algoritmo para calcular isso é o seguinte:
- Particione os eventos pela chave (
app_group_id,message_variation_id,dispatch_id,email_address). - Em cada partição, ordene os eventos por tempo. O primeiro evento é sempre um evento único.
- Para cada evento subsequente, se ele ocorreu mais de sete dias após o anterior, é considerado um evento único.
Podemos usar as funções de janela do Snowflake para nos ajudar a alcançar isso. A consulta a seguir retorna todos os cliques de e-mail nos últimos 365 dias e indica quais eventos são únicos na coluna is_unique:
1
2
3
4
5
6
7
8
9
SELECT id, app_group_id, message_variation_api_id, dispatch_id, email_address, time,
ROW_NUMBER() OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) row_number,
LAG(time, 1, time) OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) previous_time,
time - previous_time AS diff,
IFF(row_number = 1, true, IFF(diff >= 7*24*3600, true, false)) AS is_unique
FROM USERS_MESSAGES_EMAIL_CLICK_SHARED
WHERE
time < DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP()))
AND time > DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP())) - 365*24*3600;
Se você quer ver apenas os eventos únicos, use a cláusula QUALIFY:
1
2
3
4
5
6
7
8
9
10
SELECT id, app_group_id, message_variation_api_id, dispatch_id, email_address, time,
ROW_NUMBER() OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) row_number,
LAG(time, 1, time) OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) previous_time,
time - previous_time AS diff,
IFF(row_number = 1, true, IFF(diff >= 7*24*3600, true, false)) AS is_unique
FROM USERS_MESSAGES_EMAIL_CLICK_SHARED
WHERE
time < DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP()))
AND time > DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP())) - 365*24*3600
QUALIFY is_unique = true;
Para ver contagens de eventos únicos agrupados por endereço de e-mail:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WITH unique_events AS(
SELECT id, app_group_id, message_variation_api_id, dispatch_id, email_address, time,
ROW_NUMBER() OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) row_number,
LAG(time, 1, time) OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) previous_time,
time - previous_time AS diff,
IFF(row_number = 1, true, iff(diff >= 7*24*3600, true, false)) AS is_unique
FROM USERS_MESSAGES_EMAIL_CLICK_SHARED
WHERE
time < DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP()))
AND time > DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP())) - 365*24*3600
QUALIFY is_unique = true)
SELECT email_address, count(*) AS count
FROM unique_events
GROUP BY email_address;
Use essa consulta de aberturas únicas de e-mail para analisar as aberturas únicas de e-mail em um determinado período. O algoritmo para calcular isso é o seguinte:
- Particione os eventos pela chave (
app_group_id,message_variation_id,dispatch_id,email_address). - Em cada partição, ordene os eventos por tempo. O primeiro evento é sempre um evento único.
- Para cada evento subsequente, se ele ocorreu mais de sete dias após o anterior, é considerado um evento único.
Você pode usar as funções de janela do Snowflake para alcançar isso. A consulta a seguir retorna todas as aberturas de e-mail nos últimos 365 dias e indica quais eventos são únicos na coluna is_unique:
1
2
3
4
5
6
7
8
9
SELECT id, app_group_id, message_variation_api_id, dispatch_id, email_address, time,
ROW_NUMBER() OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) row_number,
LAG(time, 1, time) OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) previous_time,
time - previous_time AS diff,
IFF(row_number = 1, true, IFF(diff >= 7*24*3600, true, false)) AS is_unique
FROM USERS_MESSAGES_EMAIL_OPEN_SHARED
WHERE
time < DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP()))
AND time > DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP())) - 365*24*3600;
Para retornar apenas os eventos únicos, use a cláusula QUALIFY:
1
2
3
4
5
6
7
8
9
10
SELECT id, app_group_id, message_variation_api_id, dispatch_id, email_address, time,
ROW_NUMBER() OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) row_number,
LAG(time, 1, time) OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) previous_time,
time - previous_time AS diff,
IFF(row_number = 1, true, IFF(diff >= 7*24*3600, true, false)) AS is_unique
FROM USERS_MESSAGES_EMAIL_OPEN_SHARED
WHERE
time < DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP()))
AND time > DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP())) - 365*24*3600
QUALIFY is_unique = true;
Para ver contagens de eventos únicos agrupados por endereço de e-mail:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WITH unique_events AS(
SELECT id, app_group_id, message_variation_api_id, dispatch_id, email_address, time,
ROW_NUMBER() OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) row_number,
LAG(time, 1, time) OVER (PARTITION BY app_group_id, message_variation_api_id, dispatch_id, email_address order by time) previous_time,
time - previous_time AS diff,
IFF(row_number = 1, true, iff(diff >= 7*24*3600, true, false)) AS is_unique
FROM USERS_MESSAGES_EMAIL_OPEN_SHARED
WHERE
time < DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP()))
AND time > DATE_PART('EPOCH_SECOND', TO_TIMESTAMP(CURRENT_TIMESTAMP())) - 365*24*3600
QUALIFY is_unique = true)
SELECT email_address, count(*) AS count
FROM unique_events
GROUP BY email_address;
Para uma abordagem alternativa com escopo em uma Campaign, um Canvas ou uma etapa do Canvas específica, use a consulta a seguir. Defina as variáveis de intervalo de datas e identificador e, em seguida, execute as instruções SELECT para retornar aberturas únicas calculadas de três formas:
Os resultados da consulta podem diferir ligeiramente das métricas do dashboard em alguns espaços de trabalho. Por exemplo, a unicidade pode ser particionada por email_address, e alguns eventos históricos de abertura podem não incluir um endereço de e-mail após a exclusão do perfil. Nesses casos, a paridade exata pode não ser possível para o mesmo período.
Este exemplo retorna três contagens:
- Aberturas únicas (período contínuo de 7 dias): aberturas únicas em um período contínuo de sete dias.
- Aberturas únicas (dentro do intervalo de datas): aberturas únicas dentro do período especificado, independentemente de aberturas que tenham ocorrido antes desse período.
- Aberturas únicas (para e-mails entregues no mesmo período): aberturas únicas em que o evento de entrega correspondente também ocorreu dentro do mesmo período.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
Set or comment out variables if not required. These are set per session.
You can obtain the from and to dates from the Campaign/Canvas/Canvas step URL. These are the startDate and endDate parameters.
For example, endDate=1234567890&startDate=1234500000
To run, select all of this code block (CMD + A) and run to first set the necessary variables and run the SELECT statements below.
*/
SET fromDateTime = '1234500000';
SET toDateTime = '1234567890';
-- SET campaignID = '';
-- SET canvasID = '';
SET canvasStepID = '0123456789abcdef01234567';
SELECT
'Unique Opens (over 7 days)' metric, COUNT(DISTINCT(user_id, dispatch_id)) total
FROM
users_messages_email_open_shared
WHERE
/* Comment out where not required */
-- campaign_id = $campaignID AND
-- canvas_id = $canvasID AND
canvas_step_id = $canvasStepID AND
time BETWEEN $fromDateTime and $toDateTime AND
not exists (select
umeo.user_id
from
users_messages_email_open_shared umeo
where
umeo.user_id = users_messages_email_open_shared.user_id and
umeo.canvas_step_id = users_messages_email_open_shared.canvas_step_id and
to_timestamp(umeo.time) between dateadd(day, -7, to_timestamp(users_messages_email_open_shared.time)) and dateadd(second, -1, to_timestamp(users_messages_email_open_shared.time)))
UNION
SELECT
'Unique Opens (during date window)' metric, COUNT(DISTINCT(user_id, dispatch_id)) total
FROM
users_messages_email_open_shared
WHERE
/* Comment out where not required */
-- campaign_id = $campaignID AND
-- canvas_id = $canvasID AND
canvas_step_id = $canvasStepID AND
time BETWEEN $fromDateTime and $toDateTime
UNION
SELECT
'Unique Opens (for emails delivered within same timeframe)' metric, COUNT(DISTINCT(user_id, dispatch_id)) total
FROM
users_messages_email_open_shared
WHERE
/* Comment out where not required */
-- campaign_id = $campaignID AND
-- canvas_id = $canvasID AND
canvas_step_id = $canvasStepID AND
time BETWEEN $fromDateTime and $toDateTime AND
EXISTS (select user_id
from users_messages_email_delivery_shared umed
where
umed.user_id = users_messages_email_open_shared.user_id and
umed.dispatch_id = users_messages_email_open_shared.dispatch_id and
umed.time between $fromDateTime and $toDateTime);