オンプレからクラウドへの移行 IBM Lift チュートリアル: （１）CSVをクラウドDBへ

このチュートリアルでは、オンプレからクラウドへのデータベース移行ツール IBM Liftのインストールから、簡単な使い方までざっくりご紹介します

## そもそも IBM Liftとは？
無償で使えるDB移行ツールです
ソースは、Db2などIBMのデータベースはもちろん、OracleDBやSQL Serverなど他社DBもサポート。
サポートされてないDBについては、CSV化すればOKです。

英語であればここにやり方書いてありますが、このページでは日本語で説明します。
https://lift.ng.bluemix.net/


### Step0: 準備するもの/使ったもの
- クライアントPCはMac Bookを使っています
- 移行先としてDb2 on Cloud （作り方は[こちら](https://qiita.com/azzeten/items/5d06afc6b5df352410a2)）
- 移行元のCSV（サンプルは[こちら](https://ibm.box.com/s/45stfa0a695jag2vs3i4mfxf3ar13nxb)）
- DDL

```sql
create table LIFT_TESTTABLE(l_date date,p_code char(3),c_code char(10),amount int,s_person varchar(30));
```


## インストール

### Step1: Liftのインストール

- IBM Cloudのカタログ画面から「Lift」を選択します（右にあります）。
- その後画面右下の「作成」をクリックします。
　　　![image.png](https://qiita-image-store.s3.amazonaws.com/0/119378/f282be90-07f6-bdb6-394c-fab74baec55f.png)


- 以下のような画面が表示されます。「Get Started」をクリックします

　　　![image.png](https://qiita-image-store.s3.amazonaws.com/0/119378/16c06332-27f4-1cbb-c512-d3f0ebd6f88e.png)

- 画面右上の「DownLoad」をクリックします。WindowsやMacなどどの端末用のLiftをインストールするか選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/119378/be6f1ee7-75f7-efea-9da5-1c46b50bc0af.png)

- IBM Cloudにログインしなさいと言われるので、ログイン..（このへんが一番まどろっこしいですが、我慢です）
　　　![image.png](https://qiita-image-store.s3.amazonaws.com/0/119378/1a5fab04-2008-88f6-f47c-8e209332d73e.png)

- どのアカウントでログインしますか？と聞かれるので、自分のアカウントを選択。そのあとは「Agree」
　　　![image.png](https://qiita-image-store.s3.amazonaws.com/0/119378/8b5025fd-45dc-0183-44bf-0411a2c8e359.png)

- 自動的にモジュールのダウンロードが始まるのでデスクトップなど分かりやすいところに保存。
- と、同時に、ブラウザには以下のような長い文字列が出てきます。これをテキストエディタ等にコピーしておいてください。あとで使います。
　　　![image.png](https://qiita-image-store.s3.amazonaws.com/0/119378/ea7596f8-e125-5aeb-0d6b-81cd78c0c5cd.png)


- ダブルクリックしてファイルを解凍
- コマンドプロンプト（ターミナル）から解凍したフォルダに移動
- インストールコマンドを実行
- さっきテキストエディタにコピーした文字列をコピペし、インストール完了です。具体的なコマンドは以下のとおりです。

```bash
#フォルダに移動
$ cd lift-cli-install/
META-INF         lift-cli-install

# インストールコマンドを実行、sudoで実行してください
$ sudo lift-cli-install/install /opt/lift-cli

# Mac端末のパスワードを入力
Password:

# さっきコピーした文字列をペースト
Provide the token you were given when you downloaded Lift:
Qg.eyJBIjoiMDZhZTFlM2Y1NzMwYWVkNWJkZDQ3ZmVjNTg5NGE3OGUiLCJFIjoiWU5BVFNVTUlAanAuaWJtLmNvbSIsIkgiOiJDUUFsdk9SbnBVM3RSU2dBRTd2dFdqaDlmckt4VUhaMm5KVnRDV2ZcL1UxRnJwUElGMEMxdmh5S0hTT2tWK3JBK2xzeVBCWDFQcnVlbjRBQWhXZzJPRGc9PSIsIksiOiI2YTJmZWQ1MWRlMzY3ODFlZjkyNmJjNzliYzMwNjcyNjE4MjExOTk2NGE4YjcyZjI1MzA4NmY2NTQxMWNhNWFmNzhlNGUxYzJjMmMyY2MwYmEyM2ZjMjgxZGIwNGNhYjYxMDlhYjcyZDAzMzFmM2RmYjE0M2QzN2Y4Mzk4YWY1YiJ9.MCwCFCcKkcwuZ8ZrX7ApYgNOnRSoWnkOAhQMdn/s/dPaTiOLFSLjcbilBDX7Hw

Installing Lift to /opt/lift-cli
Install complete.

#以上でインストール完了！
```
- .bashrcを編集しliftコマンドの在り処をPATHで設定します

```bash
# .bashrcを編集
$ vi ~/.bashrc

# viで「export PATH=/usr/local/bin:（中略）....:/opt/lift-cli/bin」となるように、
# 最後に「:/opt/lift-cli/bin」を追記

# .bashrcを再読込
$ source ~/.bashrc
```

## CSVをクラウドDBへ



### Step2: Liftを使ってCSVをクラウドへ

移行先のDb2 on CloudでDDLを流して、テーブル定義を先に設定します

- メニューから「RUN SQL」をクリック
- 冒頭に紹介したDDLをこのエディタにコピペ
- コピペ後、左上の「実行」をクリック
- 正常に実行されたことを確認します
　　　![スクリーンショット 2018-05-03 14.53.34.png](https://qiita-image-store.s3.amazonaws.com/0/119378/d2952bf2-fb56-c8ef-61f1-a4b8ff410e35.png)


- オンプレミスからデータをクラウドへアップロードします
    - 本来は10GBなど非常に大きいデータのほうが効果的なのですが今回は簡素化のために小さいファイルで行います
    - 移行先のDb2 on CloudのID、パスワード、ホスト名を確認します。
    - IBM Cloudの画面でDb2から「サービス資格情報」をクリックすると以下のようにテキストでホスト名やパスワード等が表示されるのでテキストエディタにメモっておきます
　　　![image.png](https://qiita-image-store.s3.amazonaws.com/0/119378/c8b7ef86-6d70-8d20-8f41-35fae17471a0.png)


- liftコマンドを実行して、まずはCSVをクラウドにアップします
    - ここではCSVの保存先は「/Users/xxx/Desktop」としています
    - パスワードは「PASSWORDxxxxxxxx」としています
    - ホスト名はdashdb-txn-xxxxx.netとしています

```bash
# liftコマンドを実行
$ sudo lift put --file /Users/xxx/Desktop/sampledata_lift.csv --target-user jln84695 --target-password PASSWORDxxxxxxxx --target-host dashdb-txn-xxxxx.net

# Mac端末のパスワードを入力
Password:

#あとは自動的にアップロードが始まります
Putting file /Users/xxx/Desktop/sampledata_lift.csv (size 412B) at a maximum throughput of 500.00 Mb/s.
[##########] Put 412/412 B at < 1 Mb/s (0 sec remain)

Transferred file /Users/xxx/Desktop/sampledata_lift.csv in 7 seconds at average throughput of < 1 Mb/s.
The file transfer completed successfully.
```


- liftコマンドを実行して、Db2 on Cloudにデータをロードします
    - パスワードは「PASSWORDxxxxxxxx」としています
    - ホスト名はdashdb-txn-xxxxx.netとしています

```bash
$ sudo lift load --filename sampledata_lift.csv --target-schema JLN84695 --target-table LIFT_TESTTABLE --header-row --remove --file-origin user --target-user jln84695 --target-password PASSWORDxxxxxxxx --target-host dashdb-txn-xxxxx.net
Loading file sampledata_lift.csv into JLN84695.LIFT_TESTTABLE
Loaded file sampledata_lift.csv into "JLN84695"."LIFT_TESTTABLE" in 1 seconds
Load Id: 613715431
Details
  Rows loaded: 11
  Rows skipped: 0
  Rows rejected: 0
  Rows deleted: 0
```


### Step3: 移行が完了したか確認

- Db2 on Cloudにログインして内容を確認します。
- EXPLOREの画面からスキーマを選択、そのあとに表を選択します。
ここでは先程作ったLIFT_TESTTABLEです。

　　　![スクリーンショット 2018-05-03 14.58.44.png](https://qiita-image-store.s3.amazonaws.com/0/119378/42891ca9-27fb-b0f6-94b8-083d8c86e1db.png)


- このようにCSVが正常にロードされていることを確認します

　　　![スクリーンショット 2018-05-03 14.58.51.png](https://qiita-image-store.s3.amazonaws.com/0/119378/bdc6f78b-5c1a-73f4-b388-879d5971e92e.png)



**おつかれさまでした!!**