Problema de script de consulta grande SQL
¿Podrías ayudarme? No entiendo qué pasa con mi DÓNDE. Intenté varias cosas pero no pude terminar con la conclusión correcta.
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
ingrese la descripción de la imagen aquí
Respuestas
divisionparece ser un alias de columna definido en select.
Esto no está permitido en SQL (en general, no solo en BigQuery). Utilice una subconsulta o CTE para definir division. Luego filtrar en la consulta externa.
No puede reutilizar una columna definida en la SELECTcláusula en el mismo ámbito (dejó aparte la ORDER BYcláusula). Aquí, el enfoque más simple es probablemente mover las subconsultas a la 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
Tenga en cuenta que simplifiqué la PARTITION BYcláusula de la función de ventana: no creo que necesite la concatenación de cadenas aquí, solo puede usar una partición de dos niveles.
También cambié las combinaciones implícitas a explícitas cross join. Esto no cambia la lógica, pero, en mi opinión, aclara la intención.