U-SQLとファイル内の特定のフィールドのみを使用して、大きなファイルをファイル/ディレクトリに分割するにはどうすればよいですか?

トラビス・マニング

非常に大きなCSVがあり、各行には顧客IDとストアID、およびトランザクション情報が含まれています。現在のテストファイルは約40GB(約2日分)であるため、選択したクエリで妥当なリターン時間を得るには、パーティション分割が絶対に必要です。

私の質問はこれです:ファイルを受け取ると、そのファイルには複数のストアのデータが含まれています。「仮想列」機能を使用して、このファイルをそれぞれのディレクトリ構造に分割したいと思います。その構造は「/Data/{CustomerId}/{StoreID}/file.csv」です。

OUTPUTステートメントで動作するようにまだ取得していません。したがって、ステートメントの使用は次のとおりです。

// Output to file
OUTPUT @dt
TO @"/Data/{CustomerNumber}/{StoreNumber}/PosData.csv"
USING Outputters.Csv();

次のエラーが発生します。

Bad request. Invalid pathname. Cosmos Path: adl://<obfuscated>.azuredatalakestore.net/Data/{0}/{1}/68cde242-60e3-4034-b3a2-1e14a5f7343d

誰かが同じようなことを試みたことがありますか?フィールドからの出力パスを連結しようとしましたが、それは失敗でした。2つのIDを受け取り、データセット全体をフィルタリングする関数(UDF)として実行することを考えましたが、それはひどく非効率的です。

読んでくれてありがとう!

saveenr

現在、U-SQLでは、スクリプトのすべてのファイル出力をコンパイル時に理解する必要があります。つまり、入力データに基づいて出力ファイルを作成することはできません。

データに基づく動的出力は、2017年後半のリリースに向けて積極的に取り組んでいるものです。

その間、動的出力機能が利用可能になるまで、目的を達成するためのパターンには2つのスクリプトを使用する必要があります

最初のスクリプトは、GROUP BYを使用して、CustomerNumberとStoreNumberのすべての一意の組み合わせを識別し、それをファイルに書き込みます。

次に、スクリプトまたはSDKを使用して作成されたツールを使用して、前の出力ファイルをダウンロードし、CustomerNumberとStoreNumberの各ペアに対して明示的なOUTPUTステートメントを持つ2番目のU-SQLスクリプトをプログラムで作成します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ