将Google Analytics(分析)数据导出到Google BigQuery时,您可以设置一个实时表,其中实时填充了Google Analytics(分析)数据。但是,由于分布式计算的最终一致性,此表将包含重复项。
为解决此问题,Google提供了一个视图,其中将重复项过滤掉。但是,使用标准SQL不能查询此视图。
如果我尝试使用标准Cannot reference a legacy SQL view in a standard SQL query.
我们已经对Standard进行了标准化,因此我很想将所有批处理查询重写为Legacy,以便在我们希望将其用于实时数据时使用。是否可以将实时视图切换为标准视图?
编辑: 这是视图定义(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 );
答案 0 :(得分: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