Fix umami drifter count queries
Have to fill in all possible groups and sim types before doing the transpose to get the right table.
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
-- NOTE(simkir): Materialized view called by the crosstab to pivot sim types to cols
|
||||||
|
create materialized view weekly_sim_submit_count_v2 as
|
||||||
|
with
|
||||||
|
-- NOTE(simkir): Select all groups and sim kinds
|
||||||
|
group_and_sims as (
|
||||||
|
select
|
||||||
|
"group",
|
||||||
|
sim_type
|
||||||
|
from
|
||||||
|
(
|
||||||
|
select substring(distinct_id similar '%#"@%#"' escape '#') as group
|
||||||
|
from session
|
||||||
|
where distinct_id is not null and distinct_id like '%@%'
|
||||||
|
group by substring(distinct_id similar '%#"@%#"' escape '#')
|
||||||
|
)
|
||||||
|
cross join
|
||||||
|
(
|
||||||
|
select distinct string_value as sim_type
|
||||||
|
from event_data
|
||||||
|
where event_data.data_key = 'kind'
|
||||||
|
)
|
||||||
|
),
|
||||||
|
events as (
|
||||||
|
select
|
||||||
|
substring(session.distinct_id similar '%#"@%#"' escape '#') as group,
|
||||||
|
event_data.string_value as sim_type,
|
||||||
|
event_data.website_event_id as event_id,
|
||||||
|
event_data.created_at
|
||||||
|
from
|
||||||
|
website_event
|
||||||
|
join session on session.session_id = website_event.session_id
|
||||||
|
left outer join event_data on event_data.website_event_id = website_event.event_id
|
||||||
|
where
|
||||||
|
website_event.website_id = '16e7d807-4db5-45fd-92a9-27393445a153'
|
||||||
|
and website_event.event_type = 2
|
||||||
|
and website_event.event_name = 'mapster-submit-drifters'
|
||||||
|
and event_data.data_key = 'kind'
|
||||||
|
)
|
||||||
|
|
||||||
|
select
|
||||||
|
group_and_sims.group,
|
||||||
|
group_and_sims.sim_type,
|
||||||
|
count(events.event_id)
|
||||||
|
from
|
||||||
|
group_and_sims
|
||||||
|
-- NOTE(simkir): Allow missing events
|
||||||
|
left outer join events on
|
||||||
|
-- NOTE(simkir): Join on the unique combinations of group name and sim
|
||||||
|
-- kind which we've already fetched in `group_and_sims`.
|
||||||
|
events.group = group_and_sims.group
|
||||||
|
and events.sim_type = group_and_sims.sim_type
|
||||||
|
-- NOTE(simkir): Filter here in the join to, again, allow missing rows
|
||||||
|
and events.created_at between current_timestamp - '7 days'::interval and current_timestamp
|
||||||
|
group by
|
||||||
|
group_and_sims.group,
|
||||||
|
group_and_sims.sim_type
|
||||||
Executable
+18
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
if [ $# -ne 1 ]
|
||||||
|
then
|
||||||
|
echo "Usage: $0 <file>.sql"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
file=$1
|
||||||
|
|
||||||
|
if [ ! -e $file ]
|
||||||
|
then
|
||||||
|
echo "file $file does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat $file | kubectl exec -i svc/prod-umami-db-rw -c postgres -- psql app
|
||||||
|
|
||||||
@@ -1,24 +1,35 @@
|
|||||||
-- Pivots the sim count to use the sim kinds as columns. This is what is called
|
-- Pivots the sim count to use the sim kinds as columns. This is what is called
|
||||||
-- in grafana. If we get more sim kinds, they must be added here, and also in grafana.
|
-- in grafana. If we get more sim kinds, they must be added here, and also in grafana.
|
||||||
--
|
--
|
||||||
-- group_name | transport | lice | virus | watercontact | sedimentation
|
-- group_name | lice | sedimentation | transport | virus | watercontact
|
||||||
-- --------------+-----------+------+-------+--------------+---------------
|
-- ---------------------+------+---------------+-----------+-------+--------------
|
||||||
-- @mowi.com | 1 | | | |
|
-- @aqua-kompetanse.no | 0 | 0 | 0 | 0 | 0
|
||||||
-- @oceanbox.io | 1 | 1 | 5 | 6 |
|
-- @bjoroya.no | 0 | 0 | 0 | 0 | 0
|
||||||
-- @scaleaq.com | 7 | | | |
|
-- @dnv.com | 0 | 0 | 0 | 0 | 0
|
||||||
-- (3 rows)
|
-- @gmail.com | 0 | 0 | 0 | 0 | 0
|
||||||
|
-- @leroy.no | 0 | 0 | 0 | 0 | 0
|
||||||
|
-- @leroyseafood.com | 0 | 0 | 0 | 0 | 0
|
||||||
|
-- @met.no | 0 | 0 | 0 | 0 | 0
|
||||||
|
-- @mowi.com | 0 | 0 | 0 | 0 | 1
|
||||||
|
-- @mowi.no | 0 | 0 | 0 | 0 | 0
|
||||||
|
-- @oceanbox.io | 2 | 0 | 1 | 5 | 6
|
||||||
|
-- @oceanpro.no | 0 | 0 | 0 | 0 | 0
|
||||||
|
-- @ohshavbruk.no | 0 | 0 | 0 | 0 | 0
|
||||||
|
-- @salmar.no | 0 | 0 | 0 | 0 | 0
|
||||||
|
-- @scaleaq.com | 7 | 0 | 0 | 0 | 0
|
||||||
|
-- (14 rows)
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
*
|
*
|
||||||
FROM
|
FROM
|
||||||
crosstab_weekly_sim_submit_count(
|
crosstab(
|
||||||
'SELECT * FROM weekly_sim_submit_count
|
'SELECT "group", sim_type, count::text FROM weekly_sim_submit_count_v2 ORDER BY 1, 2',
|
||||||
WHERE sim_type IN (
|
'SELECT DISTINCT sim_type FROM weekly_sim_submit_count_v2 ORDER BY 1'
|
||||||
''transport'',
|
) AS ct (
|
||||||
''lice'',
|
group_name text,
|
||||||
''virus'',
|
lice bigint,
|
||||||
''watercontact'',
|
sedimentation bigint,
|
||||||
''sedimentation''
|
transport bigint,
|
||||||
)
|
virus bigint,
|
||||||
ORDER BY 1, 2'
|
watercontact bigint
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ WHERE
|
|||||||
website_event.website_id = '16e7d807-4db5-45fd-92a9-27393445a153'
|
website_event.website_id = '16e7d807-4db5-45fd-92a9-27393445a153'
|
||||||
AND website_event.event_type = 2
|
AND website_event.event_type = 2
|
||||||
AND website_event.event_name = 'mapster-submit-drifters'
|
AND website_event.event_name = 'mapster-submit-drifters'
|
||||||
|
AND website_event.created_at BETWEEN CURRENT_TIMESTAMP - '7 days'::interval AND CURRENT_TIMESTAMP
|
||||||
AND session.distinct_id IS NOT NULL
|
AND session.distinct_id IS NOT NULL
|
||||||
AND event_data.data_key = 'kind'
|
AND event_data.data_key = 'kind'
|
||||||
AND event_data.created_at BETWEEN CURRENT_TIMESTAMP - '7 days'::interval AND CURRENT_TIMESTAMP
|
|
||||||
GROUP BY
|
GROUP BY
|
||||||
substring(session.distinct_id SIMILAR '%#"@%#"' ESCAPE '#'),
|
substring(session.distinct_id SIMILAR '%#"@%#"' ESCAPE '#'),
|
||||||
event_data.string_value;
|
event_data.string_value;
|
||||||
|
|||||||
Reference in New Issue
Block a user