Problema de script de grande consulta SQL
você poderia me ajudar, eu não entendo o que há de errado com o meu ONDE. Tentei várias coisas, mas não consegui chegar à conclusão certa.
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
insira a descrição da imagem aqui
Respostas
divisionparece ser um alias de coluna definido no select.
Isso não é permitido no SQL (em geral, não apenas no BigQuery). Use uma subconsulta ou CTE para definir division. Em seguida, filtre na consulta externa.
Você não pode reutilizar uma coluna definida na SELECTcláusula no mesmo escopo (à esquerda da ORDER BYcláusula). Aqui, a abordagem mais simples é provavelmente mover as subconsultas para a FROMcláusula:
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
Observe que simplifiquei a PARTITION BYcláusula da função de janela: não acho que você precisa de concatenação de string aqui, você pode apenas usar uma partição de dois níveis.
Também alterei as junções implícitas para cross joins explícitas . Isso não muda a lógica, mas torna a intenção mais clara em minha opinião.