BluemixでAnalytics 〜dashDBにデータをロードしてみる


[前回](http://qiita.com/saboten10/items/75dce524abe42779e368)、データ分析のためにIBMのBluemixを使ってデータ分析環境を構築することにしました。クラウドということもあり、またサーバーのスペックもEntryレベルなので一番小さいですが、どれくらいのパフォーマンスが出るのかも気になっています。
さて、今回は新規にテーブルを作成して、外部のCSVファイルをロードしてみます。

##テーブルの作成
まず、データを格納するためのテーブルを準備します。dashDBは外部から接続して操作することもできますが、せっかくなのでBluemix上に準備されている管理画面を操作していくことにします。
####Tablesメニュー
管理画面の左袖のメニューの中からTablesというメニューをクリックするとテーブルを操作できる画面が開きます。テーブルを作成するには以下の手順で操作します。
サンプルのデータが格納されたスキーマがありますが、自分のスキーマを
選択して、その中にテーブルを作成します。

![スクリーンショット_2015-08-11_21_59_40.png](https://qiita-image-store.s3.amazonaws.com/0/89268/dc58c630-2cc0-1ea6-32d1-af1f8ba10fc5.png "スクリーンショット_2015-08-11_21_59_40.png")

テーブル作成画面では、テーブルの新規作成と同時にデータロードもできますが、まずはテーブルだけ作成してみます。
画面を開くとSQLのCREATE文が書かれていますので、ここを自分の作りたいテーブル定義に書き換えます。
[dashDB create table](http://www-01.ibm.com/support/knowledgecenter/SS6NHC/com.ibm.swg.im.dashdb.sql.ref.doc/doc/r0000927.html)

![スクリーンショット_2015-08-11_22_13_33.png](https://qiita-image-store.s3.amazonaws.com/0/89268/c23abcfa-5625-87b1-e2f8-081f6e77e6f6.png "スクリーンショット_2015-08-11_22_13_33.png")


今回準備したテストデータを格納するテーブルはこんな感じ。dashDBの実装はDB2のようで、定義もDB2のそれに似ています。


```
CREATE TABLE "APPL_LOG" 
(
  "SERVER_NAME" VARCHAR(13),
  "DATE_STRING" DATE,
  "TIME_STRING" TIME,
  "SQL_ID" VARCHAR(44),
  "ERAPSED_TIME" INTEGER
);
```
**Run DDL**ボタンを押して、テーブルが作成されると下記のダイアログが表示されます。
<p><img src="https://qiita-image-store.s3.amazonaws.com/0/89268/eb216a40-59b2-2ea6-2891-035f131ffcfa.png" alt="スクリーンショット 2015-08-11 22.57.27.png" width="600" /></p>

再び、tablesメニューへ戻ると新しく作成したテーブルがプルダウンから選択できるようになっています。テーブルを選択するとDDLで定義した内容が表示されます。
![スクリーンショット_2015-08-11_23_05_35.png](https://qiita-image-store.s3.amazonaws.com/0/89268/7f990615-8256-7f29-0196-5548fa3db346.png "スクリーンショット_2015-08-11_23_05_35.png")


これでテーブルが作成できました。
ここまでの流れで気づいたかもしれませんが、分析用のデータベースと言ってもDB2やOracleのRDBと何ら変わりはありません。操作もSQL文で行うことができます。（でも大量データ参照用に最適化されているということです）

##データロード
それでは作成したテーブルにデータをロードしていきます。
###データロード方法
dashDBで作成したテーブルへのデータロード方法は大きく４つあります。

* Load from Desktop
* Load from Cloud
* Load Geospatial Data
* Sync from Cloudant

![スクリーンショット_2015-08-12_12_39_35.png](https://qiita-image-store.s3.amazonaws.com/0/89268/0c2e93e2-d46a-e5ed-9c3e-71ea1b0d71f0.png "スクリーンショット_2015-08-12_12_39_35.png")


####Load from Desktop
操作しているPCのローカルに保存されているファイルをサーバーにアップロードします。ファイルの形式はExcel形式か、CSV形式になります。ファイルのサイズによってはExcelでは扱えないような行数になりますので、その場合にはCSV形式が便利だと思います。今回はCSV形式のファイルを取り込んでみます。
####Load from Cloud
すでにクラウド上に保管されているデータをdashDBのテーブルへ取り込みます。クラウド先は、Amazon S3もしくはSoftlayer object storage(Swift file system)とのことです。これらのクラウド上に配置してあるCSVファイルをロードできるとのこと。また定期的に取り込むようにスケジュールも登録できます。
####Load Geospatial Data
地図情報を絡めた分析ができるようになるようです。この分野詳しくないので後で調べておきます。
####Sync from Cloudant
同じくBlumix上のサービスとして提供されているNoSQLデータベースであるCloudantに格納されているデータをdashDBの特定のテーブルと同期できます。Coludantのデータが変更されると自動的にdashDB側のデータを書き換えることができるようです。Cloudantにトランザクションデータを格納して、それをdashDBで検索・分析するような使い方ができます。
###CSVファイルのロード
Load from Desktopを選択してローカルPC内に保管されているCSVファイルをロードしていきます。
ロード用に４つのCSVファイルを準備しています。それぞれのファイルには各サーバーごとのログが格納されています。ファイルの内容は下記のようなもので、カンマ区切りでSERVER_NAME, DATE, TIME, SQL_ID, ERAPSED_TIME となっています。

```
server-1,2015-07-20,18:03:38,SQL1JTBL_DAO_002D,1
server-1,2015-07-20,18:03:38,SQL1ITBL_DAO_002D,0
server-1,2015-07-20,18:03:38,SQL1HTBL_DAO_005S,0
server-1,2015-07-20,18:03:38,SQL1NTBL_DAO_001S,1
server-1,2015-07-20,18:03:38,SQLELTBL_DAO_012S,1
server-1,2015-07-20,18:03:38,SQLEJTBL_DAO_015S,1
```
各ファイルとも３００MBくらいのサイズで、それぞれ６００万行くらい入っています。
![スクリーンショット 2015-08-12 14.16.52.png](https://qiita-image-store.s3.amazonaws.com/0/89268/3d89db19-bcea-6ed2-4066-1ff04f2ea87b.png "スクリーンショット 2015-08-12 14.16.52.png")
それではロードしていきます。Load from desktopの画面で必要事項を設定していきます。
![スクリーンショット_2015-08-12_14_19_53.png](https://qiita-image-store.s3.amazonaws.com/0/89268/9989e4f4-f21d-dc5f-baab-90ead113ece0.png "スクリーンショット_2015-08-12_14_19_53.png")


![スクリーンショット_2015-08-12_14_20_08.png](https://qiita-image-store.s3.amazonaws.com/0/89268/e133539c-c660-40b4-76b8-05f855e97aca.png "スクリーンショット_2015-08-12_14_20_08.png")

ここまで記入したらLoad Fileボタンを押します。すると警告が表示されました。ファイルは100MBを超えているので時間かかるけど他の方法でやらない？みたいな内容。そのまOKします。

![スクリーンショット 2015-08-12 14.20.48.png](https://qiita-image-store.s3.amazonaws.com/0/89268/f7248bdc-7265-823d-64c3-13eecea1d06a.png "スクリーンショット 2015-08-12 14.20.48.png")
ここで実際にファイルがアップロードされているみたいです。今回使った３００MBのCSVファイルのアップロードに約５分ほどかかりました。
![スクリーンショット_2015-08-12_14_21_20.png](https://qiita-image-store.s3.amazonaws.com/0/89268/3ebad390-9785-7475-d525-400b7c6efbad.png "スクリーンショット_2015-08-12_14_21_20.png")
サーバーへのアップロードが完了すると取り込んだファイルの先頭部分が表示されています。問題なくアップロードされているようなので、次へ進みます。
![スクリーンショット_2015-08-12_14_31_05.png](https://qiita-image-store.s3.amazonaws.com/0/89268/94406687-0e2c-df0e-b935-dc8dc21c399c.png "スクリーンショット_2015-08-12_14_31_05.png")

ターゲットを選びます。今回はあらかじめテーブルを準備してあるのでそこを選択します。
![スクリーンショット_2015-08-12_14_47_08.png](https://qiita-image-store.s3.amazonaws.com/0/89268/81545c0b-1924-93be-5807-8873e992350e.png "スクリーンショット_2015-08-12_14_47_08.png")
テーブルを選びます。
![スクリーンショット_2015-08-12_14_48_17.png](https://qiita-image-store.s3.amazonaws.com/0/89268/d20a3fd0-d7b3-db2c-64aa-66d1b1930b90.png "スクリーンショット_2015-08-12_14_48_17.png")
もともとターゲットのテーブルは空ですが、念のためreplaceを選択します
<p><img src="https://qiita-image-store.s3.amazonaws.com/0/89268/fe6de1cb-a159-de74-0420-21b9a13fab3d.png" alt="スクリーンショット_2015-08-12_14_48_41.png" width="600" /></p>

実行するとテーブルにデータが書き込まれます。ここは３０秒ほどで終了します。終了すると読み込まれたレコード件数と先頭の数行が画面に表示されます。問題なく取り込まれたようです。
最初のファイルのレコード件数は６３０万件でした。

![スクリーンショット_2015-08-12_14_49_31.png](https://qiita-image-store.s3.amazonaws.com/0/89268/1d7f180c-20cc-fda7-9cfc-0b470f8358a7.png "スクリーンショット_2015-08-12_14_49_31.png")

ログファイルは後３つありますので同じ手順で同じテーブルにデータをロードしていきます。手順は同じですが、ターゲットのテーブルにデータを書き込む時のオプションで２つ目以降のファイルは、 **Append new data into the table**　を選ばないと先に入れたデータを上書きしてしまいますので注意してください。

今回は、ここまで。

##次回
dashDBの管理画面を利用してSQLを使ってテーブルデータを分析してみます。

***
シリーズ一覧
1.[BluemixでAnalytics 〜dashDBを作って見る](http://qiita.com/saboten10/items/75dce524abe42779e368)
2.[BluemixでAnalytics 〜dashDBにデータをロードしてみる](http://qiita.com/saboten10/items/74f4c2bd2b65c59df41c)
3.[BluemixでAnalytics 〜dashDBをSQLで操作してみる](http://qiita.com/saboten10/items/bf9c2b342ea6dc5cdfb9)
4.[BluemixでAnalytics 〜dashDBをRから使ってみる](http://qiita.com/saboten10/items/57c3ebb882656a9c5c35)
5.[BluemixでAnalytics 〜dashDBにR Studioから接続してみる](http://qiita.com/saboten10/items/ad537283fb1269ecb3fa)