SQL Data Warehouse を試してみる


SQL Data Warehouseはどんなサービスでしょうか？

私の理解ではMPPで並列処理するように拡張されたSQL Serverのように理解しています。
Amazon Redshiftの対抗ということですが、アーキテクチャ的にはTeradataとかGreenPlumなどとも同じになるかなと。

他のMPPデータベースと同様、コントロールノード（マスター）とコンピュートノード（スレーブ）の構成を取るようです。

とりあえず、クエリを投げるところまで試してみます。

##構成する

Azureのポータルメニュの＋から、データ＋ストレージ -> SQL Data Warehouse（プレビュー）を選びます。
設定は、とりあえず以下のとおり。

* 名前：hoge（これがSQL Server内のデータベースの名前になります）
* サーバー：これがSQL Serverのホスト名になります。また、ID,PWはログイン時のID,PWになります。
* パフォーマンス 71.4円/時とはいえ、最小単位の100DWUに設定。
* ソースの選択　テスト用にクエリを投げたいのでサンプルを選びます。お馴染みAdventureWorksが設定されます。
* その他はとりあえずデフォルト


>デフォルトでは400DWUになっていますが、軽くベンチマークしたところ、400〜600DWUくらいが最もバランスが良いようです。


![sqldwh](http://www.bluecode.jp/qiita/sqldwh/001.png)


5分くらいで構成は終わりました。
リソースではSQL Serverと（その中に）SQLデータベースというのができる。階層が同じなのでわかりにくい。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/002.png)

* SQL Server：ユーザー、Firewall等、各種設定を行う。
* SQLデータベース：接続先、クエリ先。

##補足：SQL ServerとSQLデータベースの関係

上記の例では、データベース（DWH）名とサーバ名をhoge/hogeと同じにしてしまったので、SQL ServerとSQLデータベースの関係が少々わかりにくくなっていました。なので、以下、補足です。

* ①一番に設定する名前というのはデータベースの名前のようです。
* ②サーバ名は、そのままです。ホスト名です。
* ③はSQL認証時のログイン名となります。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/010.png)

完成したリソース表示における関係は下記の通り。
最初に設定したデータベースがサーバの下層リソースというのがこのレイアウトだと少々わかりにくい。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/011.png)

ログイン時の画面では、接続先のホスト名とログインID（とパスワード）が利用されます。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/012.png)

この図が一番関係がわかり易い。最初に設定した名前はSQL Server内のデータベース名となる。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/013.png)

以上、補足でした。

##利用する

###接続

では作成したData Warehouseにクライアントから接続してみましょう。

####Firewallの設定

接続のためにはまず、Firewallでクライアントからの接続を許可します。
設定はSQL Serverの方のメニューから行ないます。

>設定後は必ず「保存」をしましょう。私はそれをせずにしばらくハマりました。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/003.png)

####接続クライアント

Firewallの設定が終わったらいよいよ接続です。が、2015年12月5日現在、SQL Data WarehouseはSQL Server Management Studio(SSMS)では利用できないようです。

ではどうするかというとVisualStudio(VS)を利用するようです。この時点で、心折れそうですが、頑張ってすすめてみます。
幸い、VSはインストールしてありました。なお、接続には最新の[SQL Server Data Tools](https://msdn.microsoft.com/en-us/library/mt204009.aspx)をを入れたほうが良いみたいなので入れました。

VSは無償で利用できる[Community版](https://www.visualstudio.com/ja-jp/products/visual-studio-community-vs.aspx)がありますので、必要な人はインストールして下さい。

####接続情報と接続

接続情報はSQLデータベースの方のメニューを見れば、書いています。それをコピペして接続先として登録することも出来ますし、上部メニューの「VisualStudioで開く」的なメニューを押すことでVSが起動し、接続できます。

>PHP用の接続文字列なども取得できるようです。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/004.png)

接続時にはID,PWを聞かれますので、申込の際に入力したID,PWを入力します。

>ここでログインできない場合はSQL ServerメニューのFirewallの設定を確認してください。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/005.png)


接続できました。
サンプルを選んだので、AdventureWorksのテーブル群が展開されています。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/006.png)

ではクエリをかけてみます。テータベースを右クリックするなりして、Queryウインドウを開きます。
クエリは何でもいいですが、ここでは、

```sql
select count(*) from dbo.FactInternetSales;
```

としました。入力したら、Executionボタンを押します。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/007.png)

ここまでくれば後は、SQL Serverの世界です。

とは言え、アーキテクチャが違うため、使えないコマンド、プロシージャもあります。詳しくはこちらをどうぞ。

##スケールさせる

詳細はさておき、スケールさせることは簡単です。SQLデータベースのメニューからスライダーを動かすだけ。

![sqldwh](http://www.bluecode.jp/qiita/sqldwh/008.png)

メニューから監査の設定や透過暗号なども適用できるようです。

そのうち、大きめのデータ入れてベンチマークもしてみたいと思います。

##参考

###データロード

ここではサンプルデータを利用しましたが独自データのロード方法については[こちら](http://qiita.com/zaburo/items/87d5d2c3160691b05e75)を参考にして下さい。

###外部

* https://azure.microsoft.com/ja-jp/documentation/articles/sql-data-warehouse-get-started-provision/
* https://azure.microsoft.com/ja-jp/documentation/articles/sql-data-warehouse-get-started-connect/
* http://blog.engineer-memo.com/2015/09/25/sql-data-warehouse-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B-%E3%81%9D%E3%81%AE-1/