Associate Data Practitioner(Google Cloud) 無料問題 5 / 10 ・ 分野2: データ分析とプレゼンテーション
ordersのitems列がARRAY<STRUCT<sku STRING, qty INT64>>である。明細ごとに1行へ展開する操作はどれか。
- SELECT AS STRUCTで行を構造化する
- CROSS JOIN UNNEST(items)で展開する
- ARRAY_AGG(items)で配列を集約する
- ARRAY_LENGTH(items)で長さを求める
正解と解説を見る
正解: B
正解の理由
公式ドキュメント「Work with arrays」の「Converting elements in an array to rows in a table」には、"For each row N in the source table, UNNEST flattens the ARRAY from row N into a set of rows containing the ARRAY elements, and then a correlated INNER JOIN or CROSS JOIN combines this new set of rows with the single row N from the source table." とある。配列の要素を行として展開するため、明細のskuやqtyを通常の列のように分析できる。
違う選択肢
「ARRAY_AGG(items)で配列を集約する」…行を配列へまとめる方向の集約であり、配列の各明細を1行へ展開する操作とは逆になる。
「SELECT AS STRUCTで行を構造化する」…選択した列を構造体にまとめる方向であり、既存配列を複数の明細行へ展開する操作ではない。
「ARRAY_LENGTH(items)で長さを求める」…明細数は取得できるが、各skuとqtyを別行として取り出す処理は行われない。
押さえどころ
配列を展開すると注文ごとの行数は明細数に増える。注文金額など親の値をそのままSUMすると重複集計になるため、求める粒度に合わせた集約が必要である。
Associate Data Practitioner(Google Cloud)の演習アプリ(無料10問・全問は解錠で)へ