如何在BigQuery中使用标准SQL查询GA RealtimeView?

时间:2019-06-25 11:06:26

标签: google-bigquery

将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 );

1 个答案:

答案 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