Bigquery SQL-在SELECT或JOIN中嵌套会更好吗?

A.S*_*.S. 2 sql google-bigquery unnest

我有一个数据集,其中视图嵌套在会话内部,并且我希望每个会话的视图计数。有什么更有效/合适的方法来构造这样的查询?

是否有任何文档讨论在BigQuery SQL中编写查询的首选方式?

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; 
Run Code Online (Sandbox Code Playgroud)

谢谢

Fel*_*ffa 7

工作查询:

一种)

SELECT visitId, ( SELECT COUNT( hitNumber ) FROM UNNEST( hits ) ) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
Run Code Online (Sandbox Code Playgroud)

b)

SELECT visitId, COUNT( hitNumber ) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
LEFT JOIN UNNEST( hits )  
GROUP BY visitId
Run Code Online (Sandbox Code Playgroud)

第一个查询看起来更短,更简洁,但我们还要看一下“解释”选项卡:

一种) 在此处输入图片说明

b) 在此处输入图片说明

执行时间看起来也更好!可能是因为第二个查询具有GROUP BY visitId,这迫使BigQuery查看是否存在其他具有相同ID的会话。

但是,如果您正在寻找更简洁的选择:

SELECT visitId, ARRAY_LENGTH(hits) AS view_count 
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
Run Code Online (Sandbox Code Playgroud)