update event metrics to return event data grouped by event data

pull/2022/head
emma 2023-05-07 13:56:19 -04:00
parent 53523ed3db
commit c1eaa55070
1 changed files with 53 additions and 15 deletions

View File

@ -52,18 +52,37 @@ async function relationalQuery(
const filterQuery = getFilterQuery(filters, params); const filterQuery = getFilterQuery(filters, params);
return rawQuery( return rawQuery(
`select `with event_data as (
event_name x, select d.website_event_id,
event_data d, jsonb_object_agg(
${getDateQuery('created_at', unit, timezone)} t, d.event_key,
case
d.event_data_type
when 1 then to_jsonb(d.event_string_value) -- string
when 2 then to_jsonb(d.event_numeric_value) -- number
when 3 then to_jsonb(d.event_bool_value) -- boolean
when 4 then to_jsonb(d.event_date_value) -- date
when 5 then d.event_string_value::jsonb -- array
end
) filter (
where d.event_key is not null
) as event_data
from event_data d
group by d.website_event_id
)
select
w.event_name x,
e.event_data d,
${getDateQuery('w.created_at', unit, timezone)} t,
count(*) y count(*) y
from website_event from website_event w
left join event_data d on w.event_id = d.website_event_id
where website_id = $1${toUuid()} where website_id = $1${toUuid()}
and created_at >= $2 and created_at >= $2
and created_at between $3 and $4 and created_at between $3 and $4
and event_type = ${EVENT_TYPE.customEvent} and event_type = ${EVENT_TYPE.customEvent}
${filterQuery} ${filterQuery}
group by 1, 3 group by 1, 2, 3
order by 3`, order by 3`,
params, params,
); );
@ -94,18 +113,37 @@ async function clickhouseQuery(
const params = { websiteId }; const params = { websiteId };
return rawQuery( return rawQuery(
`select `with event_data as (
event_name x, select d.website_event_id,
event_data d, jsonb_object_agg(
${getDateQuery('created_at', unit, timezone)} t, d.event_key,
case
d.event_data_type
when 1 then to_jsonb(d.event_string_value) -- string
when 2 then to_jsonb(d.event_numeric_value) -- number
when 3 then to_jsonb(d.event_bool_value) -- boolean
when 4 then to_jsonb(d.event_date_value) -- date
when 5 then d.event_string_value::jsonb -- array
end
) filter (
where d.event_key is not null
) as event_data
from event_data d
group by d.website_event_id
)
select
w.event_name x,
d.event_data d,
${getDateQuery('w.created_at', unit, timezone)} t,
count(*) y count(*) y
from website_event from website_event w
left join event_data d on w.event_id = d.website_event_id
where website_id = {websiteId:UUID} where website_id = {websiteId:UUID}
and event_type = ${EVENT_TYPE.customEvent} and w.event_type = ${EVENT_TYPE.customEvent}
and created_at >= ${getDateFormat(resetDate)} and w.created_at >= ${getDateFormat(resetDate)}
and ${getBetweenDates('created_at', startDate, endDate)} and ${getBetweenDates('w.created_at', startDate, endDate)}
${getFilterQuery(filters, params)} ${getFilterQuery(filters, params)}
group by x, t group by x, d, t
order by t`, order by t`,
params, params,
); );