首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bigquery SQL -在SELECT和JOIN中取消嵌套哪个更好?

Bigquery SQL -在SELECT和JOIN中取消嵌套哪个更好?
EN

Stack Overflow用户
提问于 2017-10-31 23:53:20
回答 2查看 10.3K关注 0票数 2

我有一个数据集,其中视图嵌套在会话中,我想要每个会话的视图计数。构建这样的查询的更有效/更恰当的方法是什么?

是否有任何文档介绍了在BigQuery中编写查询的首选方法?

代码语言:javascript
复制
SELECT session_key, ( SELECT COUNT( view_id ) FROM UNNEST( views ) views ) AS view_count 
FROM sessions 
WHERE _PARTITIONTIME >= TIMESTAMP( '2016-04-01' ) ;

SELECT session_key, COUNT( view_id ) AS view_count 
FROM sessions 
  LEFT JOIN UNNEST( views ) views 
WHERE _PARTITIONTIME >= TIMESTAMP( '2016-04-01' ) 
GROUP BY session_key; 

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-01 00:16:39

工作查询:

a)

代码语言:javascript
复制
SELECT visitId, ( SELECT COUNT( hitNumber ) FROM UNNEST( hits ) ) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`

b)

代码语言:javascript
复制
SELECT visitId, COUNT( hitNumber ) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
LEFT JOIN UNNEST( hits )  
GROUP BY visitId

第一个查询看起来更短、更简洁,但我们也来看一下explain选项卡:

a)

b)

它在执行时看起来也更好!可能是因为第二个查询有一个GROUP BY visitId,它强制BigQuery查看是否有任何其他会话具有相同的id。

但如果你正在寻找一种更简洁的选择:

代码语言:javascript
复制
SELECT visitId, ARRAY_LENGTH(hits) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
票数 8
EN

Stack Overflow用户

发布于 2017-11-01 00:52:28

这不仅仅是关于which way better?的-它也是关于which way reflects your goal?的,因为它们的结果是不同的!您可以在Felipe的答案中看到这一点-第一个查询返回63行,第二个查询返回62行

因此,第一个查询只返回与您的sessions表一样多的行以及数组字段中的条目计数。

而第二个查询除了上面的查询之外,还对所有行进行分组并聚合相应的计数

当然,如果您的表的所有visitId都是唯一的-这将产生相同的结果

但由于这种额外的分组-我预计第二个查询会更昂贵

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

https://stackoverflow.com/questions/47039541

复制
相关文章

相似问题

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