Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

prum
エンジニアが日本で一番成長できる環境を作り続ける
https://www.prum.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away