Problem ze skryptem SQL Big Query
czy mógłbyś mi pomóc, nie rozumiem, co jest nie tak z moim GDZIE. Próbowałem kilku rzeczy, ale nie mogłem zakończyć właściwego wniosku.
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
wprowadź opis obrazu tutaj
Odpowiedzi
divisionwydaje się być aliasem kolumny zdefiniowanym w select.
Nie jest to dozwolone w SQL (nie tylko w BigQuery). Użyj podzapytania lub CTE, aby zdefiniować division. Następnie przefiltruj zapytanie zewnętrzne.
Nie można ponownie użyć kolumny zdefiniowanej w SELECTklauzuli w tym samym zakresie (pozostawić ORDER BYklauzulę oddzielnie ). Tutaj najprostszym podejściem jest prawdopodobnie przeniesienie podzapytań do FROMklauzuli:
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
Zwróć uwagę, że uprościłem PARTITION BYklauzulę funkcji okna: nie sądzę, że potrzebujesz tutaj konkatenacji ciągów, możesz po prostu użyć partycji dwupoziomowej.
Zmieniłem również niejawne łączenia na jawne cross joins. Nie zmienia to logiki, ale moim zdaniem sprawia, że intencja jest jaśniejsza.