非エンジニアにSQLで本番データをアクセスできる環境を用意する

クロスマートでインフラを担当している川口(@kawasystem)です。

いきなりですが、皆さんのプロジェクト(会社)では、非エンジニアの人が分析や調査で本番データをアクセスするときに、 Redash, Metabase等のBIツールを利用している思いますが、データベースはどこにあるデータベースに接続していますか?

たぶん、以下のどれかのデータベースにアクセスしているかと思います。

  1. 同じクラスタのレプリカDB
  2. クラスタのレプリカDB
  3. RedShift、BiqQuery等のBI環境のDB

クロスマートも例にもれず、上記の1から始まり、サービスが大きくなるにつれて、2 → 3と進化しました。

今回は、クロスマートの本番データをBI環境に入れる機能について説明します。

Export元と先

データ クラウドサービス サービス
Export元 AWS AuroraMySQL
Export先 Google Cloud BigQuery

要件に 「リアルタイムでデータを見る必要はない」 ということで バイナリログを使った同期は不要でした。

AWSのBlue/Greenデプロイするとバイナリログファイルは変わるので、そもそもとしてバイナリログによる同期は避けたかった

この為、以下のようにしようと考えました。

当初検討中の構成

BigQueryへのデータExport

しかし、バックエンドのエンジニアは容赦無くmigrationしてテーブル定義を更新していきます。 この為、データを入れる前にDDLを取得&テーブル作成するようにしました。

最終的に構築した構成

BigQueryへのデータExport

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など広く一緒に働く仲間を募集中です。

組織も事業も急拡大していて、やること満載なので興味がある場合は是非こちらをご覧ください☺️

xorder.notion.site