はじめての Azure Data Lake ~ Azure Data Lake Analytics でデータを分析してみよう ( 中編 ) ~

Microsoft Japan Data Platform Tech Sales Team
清水

みなさん、こんにちは。先日の前編では、 Azure Data Lake Analytics  の作成方法と U-SQL  スクリプトのコーディング、実行に用いるツールについてお伝えしましたが、いかがだったでしょうか ? 今回は Visual Studio を用いて U-SQL をコーディング、実行する際の手順やポイントについてお伝えします。

Visual Studio 2017 の Azure Data Lake Tools for Visual Studio

Visual Studio で U-SQL  スクリプトのコーディング、実行を行う際は、 Microsoft Azure Data Lake Tools for Visual Studio( 以降 Azure Data Lake Tools) を使用します。前編では、 Visual studio 2015  に Azure Data Lake Tools をインストールする手順をお伝えしましたが、 Visual Studio の最新バージョンである Visual Studio 2017  でも U-SQL スクリプトのコーディング、実行はもちろん可能です。 Visual Studio 2017 では Azure Data Lake Tools  は、 以下のようにインストーラーから「データの保存と処理」→「 Microsoft Azure Data Lake Tools 」を選択することでインストール可能です。

image

今回は、 Visual Studio 2017( 以降 Visual Studio) を用いて U-SQL スクリプトのコーディング、実行を行います。

 

U-SQL(ADLA) プロジェクトの作成

Visual Studio で U-SQL スクリプトのコーディング、実行を行うには、まず U-SQL プロジェクトを作成します。 Visual Studio を起動し、「ファイル」→「新規」→「プロジェクト」を選択すると、以下の「新しいプロジェクト」が起動します。この画面で、「テンプレート」→「 Azure Data Lake 」→「  U-SQL(ADLA) 」を選択すると、複数の U-SQL に関連したテンプレートを確認することが出来ます。

image

通常は「 U-SQL Project 」を選択し、 U-SQL スクリプトをコーディング、実行しますが、ここでは「 U-SQL Sample Application 」を選択し、サンプルスクリプトを用いて説明を行います。 U-SQL プロジェクトが作成されると、「ソリューションエクスプローラ」内に「 AmbulanceDataSet 」と「 SearchLog 」の 2 つのフォルダが確認出来ます。ここでは「 SearchLog 」フォルダ内のファイルを使用するので、「 SearchLog 」フォルダを展開します。「 Samples 」というフォルダと拡張子が .usql のファイルが 5 つ確認出来ます。次に「 SearchLog-1-First_U-SQL_Script.usql 」をクリックし、ファイルを開きます。

image

 

Azure サブスクリプションへの接続

Visual Studio で Cloud Explorer を起動し、 Azure Data Lake Analytics( 以降 ADLA ) を作成した Azure サブスクリプションへ接続します。詳細は、はじめての Azure Data Lake ~ 環境構築からファイル アップロードまで ~の「 2.Visual Studio からのアップロード」をご参照下さい。

 

U-SQL の基本

「 SearchLog-1-First_U-SQL_Script.usql 」を開くと、以下のような画面が表示されます。

image

画面上部には、 ADLA  へ U-SQL スクリプトを送信、実行するための「 Submit 」や接続先の ADLA 名等が表示されています。詳細は以下の通りです。

既定値

設定値

(local) 接続先の ADLA 名を選択します。既定値は (local) で、 Visual Studio が動作している PC 上 で U-SQL スクリプトを実行することを意味しますが、ここでは、 Azure 上に作成した ADLA を前提に説明を行います。
master 既定値 (master) を選択します。ADLA では 、SQL Server 等の RDB と同様にテーブルを作成可能で、作成したテーブルはデータベースに格納されます。既定では master というデータベースのみが存在しています。実際の分析でテーブルを使用する際は、ユーザー定義のデータベースを別途作成し、このデータベースにテーブル等を作成します。
dbo 既定値( dbo )を選択します。参照するデータベース内のスキーマを指定します。

続いて、 U-SQL  スクリプトを細かく見てみます。最初のステートメントは以下の通りです。

 @searchlog =
    EXTRACT UserId int,
            Start DateTime,
            Region string,
            Query string,
            Duration int?,
            Urls string,
            ClickedUrls string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

EXTRACT 式は、後続のフィールドの定義と USING 句 で指定された書式 ( 上記の場合は タブ区切りのテキスト (TSV) )  に従い、 FROM 句で指定したファイル等から行を抽出することを意味します。 EXTRACT  式の詳細については、以下をご参照下さい。なお、 Duration フィールドのデータ型 (int)  直後の “?” は、このフィールドが NULL 値を許容することを意味します。

 

EXTRACT Expression (U-SQL)

https://msdn.microsoft.com/library/en-us/Mt621320.aspx

 

続く OUTPUT 文は、前述の EXTRACT 式で読み取った行を、 TO 句で指定されたファイル等へUSING句で指定された書式で出力することを意味します。

 OUTPUT @searchlog
TO "/output/SearchLogResult1.csv"
USING Outputters.Csv();

OUTPUT 文の詳細については、以下をご参照下さい。

 

Output Statement (U-SQL)

https://msdn.microsoft.com/en-us/library/mt621334.aspx

 

上記の「 SearchLog-1-First_U-SQL_Script.usql  」は全体で ADLS 内の "/Samples/Data/SearchLog.tsv" ファイルから行を読み取り、グループ化や集計等は行わず 、ADLS  内の "/output/SearchLogResult1.csv" ファイルに出力するということになります。続いて ADLA で U-SQL スクリプトを実行するため、「SearchLog-1-First_U-SQL_Script.usql 」の画面上部の「Submit」をクリックします。ADLAに送信した U-SQL スクリプトは、Jobという単位で実行されます。

image

しばらくすると、以下のような画面が表示されます。画面左側には、ジョブの実行状況、実行結果、実行時間等が表示されます。ジョブの実行準備が完了すると、画面右側にジョブ内部での処理の詳細や状況を表示するための Job Graph が表示されます。

image

なお、画面の表示と実際のジョブの実行状況にはタイムラグがあるため、直近の状況を確認したい場合は、imageをクリックし、ジョブの実行状況をアップデートします。 ジョブの実行が完了すると、 Job Summary は以下のように表示され、 Job Result の値は、 Succeeded  になります。 image

出力されたファイルの内容は、 Job Graph 上部の「 Data 」タブで確認することが可能です。

image

Job Outputs 内の「~ SerchLogResult5.csv 」をクリックすると、以下のように出力結果が確認出来ます。

image

 

後編では、残りのサンプルスクリプトを用い、 U-SQL スクリプトのコーディング、実行する際の手順とポイントを引き続きお伝えします。

 

関連記事

はじめての Azure Data Lake ~ そもそも Data Lake って何? ~ はじめての Azure Data Lake ~ 環境構築からファイル アップロードまで ~ はじめての Azure Data Lake ~ Azure Data Lake Analytics でデータを分析してみよう ( 前編 ) ~ U-SQL Language Reference Azure Data Lake & Azure HDInsight Blog