クロスマートでインフラを担当している川口(@kawasystem)です。
いきなりですが、皆さんのプロジェクト(会社)では、非エンジニアの人が分析や調査で本番データをアクセスするときに、 Redash, Metabase等のBIツールを利用している思いますが、データベースはどこにあるデータベースに接続していますか?
たぶん、以下のどれかのデータベースにアクセスしているかと思います。
クロスマートも例にもれず、上記の1から始まり、サービスが大きくなるにつれて、2 → 3と進化しました。
今回は、クロスマートの本番データをBI環境に入れる機能について説明します。
Export元と先
データ | クラウドサービス | サービス |
---|---|---|
Export元 | AWS | AuroraMySQL |
Export先 | Google Cloud | BigQuery |
要件に 「リアルタイムでデータを見る必要はない」 ということで バイナリログを使った同期は不要でした。
※ AWSのBlue/Greenデプロイするとバイナリログファイルは変わるので、そもそもとしてバイナリログによる同期は避けたかった
この為、以下のようにしようと考えました。
当初検討中の構成
しかし、バックエンドのエンジニアは容赦無くmigrationしてテーブル定義を更新していきます。 この為、データを入れる前にDDLを取得&テーブル作成するようにしました。
最終的に構築した構成
DDL作成
クロスオーダーでは以下のライブラリをつかっています。
https://github.com/shinichi-takii/ddlparse
もう開発が止まっているので、不足している機能をpythonでゴリゴリ実装してカバーしているところが玉に傷です。 他のライブラリに差し替えるか悩むところです。
BigQueryでのデータの閲覧
テーブル名は、suffixを日付にして、_TABLE_SUFFIXを利用して、データを取得できるようにしました。
Queryサンプル
SELECT * FROM `snapshot.order_*` WHERE _TABLE_SUFFIX = FORMAT_DATE('%Y%m%d', CURRENT_DATE('Asia/Tokyo'))
以上がクロスオーダーのBI環境へのデータ投入方法です。
さいごに
クロスマートではエンジニアやBizDevなど広く一緒に働く仲間を募集中です。
組織も事業も急拡大していて、やること満載なので興味がある場合は是非こちらをご覧ください☺️