データの蓄積帰還が長くなってくると、例えば JSON 形式でログを取っているが、同じデータでもマイグレーションやロギングロジックの更新などでkey
の名前が変化したりする場合がある。
その場合取り扱いに困るのが、古い key と新しい key をどのように併合するかだ。 例えば特定の日次できれいにデータが入れ替わっているのなら、色々やりようがあるが、クライアントなどのログの場合データの変化も均一ではないので、徐々に変化していることが大半なので、日次で別々の抽出をして結合するというアプローチも難しい。
その際に役立つのが Standard SQL 条件付き構文の COALESCE だ。
COALECSCE
は、引数の最初の非 NULL の値を返す関数で、
|
|
だと B
が返される。この関数を使うことで、複数カラムを一つに併合することができる。
具体例を交えつつ実践してみる
例えば、以下のように昔のカラム名が title
で、全く同じデータが新しいカラムの title_v2
に入ってきているとする。
NOTE: json を例題に key の抽出にしたほうが実際の状況に沿いますが、カラムのみで表現したほうが説明が簡単なので今回はそちらを採用。
用意したデータ
|
|
title | title_v2 | created |
---|---|---|
うどん | 2021/10/06 | |
ラーメン | 2021/10/07 | |
そば | 2021/10/08 | |
カツ丼 | 2021/10/09 | |
カツ丼 | カツ丼 | 2021/10/10 |
カレー | 2021/10/11 |
2021/10/10
のデータなどは旧カラムと新カラムにダブルライトされています。
COALESCE で複数カラムを併合する
|
|
結果
title | created |
---|---|
うどん | 2021/10/06 |
ラーメン | 2021/10/07 |
そば | 2021/10/08 |
カツ丼 | 2021/10/09 |
カツ丼 | 2021/10/09 |
カレー | 2021/10/10 |
上記の結果のようにCOALESCE
を使えば2つの時間経過によって別れてしまったカラムを一つのカラムとして併合することができました。
常に便利ですね。
References
BigQuery Conditional expressions- COALESCE
See Also
- Pythonで、変数を挿入して柔軟にSQLクエリを構築する
- Standard SQLで 列と列の組み合わせの数を集計したい
- 遅すぎる `pandas.read_gbq` を使わずに、Google BigQueryから高速にデータを読み込む