我目前正在尝试在 BigQuery 表中创建一列,该列仅包含 hits.page.pagePath 的滞后值。对于此示例,假设我的 hits.time 值为 0、513、518、762、991。这些值对应于我创建的 unique_visit_id。每天有数以千计的独特访问,每次访问都有不同的 hits.time 值和行号。
为了帮助进行各种计算,我想向数据框中添加一列,该列仅包含 hits.page.pagePath 列中所有行的滞后值(当 hits.time > 0 时没有关联的滞后)。请注意, hits.time 是一个重复组,它指的是使用 CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id
计算的唯一访问 ID。因此,我怀疑会涉及到像 OVER 这样的命令。我最初的查询使用了以下方法:
SELECT date, LAG(hits.page.pagePath,1), CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id, visitId, visitNumber, fullVisitorId, totals.pageviews, totals.bounces,
hits.page.pagePath, device.deviceCategory, device.browser, device.browserVersion, hits.customVariables.index,
hits.customVariables.customVarName, hits.customVariables.customVarValue, hits.time
FROM (FLATTEN([XXXXXXXX.ga_sessions_20140711], hits.time))
WHERE hits.customVariables.index = 4
ORDER BY unique_visit_id DESC, hits.time ASC
LIMIT 1000;
因此不幸返回了错误:
错误:LAG 是解析函数,必须附带 OVER 子句。
作业 ID:XXXXXXXX-XXX:job_zduhuRKgvrgmA7niBzcyb3empwY
我猜想 OVER 会引用
CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id
,因为包含相同 unique_visit_id 的每一行都代表一次唯一访问中的命中。不幸的是,在这里使用 OVER 也返回了一个错误。 最佳答案
分析函数有一个奇怪的语法......你快到了,但你只需要将 ORDER BY
子句移动到 OVER
使用的 LAG()
语句中:
SELECT date, LAG(hits.page.pagePath,1)
OVER(PARTITION BY unique_visit_id ORDER BY hits.time ASC) as lagged,
CONCAT(fullVisitorId, STRING(visitId)) AS unique_visit_id, visitId,
...
FROM (FLATTEN([XXXXXXXX.ga_sessions_20140711], hits.time))
WHERE hits.customVariables.index = 4
LIMIT 1000;
关于google-bigquery - BigQuery SQL 中的 LAG() 函数错误;无法返回滞后的 hits.page.pagePath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24746161/