【DynamoDB】CSVやExcelから簡単にデータをインポートできるRazorSQLが便利！ （インストールから簡単な使い方まで）

# はじめに
最近、仕事でDynamoDBを使うことが増えてきました。DynamoDBにさくっとデータ投入するのであれば、RazorSQLが便利だよ！という話です。日本語での情報をあまり見かけないので投稿します。

## 今の悩み
**DynamoDBに開発中のテストデータを手動で入れるのが本当に面倒**

項目の作成から毎回手動で1つ1つ追加していくのは嫌だ・・・。

![image](https://user-images.githubusercontent.com/31679558/42298038-8f84e6de-803e-11e8-8e32-fcd32fe15e83.png)

## DataPipelineを組むスキルも(まだ)ない
[DynamoDBでデータのexport/importを行う](https://dev.classmethod.jp/cloud/aws/dynamo-export-import/)のように、DynamoDBにインポートするならDataPipelineを使うのが王道なのだと思います。試しに触ってみましたが、よくわかりませんでした。なにより、DataPipelineを習得する時間をかけられない。ぐぬぬ。

かと言って、わざわざJSONファイルを用意するのも面倒だ・・・。
むしろExcelとか、CSVでインポートできないのか・・・。

## RazorSQLを試してみた
同僚からよさげなツールを紹介してもらいました。

https://www.razorsql.com/


DynamoDBに対応しており、Windows、Mac、Linuxで使えます。
**30日無料で使える評価版があります。**

## インストール手順
早速インストールしてみましょう。

- **accept**をクリック
![image](https://user-images.githubusercontent.com/31679558/42297571-6f9a0e10-803b-11e8-874d-7d7f6509f438.png)

- インストール先を指定
![image](https://user-images.githubusercontent.com/31679558/42297587-8189ab62-803b-11e8-8a16-e3946e4f95e8.png)

- ショートカットメニューの作成
    - デフォルトでOK

![image](https://user-images.githubusercontent.com/31679558/42297609-a0ba0b8a-803b-11e8-89dc-74e616443348.png)

- デスクトップショートカットの作成
    - デフォルトでOK

![image](https://user-images.githubusercontent.com/31679558/42297615-ad6c0b1c-803b-11e8-89b0-1816debfaa85.png)

- インストール実行
    - **Install**をクリック

![image](https://user-images.githubusercontent.com/31679558/42297626-c127bb6a-803b-11e8-8eed-fdcc0787618e.png)

## RazorSQLの起動
- 起動直後の画面。トライアル版なので30日使える
    - **Register Later**をクリック

![image](https://user-images.githubusercontent.com/31679558/42297670-0e1c60ec-803c-11e8-89cc-6554184d213a.png)

- pgAdminのような、よくあるDB開発ツールのUIが表示される
    - 左側の**Click to Connect to a Database**をクリックする
![image](https://user-images.githubusercontent.com/31679558/42297704-3ce7d690-803c-11e8-82a2-d3aadb267dd2.png)

## DynamoDBへの接続
- **DynamoDB(Amazon)**を選択し、**Continue**をクリック
![image](https://user-images.githubusercontent.com/31679558/42297732-738be72c-803c-11e8-8f4c-138107d33adf.png)

- 自分のAWSアカウントのAccesskeyなどを入力して、**CONNECT**をクリック
    - Profile Name
        - 任意の名称
    - AWS Access Key
        - 自分のIAMロールのキー
    - AWS Secret Key
        - 自分のIAMロールのキー
    - AWS Server
        - 東京リージョンなら、`dynamodb.ap-northeast-1.amazonaws.com`
    - Max Rows per Query
        - 必須項目なので、任意の整数を入れる
        - 「クエリで取得できる最大行数」プロビジョニングされたキャパシティのことではないので注意。後で変更も可能。

![image](https://user-images.githubusercontent.com/31679558/42297752-9e6fbd7e-803c-11e8-83a9-001ea1e0e8a3.png)

- 設定値が正しければ、以下の画面が表示される
![image](https://user-images.githubusercontent.com/31679558/42297929-d0e39040-803d-11e8-94a1-9cad6f4f524f.png)

- 接続に成功するとテーブル一覧が表示される
    - + ボタンをクリックしていくことでツリー状に表示される
![image](https://user-images.githubusercontent.com/31679558/42298019-79f81192-803e-11e8-89cf-c1d8ef62b8b6.png)

## テーブル情報の表示
- 任意のテーブルを右クリックして、 **View Contents**をクリック
![image](https://user-images.githubusercontent.com/31679558/42298388-ab72465a-8040-11e8-9707-5c516dcf3d59.png)

- テーブル内のデータが表示される。日本語は文字化けしてしまうので注意が必要
![image](https://user-images.githubusercontent.com/31679558/42298421-c5d3e738-8040-11e8-9d59-3df471812a32.png)

## データの追加
- 表示されたデータをダブルクリックすると、データ編集画面が表示される
![image](https://user-images.githubusercontent.com/31679558/42298456-eb71fe44-8040-11e8-9442-403a81d165eb.png)

- +(Insert Row）をクリックすると、項目が1つ追加される
    - 開発中のテーストデータ登録を入れるなら便利かも

![image](https://user-images.githubusercontent.com/31679558/42298536-6895b4d8-8041-11e8-8993-959a3559c409.png)

- 入力データの反映を行うためには、SQLタブを開き、 **Execute SQL**をクリックする
![image](https://user-images.githubusercontent.com/31679558/42298608-d3db822c-8041-11e8-9431-f56b14be6d00.png)

- 一番左のrefreshボタンをクリックすると、再描画される。項目が増えていることを確認
![image](https://user-images.githubusercontent.com/31679558/42298641-fc7ccf1a-8041-11e8-92b4-8d8e7f8cc90f.png)

## 大量データのインポート
- ExcelでDynamoDBにインポートしたいデータを用意
![image](https://user-images.githubusercontent.com/31679558/42299018-d16614d8-8043-11e8-8c4f-eafb3f04711b.png)

- 任意のテーブルを右クリックして、 **Import Data**をクリック
![image](https://user-images.githubusercontent.com/31679558/42298898-486ffae0-8043-11e8-9ff7-93ebfc657512.png)

- Excel(XLSX format)を選択して、 **Next**をクリック
![image](https://user-images.githubusercontent.com/31679558/42299051-eebd84f8-8043-11e8-8dd2-ca773e20ed79.png)

- インポートするExcelファイルを選択して、 **Next**をクリック
    - Excelファイルを読み込むと、自動的に`Start Row`、`End Row`に値が入る
    - 1行目が列名だった場合は2行目から読み込んでくれるので便利
![image](https://user-images.githubusercontent.com/31679558/42299068-070ea474-8044-11e8-89a6-4a82c5625abe.png)

- 読み込んだExcelファイルから、SQLが生成される。デフォルトのまま **Execute**をクリック
![image](https://user-images.githubusercontent.com/31679558/42299195-c270b202-8044-11e8-9b8e-e3d864ffe7d5.png)

- インポートが実行される。成功すると以下のダイアログが表示される。
![image](https://user-images.githubusercontent.com/31679558/42299208-d89a12a8-8044-11e8-90ff-f4ea60af5767.png)

- インポートしたテーブルを表示すると、データが増えている
![image](https://user-images.githubusercontent.com/31679558/42299262-31b01798-8045-11e8-9200-0fd7b29f3cd2.png)

- AWS側から見ても、データが増えている。素晴らしい！！！！
![image](https://user-images.githubusercontent.com/31679558/42299273-400497f6-8045-11e8-9164-9ef485e1e3d7.png)

## テーブルごとデータの全件削除
- 任意のテーブルを選択して、右クリック **Drop**をクリック
![image](https://user-images.githubusercontent.com/31679558/42299332-918a9724-8045-11e8-924e-98ef6bbb3e66.png)

- **Delete**をクリック
![image](https://user-images.githubusercontent.com/31679558/42299355-aebf8408-8045-11e8-9648-c9b6330dd67a.png)

- テーブル内の全データが削除されたことを確認
![image](https://user-images.githubusercontent.com/31679558/42299386-d8d5d3dc-8045-11e8-9851-dd3c2e3e0139.png)

- ある程度の時間が経過するとテーブルも削除される
    - DropのほかにDrop Tableもあるが、Dropを実行するとテーブルも消えた。

## 【データインポート時のTips1】キー以外の項目をインポートする
- DynamoDBのテーブルが空の場合、RazorSQLのデフォルトではPKのみインポートされる。そのため、以下のようなデータ（ハッシュキー:`tag` レンジキー:`keyword`）を用意しても、キーではない`created_at`をインポートすることができない。

| tag  | keyword | created_at |
| ---- | -------- | ---------- |
| hoge | hoge     | 123456789  |
| fuga | fuga     | 123456789  |

- RazorSQLに`created_at`を認識させるためには、DynamoDBに`created_at`を持つデータを1つ用意する。

![image](https://user-images.githubusercontent.com/31679558/42300024-4f445efa-8049-11e8-85b9-8d54cd1ec45e.png)

- そうすることで、インポート時に`created_at`が表示されるようになる
![image](https://user-images.githubusercontent.com/31679558/42300040-68594806-8049-11e8-9fb3-d4aa1653291a.png)

## 【データインポート時のTips2】Number型の項目をインポートする
- ExcelやCSV形式で、桁数の大きい数字（例:UNIX時間）を入力しても、RazorSQL側で`1.2346E+10`等に変化されてしまう場合がある
- そういう時は、Excel側で **CSV(コンマ区切り)**にすると正しくインポートできる。
![image](https://user-images.githubusercontent.com/31679558/42300717-cdad9b1e-804c-11e8-95d7-26f8362adb9f.png)
- 以下は、UNIX時間を含む項目をCSVインポートした例
![image](https://user-images.githubusercontent.com/31679558/42300778-0d6cd49a-804d-11e8-9a3a-9847e716f161.png)

## 価格
**1ユーザ当たり、$99.95とのことです。**



https://razorsql.com/register.html



# おわりに
RazorSQLは、有償ツールですが買っても約1万円なので、利便性を考慮してチームで買いたいと思います。DynamoDBを使った開発が効率化できそうです！