BigQueryのメタデータバックアップツールをオープンソースとして公開しました

https://cdn-ak.f.st-hatena.com/images/fotolife/g/go_dev/20240418/20240418124609.jpg

https://cdn-ak.f.st-hatena.com/images/fotolife/g/go_dev/20240418/20240418124610.jpg

JapanTaxiではGoogle BigQueryのメタデータをバックアップするツールを作成し運用しています。そして今回そのツールをオープンソースとして公開しました。その紹介になります。

メタデータとは

JapanTaxiでは「JapanTaxi」アプリや車載の「JapanTaxiタブレット」など多くのプロダクトをもっており、これらのデータを全社データウェアハウスであるGoogle BigQueryに格納して分析しています。

データを分析するときには、データが何を意味するか正確に知る必要があるため、データに関する情報「メタデータ」が重要になります。

BigQueryの説明欄にメタデータを書く

JapanTaxiではGoogle BigQueryに備わっている説明欄にメタデータを書くことにしています。

https://cdn-ak.f.st-hatena.com/images/fotolife/g/go_dev/20240418/20240418124611.jpg

説明欄にメタデータを書くことのメリット

分析者は毎日ブラウザからBigQueryのUI画面を開いてデータを見たりSQLの開発をしています。いわば分析者の生活環境です。この生活環境のなかにメタデータの画面もあるため、自然と目に入ります。これがメタデータの有用性を高めます。

また説明欄はクリックすれば簡単に書き換えることができるため、誤った記述や古い記述を見つけたらすぐに変更できます。これによりメタデータが陳腐化してしまうことを防ぎます。

世の中にはメタデータを管理するためのソリューションがいくつかありますが、これらは別のWebシステムで動くためメタデータを見るためにブラウザのページを開く必要があります。こうなるとメタデータを見つけることが困難になりますし、メタデータの変更も一手間かかります。

メタデータをバックアップするツールを開発

BigQueryの説明欄に記載したメタデータは、気をつけないと消失してしまいます。

説明欄が消失するケースの一つはETLツールでテーブルを洗いがえるときです。ETLツールによってはテーブルを毎回DROP/CREATEするものがあり、テーブルがDROPされると説明欄も消えてしまいます。

これを防ぐために、JapanTaxiでは独自のBigQueryメタデータバックアップツールを作りました。

https://cdn-ak.f.st-hatena.com/images/fotolife/g/go_dev/20240418/20240418124612.jpg

このツールはBigQueryのAPIからメタデータ情報を抽出し、NoSQLサービスの一つであるGoogle FireStoreに格納します。これによりETL処理でメタデータが消失してもFireStoreから復元できるようにしています。

FireStoreを選択した理由は最も簡単にかつ従量課金でJSONの出し入れができるためです。

APIから取得できるデータはJSON形式であるため、FireStoreであれば変換せずにそのまま格納することができます。また、メタデータはデータ量が小さく処理の頻度も非常に少ないため、従量課金のFireStoreがもっともコスト効率よくデータを格納できます。

ちなみに、このツールはGoogle Cloud Functions上で実行しています。

メタデータのスナップショットも保管

分析者誰もが自由に説明欄を書けるため、間違って消してしまうことがあり復元できないことがあります。また昔にどんな説明が書いてあったか知りたいケースもあります。

この課題に対応するために、メタデータを保管しているFireStoreのコレクションを定期的にコピーしてスナップショットとして保管しています。

https://cdn-ak.f.st-hatena.com/images/fotolife/g/go_dev/20240418/20240418124608.jpg

オープンソースとして公開

今回作成したツールをオープンソース「bqdesc_backupper」として公開しました。

https://github.com/JapanTaxi/bqdesc_backupper

是非気軽にご利用ください!