CSVファイルを「Metabase」で可視化した話

手元のCSVファイルのデータを手っ取り早く可視化ツールで見たい時などにご参考にしていただければ幸いです。</br>
</br>
「[Metabase](https://www.metabase.com/)」は無料で使えるOSSのデータ可視化ツールです。</br>
(「Kibana」や「Grafana」などと競合のようです)</br>

## 構成
ローカルで環境を構成します。(ubuntuおよびwindowsで動作確認済み)</br>
可搬性を持たせたかったため、docker(docker-compose)を利用しました。</br>
![metabase.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609518/86711523-7e81-1e1a-2cc7-4e163d074f87.png)

## 流れ
大まかな流れは以下の通りです。
1. 「Metabase」と「PostgreSQL」をDockerで環境構築する
2. CSVファイルからDDL推測ツール「[ddlgenerator](https://github.com/catherinedevlin/ddl-generator)」を利用してDDLを作成する
3. 作成したDDLでPostgreSQLへデータ投入してMetabaseから参照する

## 詳細
### ディレクトリ構成
```
.
├── postgres
│   └── Dockerfile
├── db_data
├── metabase
├── csv_data
│   └── {your_file}.csv
└── docker-compose.yml
```
- 「db_data」「metabase」はそれぞれPostgreSQLとMetabaseのデータ永続化用です(Windows除く)
- 「csv_data」には可視化したいCSVファイルを置いてください(PostgreSQL環境の「/tmp」にマウントされます)

### Dockerfile
postgres:11.4-alpineにPython製のDDL推測ツール「[ddlgenerator](https://github.com/catherinedevlin/ddl-generator)」をインストールしています。</br>
ddlgeneratorは、CSVファイルから自動的にDDLを作成しデータ投入するSQLを生成してくれます。

```Docker:Dockerfile
FROM postgres:11.4-alpine
RUN apk --update-cache \
    add python3 \
 && pip3 install --upgrade pip \
 && pip3 install ddlgenerator
```

### docker-compose.yml
```YAML:docker-compose.yml
version: "3"
services:
  metabase:
    container_name: metabase
    image: metabase/metabase:v0.34.3
    ports:
      - "3000:3000"
    links:
      - postgres
    volumes:
      - ./metabase:/metabase.db
  postgres:
    container_name: postgres
    build: postgres
    ports:
      - "5432:5432"
    environment:
      TZ: "Asia/Tokyo"
      POSTGRES_DB: metabase
      POSTGRES_PASSWORD: metabase
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
    volumes:
      - ./db_data:/var/lib/postgresql/data
      - ./csv_data:/tmp
```
Linuxでは上記のファイルでうまく行きましたが、Windowsだとディレクトリの権限の問題でこのままではうまく行きませんでした。</br>
Windowsの場合は下記の記事を参考にdocker-compose.ymlを編集しました。</br>
metabase&postgresでそれぞれボリュームを予め作成して、そのボリュームにマウントする形です。
> [Docker for Windowsでpostgresのデータマウントができない人へ](https://qiita.com/ko-da-k/items/47b96883144a5bf1cb1e)

## 実行手順
1) 起動

```bash
$ docker-compose up -d
```
2) PostgreSQL環境へ入る

```bash
$ docker-compose exec postgres /bin/ash
```
3) DDLを生成する

```
# cd /tmp
# ddlgenerator -i postgresql {your_file}.csv > {your_file}.sql
```
4) SQLの発行

```
# psql -U postgres -d metabase -f {your_file}.sql > /dev/null
```
5) ブラウザアクセス
</br>

http://localhost:3000 へアクセス</br>

ユーザ登録後に、下記の通りデータベースへの接続設定をしてください。</br>
※パスワードはdocker-compose.ymlに記載した「metabase」です。</br>
![metabase_settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609518/ef69ac1d-68a9-c226-d44c-ffedf084b309.png)

自動探査(X-ray)である程度自動的に可視化してくれます。</br>
もちろん自分でSQLを画面から作成したり、テーブル結合をGUIから実施することも可能です。
![metabase_example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609518/19781f55-a5f5-abe3-4554-63f8f0ff139a.png)
Metabase自体の良い所や足りない所、その他OSSのBIツール比較に関しては下記の記事を参考にさせていただきました。
> [OSSのデータ可視化ツール「Metabase」が超使いやすい](https://qiita.com/acro5piano/items/0920550d297651b04387)

## 参考記事
- [Docker for Windowsでpostgresのデータマウントができない人へ](https://qiita.com/ko-da-k/items/47b96883144a5bf1cb1e)
- [OSSのデータ可視化ツール「Metabase」が超使いやすい](https://qiita.com/acro5piano/items/0920550d297651b04387)