MongoDBとmetabaseでjsonファイルを見やすくしたい 前編


この記事はニフティグループ Advent Calendar 2018 2日目の記事です。
1日目は@winterwindさんのS3 に画像が保存されたら自動でAmazon Rekognitionの画像分析を実行する でした。



手元にゲームの戦績データが入ったjsonがあるのですが、結構複雑で1個1個のデータが大きくてふつうにパースするのもちょっと面倒な感じです。
本稿は、そんな感じのjsonをいい感じに可視化してみようと試みた記事です。

やったこととしては

  • MongoDBにJSONデータを突っ込む
  • metabase(https://www.metabase.com/) とMongoDBを連携する
  • というのをDocker上で完結させる

といったかんじです。結構簡単にできます。

立ち上げるまで

  1. docker hubからMongoDBのimageをpullする
$ docker pull mongo

2.metabaseのimageもpullする

$ docker pull metabase/metabase

3.docker-compose.ymlを記述する

docker-compose.yml
version: "2"
services:
  metabase:
    container_name: "metabase"
    image: metabase/metabase
    ports:
      - "3000:3000"
  db:
    container_name: "mongo"
    image: mongo
    ports:
      - "27017:27017"
    volumes:
      - ./:/tmp

mongoのvolumesは、ホスト側には自分がmongoにつっこみたいjsonファイルのあるディレクトリを指定して、
コンテナ側にはとりあえずtmpを指定しました。
IPASSはローカルなのでとりあえず無し。

4.コンテナを立ち上げる

$ docker-compose up

これで環境が整いました。とても簡単。Dockerってすばらしいですね・・・・・・。
これでバックグラウンドでMongoDBのコンテナが起動した状態になります。

コンテナの中に入る

$ docker exec -it mongo /bin/bash
# cd tmp
# ls
hoge.json

コンテナ起動時に指定したディレクトリに移動してlsするとローカル側のファイルがあることが確認できるはずです。

jsonファイルをつっこむ

mongoimportコマンドでjsonファイルをimportすることが可能です。

mongoimport --db db_name --collection collection_name --type json --file hoge.json 

db_nameとcollection_nameは任意の好きな名前をつけます。
collectionというのはMySQLなどで言うところのテーブルです。
とくにDB・テーブルを作成するという操作が無くてもinsertできました。

中身を確認する

mongo と入力することでmongoのコマンドラインが起動します。

# mongo
MongoDB shell version v4.0.4
connecting to: mongodb://127.0.0.1:27017
後略
---

> use db_name
switched to db db_name
> db.collection_name.find()
# 結果が出る

metabaseの設定をする

名前やメールアドレスなどは任意のものを入力します。DB追加の部分は以下のように設定。

  • 名前
    • dashbordで見つけやすい名前
  • ホスト
    • MongoDBのコンテナの名前。上記のymlだと"mongo"にしています。
  • ポート 
    • ymlに記述した値。上記だと27017
  • データベース名
    • JSONをinsertしたときにつけたDBの名前を設定。

おそらくこれでmetabase側でDBの情報が適当にグラフ化されたりするはず。

クエリを書かなくても簡単なグラフ作ってくれるのはかなり便利ですね。
こんな感じでわりとシンプルな手順で複雑なjsonがいじりやすく、可視化しやすい状態になりました。

後編につづきます。

参考文献

https://open-groove.net/mongodb/mongodb-shell-eval/
https://qiita.com/saba1024/items/f2ad56f2a3ba7aaf8521

3日目は@machinanetteさんの「サンタのおもちゃをmicro:bitで制御する」です!