MemSQLを使ってみようVol.7:実践編1

#インメモリにテーブルを作ってみる・・・
今回から、いよいよMemSQLのメモリ空間にデータを送りこんで、色々と実験していきたいと思います。

で、最初にデータをどうするか・・・ですが、以前Zoomdataの検証で使ったCSVファイルが有りましたので、そのファイルを使ってみる事にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/57056eac-d7ec-a454-b2e3-1fdf48abd015.png)
イメージとしては、8か所のIoTセンサーから1分毎にデータが送られてきて、そのデータをレコーディング・・という極めてシンプルなテーブルになります。もちろん、従来型の電子帳簿型データベースの作り方で、小分けしたテーブルをアグレッシブにリレーショナルし・・という方向でも良いのですが、スケール可能なメモリ空間という「非常に恵まれた状況」が前提条件として存在しますので、とりあえずリレーション等は考慮しない方向での実験から始めようと思います。

また、今回は同じデータを使って「別形式」のCSVも作ってみましたので、そのデータ形式でも同様の検証を行ってみようと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/42ac4531-316e-6c21-1929-110ad2b7aef2.png)

先ほどのアプローチとは異なり、人間の目線では判りにくい構成になっていますが、メトリックス志向とアトリビュート志向で何か違いが出るのか？を確認出来れば面白いかと思い、8x約3600点のデータ変換を行っています。

念のため、最初の部分だけですがデータの比較確認をしてみましょう。
メトリックス志向のテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/7685f3fc-e1f7-e1f6-8451-c2176c022d35.png)
アトリビュート志向のテーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/07abdffc-173d-5b98-7fe9-fdce237e57a8.png)
無事に、コンバートされている様なので、作業を続けます・・・

##CSVテーブルを読み込む...
では、実際に2種類のCSVテーブルをMemSQLに読み込ませて、インメモリ上にテーブルを作ってみたいと思います。

MemSQLの基本的なオペレーションにおいて、CSVファイルを読み込む定形パターンが有りますので（基本的に他のデータベースと同じですが・・・）、その定形クエリを書いて行きます。MemSQLへクエリを送る方法は、大きく分けWebコンソール経由で行うパターンと、通常のターミナル経由で行うパターンの2種類有りますので、都合に合わせて選択されると良いと思います（本編の締めの方で、MySQLのGUIベース開発環境を使って、MemSQLを弄る実験も行う予定ですが、取り急ぎ今回はWebコンソールを使うパターンで紹介させて頂きます）

###Webコンソールを使う方法
Webコンソールの左側に**SQL Editor**というメニューが有りますので、その項目を選択するとWebベースのSQLエディターが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/f176b604-7a6f-f3dd-d350-bab34ce8e37d.png)
まずは、今回の検証用データベースを作ります。

```sql
CREATE DATABASE IF NOT EXISTS test_db;
USE test_db;
```

今回使うCSVファイルの構造を定義して流し込むテーブルを作ります。

```sql
DROP TABLE IF EXISTS test_table01;
CREATE TABLE test_table01(
    date_time DATETIME NOT NULL,
    dev1 DECIMAL(10,9) NOT NULL,
    dev2 DECIMAL(10,9) NOT NULL,
    dev3 DECIMAL(10,9) NOT NULL,
    dev4 DECIMAL(10,9) NOT NULL,
    dev5 DECIMAL(10,9) NOT NULL,
    dev6 DECIMAL(10,9) NOT NULL,
    dev7 DECIMAL(10,9) NOT NULL,
    dev8 DECIMAL(10,9) NOT NULL,
    SHARD KEY(date_time)
);
```

CSVファイルを作成したテーブルに流し込む手順を記述します。
（今回使うCSVファイルは事前にMemSQLを導入したサーバの**/tmp**にコピーしておきます）

```sql
LOAD DATA INFILE '/tmp/Test_Data01.csv'
INTO TABLE test_table01
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
```

エディターを使って、ここまでを記述したら、右上にある**Run**ボタンを押します。
無事にデータベース、テーブル、CSVファイルの流し込みが出来ると
![q8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/2c51146b-92a4-bc5b-453b-02f602bc6102.jpeg)
という感じで処理結果が表示されると思います。
念のためにデータベース、テーブルの状況も確認しておきましょう。
####データベース
![q10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/f1d63e52-14c0-67ef-b9c1-d316d63c49d1.jpeg)
####テーブル
![q9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/121abe78-7425-a118-f1bf-ff13b729b050.jpeg)
##実際にZoomdataで可視化してみる・・・
データの格納状況を確認するために、以前紹介させて頂いたZoomdataと連携させて可視化してみる事にします。
Zoomdata上でのMemSQLのコネクタ導入と設定は、前回までに説明させて頂きましたのでその手順を参考に作業をお願い致します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/8941c066-ca94-878b-9c31-3ad6d41eddda.png)
今回CSVで読み込んだデータ全てを可視化してみます
左下のカレンダーアイコンを選択し、プリセットを選択するとスクロールメニューが出てきますので、一番上の**最大利用可能範囲**を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/a4573b0b-2ee9-895b-26ea-ac34388b4636.png)
今回作成したデータベース上に書き込まれた、8ｘ約3600点のデータがサクッと表示されました。

##次回は・・・
今回の実践編１では、基本的な操作のパターンをCSVファイルを読み込む作業で説明させて頂きましたが、テーブルを定義する作業から後のステップについては、通常のデータ書き込みと同じクエリで殆どの場合問題なく進められると思います。

次回は、残りのテーブルを今回と同様のステップで作成して行きますが、MemSQLの特徴の一つでもある**キーの設定**について、少し詳しく説明して行きたいと思います。今回のテーブル定義の際にも**SHARD KEY**って何？？という違和感を覚えた方が多かったかと思いますが、次回以降でその辺の背景を幾つかの簡単な検証実験を含めて紹介させて頂こうかと考えております。

また、今回の検証作業で作られたテーブルを、Webコンソールで確認すると**「謎の項目が・・・」**確認出来たかと思いますが、これらについても少し突っ込んだ解説をさせて頂く予定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197589/4caf2f03-9fbd-c9c3-2822-d8e374dfc889.png)
とりあえず、今回は無事にインメモリ上にテーブルが出来ていることを確認頂ければ問題ありませんので、無事終了という事で・・。

[**MemSQLを使ってみようVol.8: 実践編2**](https://qiita.com/wadaken1961/items/6ec636ffaea830859bbc)に続く

##謝辞
本解説に転載させて頂いているスクリーンショットは、一部を除いて現在MemSQL社が公開されている公式ホームページの画像を使わせて頂いております。また、本内容とMemSQL社の公式ホームページで公開されている内容が異なる場合は、MemSQL社の情報が優先する事をご了解ください。