如何在 BigQuery 中使用标准 SQL 查询 GA RealtimeView?
Posted
技术标签:
【中文标题】如何在 BigQuery 中使用标准 SQL 查询 GA RealtimeView?【英文标题】:How do I query GA RealtimeView with Standard SQL in BigQuery? 【发布时间】:2019-06-25 11:06:26 【问题描述】:将 Google Analytics(分析)数据导出到 Google BigQuery 时,您可以设置一个实时表,其中实时填充了 Google Analytics(分析)数据。但是,由于分布式计算的最终一致性,此表将包含重复项。
为了克服这个问题,Google 提供了一个过滤掉重复项的视图。但是,此视图不能使用标准 SQL 进行查询。
如果我尝试使用标准查询:
无法在标准 SQL 查询中引用旧版 SQL 视图
我们已经在 Standard 上进行了标准化,当我们想在实时数据上使用它们时,我很犹豫是否将我们所有的批处理查询重写为旧版。有没有办法将实时视图切换为标准视图?
编辑:
这是视图定义(由 Google 每天重新创建):
SELECT *
FROM [111111.ga_realtime_sessions_20190625]
WHERE exportKey IN (SELECT exportKey
FROM
(SELECT
exportKey, exportTimeUsec,
MAX(exportTimeUsec) OVER (PARTITION BY visitKey) AS maxexportTimeUsec
FROM
[111111.ga_realtime_sessions_20190625])
WHERE exportTimeUsec >= maxexportTimeUsec );
【问题讨论】:
定义视图的查询是什么?SELECT * FROM [111111.ga_realtime_sessions_20190625] where exportKey in ( SELECT exportKey FROM ( SELECT exportKey, exportTimeUsec, MAX(exportTimeUsec) OVER (PARTITION BY visitKey) AS maxexportTimeUsec FROM [111111.ga_realtime_sessions_20190625] ) WHERE exportTimeUsec >= maxexportTimeUsec );
您能否将其添加到问题中而不是评论中?这样人们会更容易阅读。
【参考方案1】:
您可以使用标准 SQL 创建这样的逻辑视图:
CREATE VIEW dataset.realtime_view_20190625 AS
SELECT
visitKey,
ARRAY_AGG(
(SELECT AS STRUCT t.* EXCEPT (visitKey))
ORDER BY exportTimeUsec DESC LIMIT 1)[OFFSET(0)].*
FROM dataset.ga_realtime_sessions_20190625 AS t
GROUP BY visitKey
这将为每个 visitKey
选择最近的行。如果你想在几天内概括这一点,你可以这样做:
CREATE VIEW dataset.realtime_view AS
SELECT
CONCAT('20', _TABLE_SUFFIX) AS date,
visitKey,
ARRAY_AGG(
(SELECT AS STRUCT t.* EXCEPT (visitKey))
ORDER BY exportTimeUsec DESC LIMIT 1)[OFFSET(0)].*
FROM `dataset.ga_realtime_sessions_20*` AS t
GROUP BY date, visitKey
【讨论】:
需要每天运行第一个查询以重新创建视图。这是一个不错的解决方法,但并不理想。通用查询不起作用,因为通配符捕获了已定义的视图,我们收到此错误:Views cannot be queried through prefix.
ga_realtime_sessions_view_[今天日期]
更新了答案以上是关于如何在 BigQuery 中使用标准 SQL 查询 GA RealtimeView?的主要内容,如果未能解决你的问题,请参考以下文章
如何让 BigQuery 的 API 使用标准 SQL 进行查询?