SQL Big Query Script Problem
Könntest du mir helfen? Ich verstehe nicht, was mit meinem WO falsch ist. Ich habe verschiedene Dinge ausprobiert, konnte aber nicht zu dem richtigen Schluss kommen.
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
Geben Sie hier die Bildbeschreibung ein
Antworten
divisionscheint ein Spaltenalias zu sein, der in der select.
Dies ist in SQL nicht zulässig (im Allgemeinen nicht nur in BigQuery). Verwenden Sie zum Definieren eine Unterabfrage oder einen CTE division. Filtern Sie dann in der äußeren Abfrage.
Sie können eine in der SELECTKlausel definierte Spalte nicht im selben Bereich wiederverwenden (abgesehen von der ORDER BYKlausel). Hier besteht der einfachste Ansatz wahrscheinlich darin, die Unterabfragen in die FROMKlausel zu verschieben:
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
Beachten Sie, dass ich die PARTITION BYKlausel der Fensterfunktion vereinfacht habe : Ich glaube, Sie brauchen hier keine Zeichenfolgenverkettung, Sie können einfach eine Partition mit zwei Ebenen verwenden.
Ich habe auch die impliziten Verknüpfungen in explizite cross joins geändert . Dies ändert nichts an der Logik, macht aber meiner Meinung nach die Absicht klarer.