我們剛剛開始將我們的查詢從Legacy遷移到標準SQL,因此我們正在學習如何處理嵌套數據和數組。錯誤:標量子查詢產生多個元素
基本上我們想要做的是從ga_sessions
表檢索以下數據:
visitor id, session id, array of skus
visitor 1, session 1, [sku_0, sku_1, (...), sku_n]
visitor 1, session 2, [skus]
要做到這一點,我們是把這個簡單的查詢:
WITH
customers_data AS(
SELECT
fullvisitorid fv,
visitid v,
ARRAY_AGG((
SELECT
prods.productsku
FROM
UNNEST(hits.product) prods)) sku
FROM
`dataset_id.ga_sessions_*`,
UNNEST(hits) hits
WHERE
1 = 1
AND _table_suffix BETWEEN FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
AND FORMAT_DATE("%Y%m%d", DATE_SUB(CURRENT_DATE(), INTERVAL 0 DAY))
--and (select count(productsku) from unnest(hits.product) where productsku is not null) = 1
GROUP BY
fv,
v
LIMIT
100)
SELECT
*
FROM
customers_data
但我們得到這個錯誤:
Error: Scalar subquery produced more than one element
來自hits
字段的數據看起來如此mething這樣的:
所以,當我們addded回where
條款:
and (select count(productsku) from unnest(hits.product) where productsku is not null) = 1
它不給一個錯誤,但結果有重複的SKU,我們也賠了進去越大的SKU陣列。
我們的查詢中是否存在一些錯誤,以防止數組未被引用?
非常感謝埃利奧特的幫助!有效!請你解釋一下爲什麼我們之前做的是錯的?當我們對領域'productsku'進行了非常緊張並且然後使用'array_agg'時,它不應該起作用嗎?爲什麼我們需要將它轉換回'array'?另外,你能解釋一下'select * replace'語法嗎?我閱讀了關於它的文檔,但無法理解它在這個查詢中的工作方式。再一次,非常感謝! –
我開始寫評論,但沒有足夠的空間,所以我更新了答案。如果您想了解更多關於主題的信息,請隨時發佈其他問題。謝謝! –
哦,不,我看到它!現在我明白我做錯了什麼。非常感謝Elliott的幫助! –