【SQL Server 2017 による In-Database R 分析 チュートリアル】Lesson 2: PowerShellを使用したSQL Serverへのデータインポート

#### チュートリアルのはじめから
[SQL開発者のための In-Database R 分析](http://qiita.com/qio9o9/items/4f020bb93dc07567e556)

#### 前のステップ
[Lesson 1: サンプルデータのダウンロード](http://qiita.com/qio9o9/items/de91b3cc60de433a02a5)

#### 次のステップ
[Lesson 3: データの探索と可視化](http://qiita.com/qio9o9/items/b0913b659cc256dffa85)

# Lesson 2: PowerShellを使用したSQL Serverへのデータインポート

このステップでは、ダウンロードしたスクリプト`RunSQL_SQL_Walkthrough.ps1`を実行して、チュートリアルに必要なデータベースオブジェクトを作成とサンプルデータのインポートを行います。

## オブジェクト作成

ダウンロードしたファイル群の中のPowerShellスクリプト`RunSQL_SQL_Walkthrough.ps1`を実行し、チュートリアル環境を準備します。このスクリプトは次のアクションを実行します：

- SQL Native ClientおよびSQLコマンドラインユーティリティがインストールされていない場合はインストールします。これらは、bcpを使用してデータをバルクロードするために必要です。

- SQL Serverインスタンスにデータベースとテーブルを作成し、そこへデータをバルクロードします。

- さらに複数の関数とストアドプロシージャを作成します。

## スクリプトの実行

1.  管理者としてPowerShellコマンドプロンプトを開き、次のコマンドを実行します。
  
    ```PowerShell:PowerShell
    .\RunSQL_SQL_Walkthrough.ps1
    ```
    次の情報を入力するよう求められます。
    - SQL Server 2017 R Serviceがインストールされているサーバ名またはアドレス。
    - 作成するデータベースの名前
    - 対象のSQL Serverのユーザー名とパスワード。このユーザは、データベース、テーブル、ストアドプロシージャ、関数の作成権限、およびテーブルへのデータロード権限が必要です。ユーザー名とパスワードを省略した場合は現在のWindowsユーザによってログインします。
    - ダウンロードしたファイル群の中のサンプルデータファイル`nyctaxi1pct.csv`のパス。例えば、`C:\tempRSQL\nyctaxi1pct.csv`です。
    
    ![sqldev-r-ps-1-gho9o9.png](https://qiita-image-store.s3.amazonaws.com/0/195839/f2fcd6dc-6670-a828-2b60-8c71a19c47b9.png)
    
    ![sqldev-r-ps-2-gho9o9.png](https://qiita-image-store.s3.amazonaws.com/0/195839/8a449f90-73ea-ffc3-ef08-6783cc6e00a1.png)

2.  上記手順の一環で指定したデータベース名とユーザー名をプレースホルダに置き換えるように、すべてのT-SQLスクリプトが変更されています。

3. T-SQLスクリプトによって作成されるストアドプロシージャと関数がデータベース内に作成されていることを確認します。

    |**T-SQLスクリプトファイル**|**ストアドプロシージャ／関数**|
    |---|---|
    |create-db-tb-upload-data.sql|データベースと2つのテーブルを作成します。<br /><br />テーブル`nyctaxi_sample`: メインとなるNYC Taxiデータセットが登録されます。ロードされるデータはNYC Taxiデータセットの1％のサンプルです。クラスタ化カラムストアインデックスの定義によってストレージ効率とクエリパフォーマンスを向上させています。<br /><br />テーブル`nyc_taxi_models`: 訓練された高度な分析モデルが登録されます。|
    |fnCalculateDistance.sql|乗車位置と降車位置の間の直接距離を計算するスカラー値関数`fnCalculateDistance`を作成します。|
    |fnEngineerFeatures.sql|モデルトレーニング用の特徴値セットを返すテーブル値関数`fnEngineerFeatures`を作成します。|
    |PredictTip.sql|モデルを使用した予測のために、訓練されたモデルを呼び出すストアドプロシージャ`PredictTip`を作成します。ストアドプロシージャは、入力パラメータとして問合せを受け入れ、入力行のスコアを含む数値の列を戻します。|
    |PredictTipSingleMode.sql|モデルを使用した予測のために、訓練されたモデルを呼び出すストアドプロシージャ`PredictTipSingleMode`を作成します。このストアドプロシージャは新しい観測値を入力として、個々の特徴値はインラインパラメータとして受け取り、新しい観測値に対する予測値を返します。|
    |PlotHistogram.sql|データ探索用のストアドプロシージャ`PlotHistogram`を作成します。 このストアドプロシージャは、R関数を呼び出して変数のヒストグラムをプロットし、プロットをバイナリオブジェクトとして返します。|
    |PlotInOutputFiles.sql|データ探索用のストアドプロシージャ`PlotInOutputFiles`を作成します。 このストアドプロシージャは、R関数を使用してグラフィックを作成し、ローカルPDFファイルとして保存します。|
    |TrainTipPredictionModel.sql|Rパッケージを呼び出すことによってロジスティック回帰モデルを訓練するストアドプロシージャ`TrainTipPredictionModel`を作成します。 このモデルは、tipped 列値を予測します。ストアドプロシージャの出力は訓練されたモデルであり、テーブルnyc_taxi_modelsに保存されます。|

    ![sqldev-r-browsetables1-gho9o9.png](https://qiita-image-store.s3.amazonaws.com/0/195839/fbf1761d-78a3-e97c-78a8-0d1cb2ae9142.png)
  
    > [!NOTE]
    > T-SQLスクリプトはデータベースオブジェクトを再作成しないため、すでに存在する場合にはデータが重複して登録されます。そのため、スクリプトを再実行する場合は事前に既存オブジェクトを削除してください。

## リンク

#### 次のステップ

[Lesson 3: データの探索と可視化](http://qiita.com/qio9o9/items/b0913b659cc256dffa85)

#### 前のステップ

[Lesson 1: サンプルデータのダウンロード](http://qiita.com/qio9o9/items/de91b3cc60de433a02a5)

#### チュートリアルのはじめから

[SQL開発者のための In-Database R 分析](http://qiita.com/qio9o9/items/4f020bb93dc07567e556)

#### 出典

[Lesson 2: Import data to SQL Server using PowerShell](https://docs.microsoft.com/en-us/sql/advanced-analytics/r/sqldev-import-data-to-sql-server-using-powershell)

#### 関連項目

[Machine Learning Services with R](https://docs.microsoft.com/en-us/sql/advanced-analytics/r/sql-server-r-services)