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

Microsoft Japan Data Platform Tech Sales Team
清水

みなさん、こんにちは。先日の中編では、Visual Studio を用いて U-SQL をコーディング、実行する際の手順やポイントについてお伝えしましたが、いかがだったでしょうか ? 今回も引き続き U-SQL をコーディング、実行する際の手順やポイントについてお伝えします。

 

前提

Visual Studio で U-SQL  スクリプトをコーディング、実行する方法、サンプルデータやサンプルスクリプトのロード方法については、前編中編をご参照下さい。中編では 、 1 つ目のサンプルスクリプトの “SearchLog-1-First_U-SQL_Script.usql” について説明したので、後編では、 2 つ目のサンプルスクリプトの ”SearchLog-2-TransformingRowset.usql” から説明を行います。

 

U-SQL を用いたデータ処理

U-SQL を用いたデータ処理の基本的な流れは、以下のようにファイル等からデータを読み込み、それを処理し、ファイル等に保存するというものです ( 正確には、直接ファイル等に保存するのではなく、処理結果を一旦変数に格納し、変数からファイル等へ保存 ) 。データの読み込みは、 ADLS 、 ADLA( 後述 するメタデータ オブジェクトのテーブル等)に加え、 Azure Storage BLob や Azure SQL Database からも可能です。処理結果は、 ADLS 、 ADLA( 後述 するメタデータ オブジェクトのテーブル等 ) に加え、 Azure Storage Blob に保存することも可能です。

image

実際の処理、分析では、読み込み、処理を行った結果を変数に格納、この変数から再度読み込み、処理を行い、変数に格納するプロセスを複数回行い、最終的な処理結果をファイル等に保存することが一般的です。この流れについては、サンプルコードを用いて以降でご説明します。

 

SearchLog-2-TransformingRowset.usql

“ SearchLog-2-TransformingRowset.usql” を開くと、以下のような画面が表示されます。

image

①の EXTRACT では、 Azure Data Lake Store( 以降 ADLS ) 内の ”/Samples/Data/SearchLog.tsv” というファイルを TSV 形式のファイルとしてデータの抽出を行い、結果を @searchlog 変数に格納しています。”SearchLog.tsv” 内には以下のようなデータが保存されています。 image

ADLA の標準機能では CSV 、 TSV 及びその他の文字で区切られたテキストファイルからデータの抽出が可能です。また、 gzip 形式で圧縮されたこれらのファイルについては、事前の解凍は不要で直接読み込みを行うことも可能です。 JSON 等のその他の形式のファイルからデータを抽出するためには、ユーザー定義エクストラクターを定義する必要があります。詳細については、以下をご参照下さい。

 

U-SQL プログラミング ガイド

/ja-jp/azure/data-lake-analytics/data-lake-analytics-u-sql-programmability-guide

(※ ” ユーザー定義エクストラクターを使用する ” をご参照下さい。)

ユーザー定義 Extractor のサンプルコード等

https://github.com/Azure/usql/tree/master/Examples/DataFormats/Microsoft.Analytics.Samples.Formats

 

②の SELECT では、 @serchlog 変数から WHERE で指定した検索条件にあてはる行を抽出し、@rs1 という変数に格納しています。

③の SELECT では、 @rs1 変数から行を抽出し、 再度 @rs1 に格納しています。

④の OUTPUT では、 @rs1 に格納されている行を CSV 形式で “/output/SearchLogResult2.csv” に出力しています。

U-SQL スクリプトの実行方法等については、中編をご参照下さい。 U-SQL スクリプト実行後に、 ”SearchLogResult2.csv” に保存されたデータは以下の通りです。

image

 

SearchLog-3-OrderingGroupingAggregation.usql

“SearchLog-3-OrderingGroupingAggregation.usql” 以降は重複する部分もあるため、ポイントのみをご紹介します。

image

①では、ファイルのパスやファイル名の指定に用いる変数の宣言、初期化を行っています。

②では、 SUM 関数と GROUP BY を用いた集計を行っています。

③では、 TotalDuration の値の大きい順にデータを並び換え、最初の 5 件のみを @res に格納しています。

以下は 、U-SQL スクリプトの後半ですが、ここでは、保存先のパスやファイル名の指定に、スクリプトの先頭で宣言、初期化した、変数 ( @out1、@out2、@out3) を用いています。

image

 

メタデータ オブジェクトとメタデータ カタログ 中編で、ADLA では、データベースやテーブルが作成可能なことをご紹介しました。 ADLA では、これらをメタデータ オブジェクトと呼び、データベースやテーブル以外にも、以下のようなオブジェクトが作成可能です。

image

メタデータ オブジェクトは、 ADLA によりメタデータ カタログに登録、管理されます。ここでは詳細な説明は省略しますが、メタデータ オブジェクトを活用することで、より効率的にデータの処理、分析が可能です。メタデータオブジェクトの詳細については、以下をご参照下さい。

 

Data Definition Language (DDL) Statements (U-SQL)

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

 

SearchLog-4-CreatingTable.usql

以降では、代表的なメタデータ オブジェクトのデータベースとテーブルを使用した例をご紹介します。

image

①では、 SearchLogDemo というデータベースを作成しています。また、 ”USE DATABASE SearchLogDemo” により現在使用中のデータベース を、 master から SearchLogDemo に変更しています。

②では、①で作成した SearchLogDemo データベースに、 SearchLog というテーブルを作成し、 UserID 列にインデックスを設定しています。なお、”SearchLog-4-CreatingTable.usql” を Visual Studio で開き、そのまま実行すると、 “PARTITION BY” がサポートされていない旨のエラーが発生しますが、これは “DISTRIBUTED BY” に置き換えられたためです。詳細については、以下をご参照下さい。

 

Start of Deprecation of old PARTITIONED BY Syntax

https://github.com/Azure/AzureDataLake/blob/master/docs/Release_Notes/2016/2016_08_01/USQL_Release_Notes_2016_08_01.md#start-of-deprecation-of-old-partitioned-by-syntax

 

③では、②で作成した SearchLog テーブルに、 @searchlog 変数に格納された処理結果を保存 ( 追加 ) しています。

 

SearchLog-5-QueryFromTable.usql

以下の例では、現在使用中のデータベースは master ですが、FROM でテーブル名を指定する際に、< データベース名 >.< スキーマ名 >.<テーブル名> を使用することで、使用中の master データベース以外の SearchLogDemo データベースに格納されている SearchLogDemo テーブルの参照を行っています。

image

 

前編中編後編の 3 回で ADLA(U-SQL) を用いたデータの処理、分析についてお伝えしましたが、いかがだったでしょうか?本連載が、みなさんの ADLA(U-SQL) のキャッチアップの一助なれば幸いです。

 

関連記事

はじめての Azure Data Lake ~ そもそも Data Lake って何? ~ はじめての Azure Data Lake ~ 環境構築からファイル アップロードまで ~ はじめての Azure Data Lake ~ Azure Data Lake Analytics でデータを分析してみよう ( 前編 ) ~ はじめての Azure Data Lake ~ Azure Data Lake Analytics でデータを分析してみよう ( 中編 ) ~ はじめての Azure Data Lake ~ Azure Data Lake に HDInsight(Hadoop、Storm、Spark 等 ) からアクセスしてみよう ~ Microsoft Japan Data Platform Tech Sales Team ブログの HDInsight 関連記事一覧 U-SQL Language Reference Azure Data Lake & Azure HDInsight Blog