0
BigQueryでは、GAからのデータを使用して、セッションの最大ヒット数を持つページタイプを見つけることを試みていますユーザー。これは、どのpagetypeがセッションに最も多くのアクティビティを持っているかを判断するために使用されます(私は1つだけ、したがって最大)。BigQuery(従来のSQL)でセッション内の最大ヒットを見つける
行番号を使用してセッション内の各ページタイプのランクを割り当て、ランク1のフィルタリングは1人のユーザーに有効です。私が大きなデータセット(〜400GB)を複製しようとすると、「リソースを超過しました....」というエラーが表示されます。
BigQueryが新しく、このコードを最適化するためのヒントがありがとうございます。
#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
によって決定されるように、最初のものだけを選択:standard SQLを使用して
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
BigQueryを初めてお使いの場合はなぜ旧式のSQLを使用しますか?標準のSQLを使用すると、例えばORDER BYとLIMITでARRAY_AGGを使用できます。 –