SQLビッグクエリスクリプトの問題
Oct 20 2020
助けてくれませんか、WHEREのどこが悪いのかわかりません。私はいくつかのことを試みましたが、正しい結論に終わらせることができませんでした。
SELECT
CONCAT(fullvisitorId, "-", CAST(visitstarttime AS STRING)) as session,
RANK() OVER(PARTITION BY CONCAT(fullvisitorId, "-", CAST(visitstarttime AS STRING)) ORDER BY hitNumber ASC) AS Rank,
(SELECT MAX(cd.value) FROM hits.customDimensions as cd where cd.index = 12) as cd1,
(SELECT cd.value FROM hits.customDimensions as cd where cd.index=29) as division,
hits.hitnumber
FROM
`dl-training-bigquery.NDA_CHAN*******51.ga_sessions_20191202` as session,
unnest(hits) as hits
WHERE division = 'fsh'
ORDER BY hitnumber ASC
ここに画像の説明を入力してください
回答
GordonLinoff Oct 20 2020 at 03:37
divisionで定義された列エイリアスのようselectです。
これはSQLでは許可されていません(一般的に、BigQueryだけではありません)。サブクエリまたはCTEを使用してを定義しますdivision。次に、外部クエリでフィルタリングします。
GMB Oct 20 2020 at 03:40
SELECT同じスコープ内の句で定義された列を再利用することはできません(ORDER BY句を残してください)。ここで、最も簡単なアプローチは、おそらくサブクエリをFROM句に移動することです。
SELECT
CONCAT(fullvisitorId, "-", CAST(visitstarttime AS STRING)) as session,
RANK() OVER(PARTITION BY fullvisitorId, visitstarttime ORDER BY hitNumber) as rank,
dim1.cd1,
dim2.division,
hits.hitnumber
FROM `dl-training-bigquery.NDA_CHAN*******51.ga_sessions_20191202` as session
CROSS JOIN unnest(hits) as hits
CROSS JOIN (SELECT MAX(cd.value) as cd1 FROM hits.customDimensions as cd where cd.index = 12) as dim1
CROSS JOIN (SELECT cd.value as division FROM hits.customDimensions as cd where cd.index = 29) as dim2
WHERE dim2.division = 'fsh'
ORDER BY hitnumber ASC
PARTITION BYウィンドウ関数の句を簡略化したことに注意してください。ここでは文字列の連結は必要ないと思います。2レベルのパーティションを使用できます。
また、暗黙的な結合を明示的なcross joinsに変更しました。これは論理を変えるものではありませんが、私の意見では意図がより明確になります。