BQで重複排除したviewを作る
ログをBQに突っ込むんだけど、レコードが重複して出力されてる可能性がある。
但し、レコード毎にユニークキーなキーが付与されてる。
という場合、以下のようなviewを作れば重複排除できる。
CREATE OR REPLACE VIEW `dataset.view_name` AS WITH src AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY timestamp, uniq_key ) AS row_num FROM `dataset.table_name`) SELECT * EXCEPT(row_num) FROM src WHERE row_num = 1
元のテーブルが timestamp というカラムで partitioning されている前提。
window関数の PARTITION BY に timestamp を入れてるのがミソで、こうしておくと、view をクエリする際に timestamp で絞ればスキャン対象の partition を絞ることができる。