BigQueryで重複IDをもつ行をひとつにするやつ


概要

重複してほしくないカラムがあるとき、その重複行を削除するクエリ

SELECT AS VALUE
  ARRAY_AGG(t)[OFFSET(0)]
FROM `hoge.fuga.piyo` AS t
GROUP BY choufuku_column

SELECT句で呼ぶテーブル名ってSTRUCTなんですね。今まで何気なく使ってたが初めて認識してちょっと感動した。

ちなみに公式で推奨されるもの。

#standardSQL
SELECT
  * EXCEPT(row_number)
FROM (
  SELECT
    *,
    ROW_NUMBER()
          OVER (PARTITION BY ID_COLUMN) row_number
  FROM
    `TABLE_NAME`)
WHERE
  row_number = 1

余談

ストリーミングAPIで格納した重複検知用のID付のテーブルをマテリアライズドビューで重複除外しようと考えた。
しかし、マテリアライズドビューにはROW_NUMBER()が使えないとのこと。
なのでARRAY_AGGで書き直したが、結局ダメだった。