Session 在BigQuery(遗留SQL)中查找会话中的最大命中数
在使用GA数据的BigQuery中,我试图找到一个用户的每个会话在会话中的最大点击次数的页面类型(基于pagepath)。这将用于确定会话中哪个页面类型的活动最多(我只想要一个,因此最大) 使用行号为会话中的每个页面类型分配排名,过滤排名1对一个用户有效。当我尝试为更大的数据集(约400GB)复制该数据集时,会出现“资源已超过…”错误 我是BigQuery的新手,希望您能给我一些优化这段代码的建议Session 在BigQuery(遗留SQL)中查找会话中的最大命中数,session,google-bigquery,Session,Google Bigquery,在使用GA数据的BigQuery中,我试图找到一个用户的每个会话在会话中的最大点击次数的页面类型(基于pagepath)。这将用于确定会话中哪个页面类型的活动最多(我只想要一个,因此最大) 使用行号为会话中的每个页面类型分配排名,过滤排名1对一个用户有效。当我尝试为更大的数据集(约400GB)复制该数据集时,会出现“资源已超过…”错误 我是BigQuery的新手,希望您能给我一些优化这段代码的建议 SELECT userid, sessionid, pagetype,
SELECT
userid,
sessionid,
pagetype,
hits
FROM (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY userid, sessionid ORDER BY sessionid ASC) rnk
FROM (
SELECT
userid,
sessionid,
pagetype,
COUNT(1) AS hits
FROM
[xxxxxxx] WHERE
GROUP BY
userid,
sessionid,
pagetype
ORDER BY
sessionid,
hits DESC ) )
WHERE
rnk = 1
使用,可以编写查询,例如:
#standardSQL
SELECT
first_session.*
FROM (
SELECT
ARRAY_AGG(
STRUCT(userid, sessionid, pagetype, hits)
ORDER BY sessionid ASC LIMIT 1
)[OFFSET(0)] AS first_session
FROM (
SELECT
userid,
sessionid,
pagetype,
COUNT(*) AS hits
FROM `xxxxxxx`
GROUP BY
userid,
sessionid,
pagetype
)
GROUP BY userid, sessionid
);
这将为每个组构建一个包含相关列的结构,并仅选择第一个,由sessionid
确定,使用,您可以编写如下查询:
#standardSQL
SELECT
first_session.*
FROM (
SELECT
ARRAY_AGG(
STRUCT(userid, sessionid, pagetype, hits)
ORDER BY sessionid ASC LIMIT 1
)[OFFSET(0)] AS first_session
FROM (
SELECT
userid,
sessionid,
pagetype,
COUNT(*) AS hits
FROM `xxxxxxx`
GROUP BY
userid,
sessionid,
pagetype
)
GROUP BY userid, sessionid
);
这将为每个组构建一个包含相关列的结构,并仅选择第一个列,这由
sessionid
确定如果您是BigQuery新手,为什么要使用传统SQL?例如,使用标准SQL意味着您可以使用带有ORDERBY和LIMIT的ARRAY_AGG。如果您不熟悉BigQuery,为什么要使用传统SQL?例如,使用标准SQL意味着您可以将ARRAY_AGG与ORDER BY和LIMIT一起使用。