Azure
U-SQL

U-SQLで動的なカラムごとにファイル出力する方法


U-SQLで動的なカラムごとにファイル出力する方法


  • Azure Data Lake StoreにJSONを配置

  • 動的なカラムごとにまとめてBlobにCSVファイルとして出力

を実現したい


ゴールまでの流れ


  1. Data Factoryの作成

  2. サービスプリンシパルの作成

  3. Azure Data Lake Storeのフォルダの権限を変更する

  4. 実行するU-SQLファイルの配置

  5. Data Factoryからサービスへのリンク作成

  6. Pipelinesの作成


Data Factoryの作成

このドキュメントの「Data Factoryを作成する。」のみ実施

Azure Data Factory UI を使用してデータ ファクトリを作成する | Microsoft Doc


  • Blobの作成が一番目の手順となっているが、必要なければやらなくてよい

  • 「リンクされたサービスを作成する」以降は後で実施


サービスプリンシパルの作成

Azure Data FactoryからAzure Data Analyticsの実行、Azure Data Lake Storeへのアクセスにはサービスプリンシパルの作成が必要


サービスプリンシパルとは?

まあ「アプリを実行するためのアカウント」という認識で間違いなさそう

3分でわかるAzureでのService Principal - ShareSlide

サービスプリンシパル(Service Principal)が作れない! - ネスケラボ


サービスプリンシパルの作成

このドキュメント通りやればできる

リソースにアクセスできる Azure Active Directory アプリケーションとサービス プリンシパルをポータルで作成する | Microsoft Doc


  • 簡単に言うと、Azure Active Directoryに新規アプリを登録し、サービスプリンシパルを作成

  • 1つ作成すればOK

  • アプリケーションIDがData FactoryではService principal IDに該当する

  • 「アプリケーションにロールを割り当てる」をやらないとAzure Data Analyticsへのリンクが作成できないっぽい


    • これはサブスクリプションの所有者しかできない




Azure Data Lake Storeのフォルダの権限を変更する

作成したサービスプリンシパルがアクセルできるようにする

Data Lake Store での Azure Active Directory を使用したサービス間認証 | Microsoft Doc


  • 下記キャプチャのように一番上の階層の[Access]に作成したサービスプリンシパルを追加する必要があるため注意

image.png


実行するU-SQLファイルの配置

ADLSにU-SQLファイルを配置し、アクセス権限を変更する

image.png

赤で囲んだところに追加されればOK

image.png


Data Factoryからサービスへのリンク作成

このドキュメントの「リンクされたサービスを作成する」を実施(Blobへのリンク作成方法しかのっていない)

Azure Data Factory UI を使用してデータ ファクトリを作成する | Microsoft Doc

今回、Data Factoryに登録するサービスは


  • Azure Data Lake Store

  • Azure Data Analytics

  • ストレージアカウント(Blob)

となる


Azure Data Lake Storeへのリンク作成方法

以下のように選択

image.png

黄色のところを選択(サブスクリプションとData Lake Storeのアカウント名)

image.png

黄色のところを入力(Azure Active Directoryで登録したアプリIDがService principal ID、キーがService principal key)

image.png

Service principal IDは下記のアプリケーションID

image.png

キーは保存した直後しか確認できないため、わからなくなった場合再度キーを作成する

Test ConnectionでConnection successfulとなればOK

もしならなければ、今までの手順を見直す

image.png


Azure Data Analyticsへのリンク作成方法

以下のように選択

image.png

あとはAzure Data Lake Storeと同様


注意

サブスクリプションのアクセス制御 (IAM) が「所有者」でないと、以下のドキュメントの「アプリケーションにロールを割り当てる」ができずAzure Data Analyticsへのリンクが作成できない

リソースにアクセスできる Azure Active Directory アプリケーションとサービス プリンシパルをポータルで作成する | Microsoft Doc

また、このロールの割り当てが効くのに時間がかかるみたい(おそらく)なので30分ほど待ってからAzure Data Analyticsへのリンクが作成してみるとよい


Pipelinesの作成

Pipelinesの作成

image.png

作成したADLAへのリンクを選択、接続確認

image.png

作成したADLSへのリンクを選択、接続確認

実行したいU-SQLの選択

image.png

ちなみに上のキャプチャの[Parameters][New]でU-SQLに引数を渡せる(今回は使用しない)

後は[Debug]で実行できたらOK


前段の調査

まず、前提として動的なファイル名をつけてファイル出力することはできないみたい。(2018/04/10 時点)

Support 'dynamic' output file names in ADLA | Microsoft Azure

ループを回したりすることもできない

How to process one row at a time in USQL #35 | GitHub


Azure Data Factoryでパイプラインを使えばできるらしい


U-SQLのサンプル

U-SQL Split a CSV file to multiple files based on Distinct values in file | stackoverflow


  • 結局 "script the script"

  • U-SQLでU-SQLを生成して、その生成したU-SQLをPowershellかAzure Data Factoryから呼んであげる必要があるみたい

U-SQL Output in Azure Data Lake | stackoverflow


  • U-SQLでU-SQLを生成するわかりやすいサンプルがある

  • U-SQLの中の人が回答しているみたいだから安心感あり


Azure参考

Azure DataLake 大全 | slideshare


  • Azureの全貌を把握できるスライド


Data Factory参考

Azure Data Factory の概要 | Microsoft Doc

ビッグ データ - Azure Data Lake と Azure Data Factory を使用したビッグ データのパイプラインの作成 | MSDN マガジン January 2016