BigQuery UNNEST 重复值

Posted

技术标签:

【中文标题】BigQuery UNNEST 重复值【英文标题】:BigQuery UNNEST duplicates values 【发布时间】:2018-06-27 16:00:57 【问题描述】:

我正在尝试创建 Google Analytics(分析)数据的摘要:按小时和来源属性(在我的例子中命名为服务)的会话、交易和转化率。我正在从汇总属性数据集中查询名为“ga_realtime_view”的表。它是从“ga_realtime_sessions_”表创建的虚拟视图,允许我们使用标准 SQL。

为了拥有服务栏,我必须使用 UNNEST 操作。但是,当我这样做时,它会复制所有会话和事务值。

这里是查询:

SELECT
EXTRACT(HOUR FROM TIMESTAMP_SECONDS(visitStartTime) AT TIME ZONE 'Europe/Paris') AS Hour,
hits.sourcePropertyInfo.sourcePropertyDisplayName AS service,
IFNULL(SUM(totals.visits),0) as sessions,
IFNULL(SUM(totals.transactions),0) as transactions,
IFNULL(ROUND((SUM(totals.transactions)/SUM(totals.visits))*100,2),0) AS conversionRate
FROM `XX.ga_realtime_view` AS session, UNNEST(session.hits) AS hits
GROUP BY
Hour,
service
ORDER BY
Hour

我知道还有其他关于此重复问题的主题,但我似乎无法找到我的情况的解决方案。

感谢您的帮助

【问题讨论】:

【参考方案1】:

听起来您想避免将表格与数组连接(通过, UNNEST(session.hits)),因为这会导致复制所有总数。但是,不清楚您想对服务名称做什么:如果有多个,您是否要返回所有这些名称的数组?这是一次方法:

SELECT
EXTRACT(HOUR FROM TIMESTAMP_SECONDS(visitStartTime) AT TIME ZONE 'Europe/Paris') AS Hour,
ARRAY(
   SELECT sourcePropertyInfo.sourcePropertyDisplayName
   FROM UNNEST(session.hits) AS hits
) AS service,
IFNULL(SUM(totals.visits),0) as sessions,
IFNULL(SUM(totals.transactions),0) as transactions,
IFNULL(ROUND((SUM(totals.transactions)/SUM(totals.visits))*100,2),0) AS conversionRate
FROM `XX.ga_realtime_view` AS session
GROUP BY
Hour,
service
ORDER BY
Hour

不过,正如您会注意到的,查询现在给出了一个错误,您无法按数组进行分组。如果您希望在点击中只有一种类型的服务,您可以只提取一种:

SELECT
EXTRACT(HOUR FROM TIMESTAMP_SECONDS(visitStartTime) AT TIME ZONE 'Europe/Paris') AS Hour,
(SELECT MAX(sourcePropertyInfo.sourcePropertyDisplayName)
 FROM UNNEST(session.hits) AS hits) AS service,
IFNULL(SUM(totals.visits),0) as sessions,
IFNULL(SUM(totals.transactions),0) as transactions,
IFNULL(ROUND((SUM(totals.transactions)/SUM(totals.visits))*100,2),0) AS conversionRate
FROM `XX.ga_realtime_view` AS session
GROUP BY
Hour,
service
ORDER BY
Hour

【讨论】:

谢谢。实际上服务=来源属性=网站。我们有不同的网站,每个网站都有自己的 GA 属性。所以我想要做的是按小时和网站获得交易和会话的数量。是不是清楚一点? 无法编辑我的评论,但您的解决方案非常适合我想做的事情!再次感谢

以上是关于BigQuery UNNEST 重复值的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery:UNNEST 重复与展平表性能

查看 Google Analytics 时如何 UNNEST 和展平 BigQuery 中的所有记录

如何在 BigQuery SQL 中使用 UNNEST 和 SPLIT 避免重复?

BigQuery:使用 UNNEST 检查数组的内容

Bigquery unnest 最小行数

在 BIGQUERY 上使用 UNNEST 左连接