如何在 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 进行查询?

如何在 ReDash 中设置标准 SQL BigQuery

如果标准 SQL 不提供 _PARTITIONTIME 字段,我如何在 BigQuery 中查询流缓冲区

BigQuery:使用标准 SQL 查询多个数据集和表

如何在 bigquery 标准 sql 中展平结构?

在 bigquery 中使用标准 sql 查询缓冲区/未分区数据