Попытка оптимизировать SQL-запрос для поиска сеансов GA, содержащих страницы, на которых в течение 15 дней происходит событие «преобразования». Если страница, например, "/ example / product", содержит событие GA "преобразование" 15 июня, то я хочу подсчитать все сеансы с 1 по 15 июня, которые достигли этой страницы, независимо от того, содержали ли эти сеансы событие преобразования .
Есть ли лучший способ, чем присоединиться, чтобы получить эти данные? Возможно с окном?
У меня есть рабочий запрос, но он выполняется все медленнее при запросе таблиц на более длительные промежутки времени и в конечном итоге дает сбой. Сначала я выбрал только сеансы со страницами, где произошла конверсия во всем временном интервале запроса, затем присоединился к тем же страницам с датой конверсии, а затем выбрал только те сеансы, где date_diff между датой конверсии и датой сеанса от 0 до 15.
SELECT
date,
COUNT (DISTINCT sessionId) AS sessions
FROM (
SELECT
date,
CONCAT(CAST(visitId AS STRING),fullVisitorId) AS sessionId,
hits.page.pagePath AS pagepath
FROM
`[dataset].ga_sessions_201906*` t,
t.hits hits
WHERE
hits.page.pagePath IN (
SELECT
DISTINCT(hits.page.pagePath) AS pagepath
FROM
`[dataset].ga_sessions_201906*` t,
t.hits hits
WHERE
REGEXP_CONTAINS( hits.eventInfo.eventAction, r'(?i)conversion'))
GROUP BY
date,
visitId,
fullVisitorId,
pagepath)
INNER JOIN (
SELECT
DISTINCT(hits.page.pagePath) AS pagepath,
date AS conversionDate
FROM
`[dataset].ga_sessions_201906*` t,
t.hits hits
WHERE
REGEXP_CONTAINS( hits.eventInfo.eventAction, r'(?i)conversion')
ORDER BY
pagepath,
conversionDate)
USING
(pagepath)
WHERE
DATE_DIFF(PARSE_DATE('%Y%m%d',
conversionDate),PARSE_DATE('%Y%m%d',
date), DAY) BETWEEN 0 AND 15
GROUP BY
date
ORDER BY
date
Он дает ожидаемые результаты в течение более коротких периодов времени, но при тестировании в течение более длительных периодов запрос не выполняется со следующим сообщением: «Служба в настоящее время недоступна».