Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 に保存することも可能です。
実際の処理、分析では、読み込み、処理を行った結果を変数に格納、この変数から再度読み込み、処理を行い、変数に格納するプロセスを複数回行い、最終的な処理結果をファイル等に保存することが一般的です。この流れについては、サンプルコードを用いて以降でご説明します。
SearchLog-2-TransformingRowset.usql
“ SearchLog-2-TransformingRowset.usql” を開くと、以下のような画面が表示されます。
①の EXTRACT では、 Azure Data Lake Store( 以降 ADLS ) 内の ”/Samples/Data/SearchLog.tsv” というファイルを TSV 形式のファイルとしてデータの抽出を行い、結果を @searchlog 変数に格納しています。”SearchLog.tsv” 内には以下のようなデータが保存されています。
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” に保存されたデータは以下の通りです。
SearchLog-3-OrderingGroupingAggregation.usql
“SearchLog-3-OrderingGroupingAggregation.usql” 以降は重複する部分もあるため、ポイントのみをご紹介します。
①では、ファイルのパスやファイル名の指定に用いる変数の宣言、初期化を行っています。
②では、 SUM 関数と GROUP BY を用いた集計を行っています。
③では、 TotalDuration の値の大きい順にデータを並び換え、最初の 5 件のみを @res に格納しています。
以下は 、U-SQL スクリプトの後半ですが、ここでは、保存先のパスやファイル名の指定に、スクリプトの先頭で宣言、初期化した、変数 ( @out1、@out2、@out3) を用いています。
メタデータ オブジェクトとメタデータ カタログ 中編で、ADLA では、データベースやテーブルが作成可能なことをご紹介しました。 ADLA では、これらをメタデータ オブジェクトと呼び、データベースやテーブル以外にも、以下のようなオブジェクトが作成可能です。
メタデータ オブジェクトは、 ADLA によりメタデータ カタログに登録、管理されます。ここでは詳細な説明は省略しますが、メタデータ オブジェクトを活用することで、より効率的にデータの処理、分析が可能です。メタデータオブジェクトの詳細については、以下をご参照下さい。
Data Definition Language (DDL) Statements (U-SQL)
https://msdn.microsoft.com/en-us/library/mt621299.aspx
SearchLog-4-CreatingTable.usql
以降では、代表的なメタデータ オブジェクトのデータベースとテーブルを使用した例をご紹介します。
①では、 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
③では、②で作成した SearchLog テーブルに、 @searchlog 変数に格納された処理結果を保存 ( 追加 ) しています。
SearchLog-5-QueryFromTable.usql
以下の例では、現在使用中のデータベースは master ですが、FROM でテーブル名を指定する際に、< データベース名 >.< スキーマ名 >.<テーブル名> を使用することで、使用中の master データベース以外の SearchLogDemo データベースに格納されている SearchLogDemo テーブルの参照を行っています。
前編、中編、後編の 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