ファイルをロードするための USQL スクリプトと CSV エクストラクタがあります。ただし、ファイルに 4 列が含まれる月もあれば、5 列が含まれる月もあります。
4 つまたは 5 つのフィールドの列リストを使用してエクストラクターをセットアップすると、ファイルの予想される幅に関するエラーが発生します。区切り文字などをチェックしてください。当然のことです。
USQL がまだ初心者であり、いくつかの基本的なエラー処理が欠けていることを考えると、この問題の回避策は何ですか?
エクストラクタでサイレント句を使用して、4 列に便利な幅の広い列を無視しようとしました。次に、IF 条件を使用して行セットの行数を取得し、5 列のエクストラクターを使用します。ただし、これは、IF 式でスカラー変数として使用されない行セット変数の世界につながります。
また、C# スタイルの count と sizeof(@AttemptExtractWith4Cols) も試しました。どちらも機能しません。
私が取っているアプローチの感触をつかむためのコードスニペット:
DECLARE @SomeFilePath string = @"/MonthlyFile.csv";
@AttemptExtractWith4Cols =
EXTRACT Col1 string,
Col2 string,
Col3 string,
Col4 string
FROM @SomeFilePath
USING Extractors.Csv(silent : true); //can't be good.
//can't assign rowset to scalar variable!
DECLARE @RowSetCount int = (SELECT COUNT(*) FROM @AttemptExtractWith4Cols);
//tells me @AttemptExtractWith4Cols doesn't exist in the current context!
DECLARE @RowSetCount int = @AttemptExtractWith4Cols.Count();
IF (@RowSetCount == 0) THEN
@AttemptExtractWith5Cols =
EXTRACT Col1 string,
Col2 string,
Col3 string,
Col4 string,
Col5 string
FROM @SomeFilePath
USING Extractors.Csv(); //not silent
END;
//etc
もちろん、USQL にTRY CATCHブロックのようなものがあれば、これはずっと簡単になります。
これは取るべき合理的なアプローチでさえありますか?
任意の入力をいただければ幸いです。
お時間をいただきありがとうございます。