MoTLab -GO Inc. Engineering Blog-MoTLab -GO Inc. Engineering Blog-

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

行灯LaboBigQuery
December 23, 2019


💁🏻
※本記事は Mobility Technologies の前身である JapanTaxi 時代に公開していたもので、記事中での会社やサービスに関する記述は公開当時のものです。
An image from NotionAn image from Notion

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

メタデータとは

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

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

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

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

An image from Notion

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

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

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

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

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

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

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

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

An image from Notion

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

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

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

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

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

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

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

An image from Notion

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

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

https://github.com/JapanTaxi/bqdesc_backupper

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

💁🏻
※本記事は Mobility Technologies の前身である JapanTaxi 時代に公開していたもので、記事中での会社やサービスに関する記述は公開当時のものです。

Mobility Technologies では共に日本のモビリティを進化させていくエンジニアを募集しています。話を聞いてみたいという方は、是非 募集ページ からご相談ください!