尝试优化SQL查询以查找包含在15天内发生“转化”事件的网页的GA会话。如果页面(例如“ / example / product”)在6月15日包含GA事件“ conversion”,那么我想计算6月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
它确实在较短的时间内产生了预期的结果,但是在较长的测试时间内,查询失败并显示以下消息:“该服务当前不可用。”