如何从未嵌套的数据(BigQuery 中的 Google Analytics 数据)返回正确的汇总总数
Posted
技术标签:
【中文标题】如何从未嵌套的数据(BigQuery 中的 Google Analytics 数据)返回正确的汇总总数【英文标题】:How to return a correct aggregate total from unnested data (Google Analytics data in BigQuery) 【发布时间】:2017-11-23 08:39:43 【问题描述】:我正在 BigQuery 中对 GA 数据运行一些查询,当我想从未嵌套的表中返回数据总和时,我遇到了一个反复出现的问题,其中我的总数远高于预期 - 我怀疑未嵌套的行是被计数,导致计数不准确。这是一个例子:
SELECT DATE, SUM(totals.transactions)
FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 1 day) and
DATE_sub(current_date(), interval 1 day)
GROUP BY DATE
返回:
1 20171122 12967
正如预期的那样。接下来,我想使用来自hits.
的字段,这需要我取消嵌套命中,进行查询:
SELECT DATE, SUM(totals.transactions), MIN(hits.page.hostname) AS site
FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
CROSS JOIN UNNEST (hits) as hits
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 1 day) and
DATE_sub(current_date(), interval 1 day)
GROUP BY DATE
但是,现在的结果显示:
20171122 2320004 www.hostname.com
事务的数量要高得多,我假设它正在计算所有未嵌套的行,我该如何解决这个问题,我想计算未嵌套的表,但也使用未嵌套的字段?
【问题讨论】:
【参考方案1】:你应该这样做:
SELECT DATE, SUM(totals.transactions),
(SELECT MIN(hit.page.hostname) FROM UNNEST (GBP.hits) AS hit) AS site
FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 1 day) and
DATE_sub(current_date(), interval 1 day)
GROUP BY DATE, site
【讨论】:
我收到错误UNNEST expression references column hit which is neither grouped nor aggregated at [2:54]
- 好像它把 unnest 看作一个字段?
抱歉,我忘记按站点分组了。这里发生了类似的问题:***.com/questions/40792981/…以上是关于如何从未嵌套的数据(BigQuery 中的 Google Analytics 数据)返回正确的汇总总数的主要内容,如果未能解决你的问题,请参考以下文章