首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作用域聚合和WHERE作用域

作用域聚合和WHERE作用域
EN

Stack Overflow用户
提问于 2016-09-08 22:25:39
回答 1查看 110关注 0票数 0

下面的查询运行并生成16行输出(通过在SELECT count(*) FROM (query)中包装来验证)命中是重复的记录。hits.customDimensions在命中结果中重复出现。customDimensions在主记录中重复。

代码语言:javascript
复制
SELECT
  fullVisitorId,
  visitId,
  hits.page.pagePath,
  hits.type,
  FIRST(IF(customDimensions.index = 10, customDimensions.value, NULL)) WITHIN RECORD AS gacid,
  FIRST(IF(hits.customDimensions.index = 11, hits.customDimensions.value, NULL)) WITHIN hits AS blogCategories
FROM
  [dataset.ga_sessions_20160902]
WHERE
  fullVisitorId ='55555555555'

然而,

代码语言:javascript
复制
SELECT
  fullVisitorId,
  visitId,
  hits.page.pagePath,
  hits.type,
  FIRST(IF(customDimensions.index = 10, customDimensions.value, NULL)) WITHIN RECORD AS gacid,
  FIRST(IF(hits.customDimensions.index = 11, hits.customDimensions.value, NULL)) WITHIN hits AS blogCategories
FROM
  [dataset.ga_sessions_20160902]
WHERE
  fullVisitorId ='55555555555'
  AND hits.type = 'PAGE'

失败,错误为

代码语言:javascript
复制
Cannot query the cross product of repeated fields customDimensions.index and hits.type.

是否只返回了一条(未平整的)记录,并且我的包装计数没有给出真正的结果?为什么两个作用域聚合可以在不同的作用域上工作,而最内部作用域上的WHERE却失败了?

EN

回答 1

Stack Overflow用户

发布于 2016-09-09 00:05:39

要避免产生交叉产品,请尝试下面的方法

代码语言:javascript
复制
SELECT
  fullVisitorId,
  visitId,
  hits.page.pagePath,
  hits.type,
  FIRST(IF(customDimensions.index = 10, customDimensions.value, NULL)) WITHIN RECORD AS gacid,
  FIRST(IF(hits.customDimensions.index = 11, hits.customDimensions.value, NULL)) WITHIN hits AS blogCategories
FROM [dataset.ga_sessions_20160902]
WHERE fullVisitorId ='55555555555'
HAVING hits.type = 'PAGE' 

顺便说一句,在Legacy SQL中,任何最外层的SELECT都会产生扁平化的结果(除非您将resuly写到表中,并使用相应的选项- large result和unflattened )-这解释了示例中的问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39393546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档