PDE#3(analyzing)
金融機関のアナリストは、口座取引テーブルから「各口座の直近 5 回の取引のうち最大金額」を SQL で算出する必要があります。テーブルは口座 ID と取引日時で並んでおり、約 50 億行が格納されています。BigQuery で最もシンプルかつ効率的にこのロジックを実装する方法はどれですか?
正解:C
正解の根拠
BigQuery 標準 SQL の WINDOW 関数は、PARTITION BY と ORDER BY、ROWS フレーム指定により、各口座の現在行から直近 5 行 (現行 + 直近 4 件後ろ) のスライディング集計を 1 パスで計算できます。サブクエリやスクリプトループに比べてシャッフル回数を最小化でき、50 億行規模でも効率的に動作します。クエリも宣言的で保守性に優れます。
サービス比較
| 項目 | WINDOW フレーム | ROW_NUMBER + CTE |
|---|---|---|
| パス回数 | 1 回 | 2 回以上 |
| シャッフル | 少 | 多 |
| 可読性 | 高 | 中 |
不正解の理由
- A: ROW_NUMBER 経由は CTE と再集計が必要で、シャッフルが追加されコストが増えます。
- B: ARRAY_AGG + UNNEST は中間配列を生成しメモリ消費が大きく、50 億行では非効率です。
- D: スクリプトループはクエリ数が爆発し、BigQuery の並列実行モデルに反します。

コメント