2016-08-17 8 views
1

二つの質問ファイルが存在し、ファイルをチェックする方法U-SQL

  • 例外処理は、EXTRACTの前に存在しますか? カタログデータのために毎日新しい入力ファイルが生成されるというシナリオがあります。新しい入力をd-1ファイルにマージする必要があります。新しい入力ファイルがソース場所に存在することを確認するために何をマージする前に

  • u-sqlはtry ... catchブロックをサポートしていますか?

答えて

2

ファイルが存在するかどうかのチェックに関して。我々は最近、実際にパーティションの存在をチェックできるコンパイル時のIFステートメントをリリースしました(そして、ファイルやテーブルなどの他のオブジェクトもロードマップ上にあります)。その機能は、(この回答の時点ではまだ1または2 refreshsアウト)解放されると

それは(変更するには、構文の件名)のようなものに見えることがあります。

IF FILE.EXISTS("/mydir/myfile.csv") THEN 
    @data = EXTRACT ... FROM "/mydir/myfile.csv" USING ...; 
    ... 
    @jobstate = SELECT * FROM (VALUES("job completed")) AS T(status); 
ELSE 
    @jobstate = SELECT * FROM (VALUES("file not ready. Job not executed.")) AS T(status); 
END; 

OUTPUT @jobstate TO "/jobs/myjobstate.csv" USING Outputters.Csv(); 

あなたが名前を提供することができるようになりますがパラメータとしても使用できます。あなたのシナリオでうまくいくかどうか教えてください。

さらに、動的な値を使用してプロセスを判断する場合は、ファイルセット構文を使用することもできます。それは単に、空の行セットを作成します。

@data = EXTRACT ..., date DateTime 
     FROM "/mydir/{date:yyyy}/{date:MM}/{date:dd}/data.csv" 
     USING ...; 
@data = SELECT * FROM @data WHERE date == DateTime.Now.AddDays(-1); 
... // continue processing @data that is empty if yesterday's file is not yet there 

は、最初にジョブを送信する前に存在するかどうかを確認するには良い場所であることがあります(たとえば、ADFなど)あなたの仕事のオーケストレーションフレームワークの確認したいこと、と述べました場所。

try catchブロックに関して:U-SQL自体は、スクリプトレベルの最適化可能な宣言型言語で、スクリプト全体にわたって実行時にプランが生成され最適化されます。したがって、動的なTRY-CATCHを提供することは、スクリプトを最適化する能力に深刻な影響を及ぼすため(例えば、試行錯誤ブロックの外で述語または列プルーニングを移動できないなど)、現在利用可能ではない。 TRY/CATCHは、特に宣言的な環境で手続き型のワークフローを模倣するために使用される場合、コードの理解とデバッグを非常に困難にする可能性があります。

しかし、C#ランタイムエラーを捕捉する必要がある場合は、問題なくC#関数内でtry/catchを使用できます。

+0

IF FILE.EXISTSがリリースされましたために、MicrosoftのAzureデータ湖のツールを持っています。 –

0

FILE.EXISTS()は、ローカルで実行すると常にTrueを返します。ただし、Azure Data Lakeに対して実行すると動作します。

は、真

DECLARE @filepath_good = "/Samples/Data/SearchLog.tsv"; 
DECLARE @filepath_bad = "/Samples/Data/zzz.tsv"; 

@result = 
    SELECT FILE.EXISTS(@filepath_good) AS exists_good, 
      FILE.EXISTS(@filepath_bad) AS exists_bad 
    FROM (VALUES (1)) AS T(dummy); 

OUTPUT @result 
TO "/Output/FileExists.txt" 
USING Outputters.Csv(); 

MSDN exampleと、次のTrueを返しをしようとした私は、Visual Studioのバージョン2.2.5000.0

関連する問題