2017-03-06 12 views
3

テーブルに含まれる異なるキー値の数がわからない場合は、列の値に基づいて複数のファイルに自動的に分割できますか? キー値をファイル名に入れることはできますか?Azure Data LakeでのU-SQL出力

答えて

0

大きな質問!私は、リース氏が何を返答しているか見ることに興味があります。

謝罪しますが、これは半分の答えです。

私の最初の考えは、あなたのキー値を使ってADLテーブルを分割することです。しかし、潜在的なWHERE句が確定的でない場合は、別々の出力をどのように扱うかはわかりません。たぶん、すべての結果でクロスに参加して....通過してください!

動的なコードを含むWHILEループを使用するとよいでしょう。

ダイナミック入力データセットについて語っているMSフォーラムでこの記事をチェックしてください。 FYIと同じように。

https://social.msdn.microsoft.com/Forums/en-US/aa475035-2d57-49b8-bdff-9cccc9c8b48f/usql-loading-a-dynamic-set-of-files?forum=AzureDataLake

+0

正確に!カーソルやwhile/forループでは簡単な作業ですが、反復がないと、多くのシナリオでは使用できません..... – peterko

+0

私は使用できないと言っていません。 USQLは宣言型言語で、作業負荷を柔軟にスケーラブルに並列化できます。データの反復処理が遅く、おそらく間違ったツールを使用する必要がある場合は....これはOracleのカーソルではありません! :-) –

+0

あなたは正しく、私のケースでは使用できないと言っています:) – peterko

7

これが私たちのtop askである(そして、あまりにも:)以前asked on stackoverflowてきました。私たちは現在、それに取り組んでおり、夏までに利用できるようにしたいと考えています。

それまでは、スクリプトジェネレータを作成する必要がありました。ここで

など私は、スクリプトを生成するために、U-SQLを使用する傾向がありますが、PowerShellのか、T4でそれを行うことができ例です。

は、あなたが次の表に列name用のファイルを作成したいと仮定しましょう/行セット@x

name | value1 | value2 
-----+--------+------- 
A | 10  | 20 
A | 11  | 21 
B | 10  | 30 
B | 100 | 200 

あなたは次のようなスクリプトを生成するスクリプトを記述します。

@x = SELECT * FROM (VALUES("A", 10, 20), ("A", 11, 21), ("B", 10, 30), ("B", 100, 200)) AS T(name, value1, value2); 

// Generate the script to do partitioned output based on name column: 

@stmts = 
    SELECT "OUTPUT (SELECT value1, value2 FROM @x WHERE name == \""+name+"\") TO \"/output/"+name+".csv\" USING Outputters.Csv();" AS output 
    FROM (SELECT DISTINCT name FROM @x) AS x; 

OUTPUT @stmts TO "/output/genscript.usql" 
USING Outputters.Text(delimiter:' ', quoting:false); 

次に、あなたのta ke genscript.usqlの場合は、計算を@xの前に置き、送信して2つのファイルに分割されたデータを取得します。

+0

"/ output/genscript.usql"ファイルのスクリプトを入力してください。 – Arron

+0

こんにちはArron、私はあなたが私に提供したいと思うか分からない。上記のスクリプトは、genscript.usqlコンテンツを生成します。 –

+0

@xデータセットは外部のgenscript.usqlファイルにどのように渡されますか?それを実行する最良の方法は何ですか?データファクトリー? – coltonfranco

関連する問題