BigQuery Legacy SQLから標準SQLに移行しようとしています。レガシー製品は、何度も便利な "WITHIN RECORD"を検索する機能を提供しました。レガシーSQLからの移行:標準SQLで "WITHIN RECORD"のオプション
私はWITHIN RECORDの代わりに効率的な方法を探しています。 ARRAY + ORDINALを使用するとより効率的な方法があるかどうか疑問に思うかもしれません。
例:私はリットルでしょう)
1:
質問:出力結果、次の標準SQL
WITH
sessPageVideoPlays AS (
SELECT fullVisitorId, visitNumber, h.page.pagePath,
# This would previously use WITHIN RECORD in Legacy SQL:
ARRAY(SELECT eventInfo.eventAction FROM UNNEST(hits)
WHERE eventInfo.eventCategory="videoPlay"
ORDER BY hitNumber DESC
)[ORDINAL(1)] AS lastVideoSeen
FROM
`proj.ga_sessions`, UNNEST(hits) as h
GROUP BY fullVisitorId, visitNumber, h.page.pagePath, lastVideoSeen
)
SELECT
pagePath, lastVideoSeen, numOccur
FROM
(SELECT
pagePath, lastVideoSeen, count(1) numOccur
FROM
sessPageVideoPlays
GROUP BY
pagePath, lastVideoSeen
)
を考えてみましょう私はWITHIN RECORDを使って達成したものですが、上記のARRAY + ORDINALアプローチを試しています。しかし、これがうまくいくためには、ARRAY()内のSELECT文が、フラット化されているので外部レコードと同期させる必要があると思いますか?それは正確ですか?
2)また、特定のページでDISTINCTビデオの数をカウントして、より効率的なアプローチが別のクエリに参加するか、上記のARRAYで行われたような別のインライン集約関数を挿入するのかどうか疑問です。
何か提案がありがとうございます。
多くの方に感謝します。Nhan、Row_Numberを使ったあなたのアプローチは、Rankとのパーティション上で完璧に動作しました! – ScottP