2017-10-05 1 views
1

if-elseステートメントを使用して、データをエクスポートする場所を決めます。 私の場合は、次のとおりです。私はAzureブロブストレージからいくつかのファイル(それはファイルが存在しないことも可能です!!)を抽出Azureデータレイク - 条件

  1. ファイルセットのレコード数を計算します。
  2. レコードの数が> 20の場合、特定のレポートの場所にファイルをエクスポートします
  3. ファイルセットにレコードがない場合、既存のレポートを置き換える必要がないため、空のファイルを別の場所に出力する必要があります。空のレポート。

解決策はIF..ELSEの告白である可能性があります。問題は、レコードの数を計算すると、行セット変数があり、スカラー変数と比較できないということです。

@RECORDS = 
SELECT COUNT(id) AS IdsCount 
FROM @final; 


IF @RECORDS <= 20 THEN //generate dummy empty file 
    OUTPUT @final_result 
    TO @EMPTY_OUTPUT_FILE 
    USING Outputters.Text(delimiter : '\t', quoting : true, encoding : Encoding.UTF8, outputHeader : true, dateTimeFormat : "s", nullEscape : "NULL"); 
ELSE 
    OUTPUT @final_result 
    TO @OUTPUT_FILE 
    USING Outputters.Text(delimiter : '\t', quoting : true, encoding : Encoding.UTF8, outputHeader : true, dateTimeFormat : "s", nullEscape : "NULL"); 
END; 
+0

しようとしているのは、行セット変数をスカラー変数として使用することです。今のところusqlでは不可能です。 [this](https://stackoverflow.com/q/40094944/2417043)と[this](https://stackoverflow.com/q/41394628/2417043)の質問を参照してください。 – arghtype

答えて

1

現在、U-SQLのIF文はコンパイル時にのみ使用されます。だから、

IF FILE.EXIST() THEN 

ような何かを行うことができますしかし、あなたは、レコードの数に応じて、出力の異なるファイルにしたい場合は、SDK/CLIレベルでそれを記述する必要があります:最初の仕事は一時を書き込み

ファイル出力(そして、行数を含むステータスファイルかもしれません)。次に、ファイルが空であるかどうか(たとえば、使用する基準)をチェックし、そうでない場合は、結果をコピーします。空の出力ファイルを作成します。