クエリをレガシーからスタンダードSQLに移行したところで、ネストされたデータと配列を処理する方法を学習しました。エラー:2つ以上の要素がスカラーサブクエリで生成されました
基本的に私たちが何をしたいのか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:
をだから我々はwhere
句バックadddedとき:それがエラーを与えるものではありません
and (select count(productsku) from unnest(hits.product) where productsku is not null) = 1
をしかし結果はSKUを重複していると我々はまた、より大きな内部のSKUを失いましたアレイ。
質問が間違っていて、配列がネストされないようにしていますか?
エリオットのお手伝いをしてくれてありがとう!出来た!私たちが以前にしたことが間違っていた理由を説明してください。フィールド 'productsku'をネストしてから' array_agg'を使うとうまくいかないでしょうか?なぜそれを 'array'にキャストする必要があるのでしょうか?また、 'select * replace'構文について説明してください。私はそれについてのドキュメントを読んだが、このクエリでどのように動作しているのか分からなかった。もう一度、ありがとう! –
私はコメントを書き始めましたが、十分なスペースがなかったので、答えを更新しました。トピックに関する詳細を知りたい場合は、別の質問を投稿してください。ありがとう! –
うーん、私はそれを参照してください!今私は、私が間違ったことを理解しています。エリオット助けてくれてありがとう! –