2016-12-28 9 views

答えて

1

に置き換えることができます

Select count(*) as cnt from @table1; 
Select count(*) as cnt from @table2; 

のようなコードの同じ部分の再書き込みを排除するためにどのような方法があり、これはU-SQLで動的なクエリを記述することが可能であるか、さ(Azure Data Lakeチームはこちら)

あなたの質問にはファイルからの読み方が書かれていますが、あなたの例は表を示しています。あなたが本当にファイルから読み込みたいんならば、EXTRACT文が

@data = 
    EXTRACT name string, 
      age int, 
      FROM "/input/{*}.csv" 
    USING Extractors.Csv(); 

時にはパターンによって指定されている複数のファイルを読み取るために、単一のEXTRACT文を許可する「ファイルセット」をサポートし、データが含まれている必要がありますデータをファイル名あなたはこのようにそれを指定することができますので、フローム来た:

@data = 
    EXTRACT name string, 
      age int, 
      basefilename string 
      FROM "/input/{basefilename}.csv" 
    USING Extractors.Csv(); 
+0

ありがとうございます... Basfilenameは私にとって新しいです..私の投稿を編集しました。私が投稿した例はちょっと小さいです。同じ種類の出力とファイル構造を返す異なるファイルに対して複数のクエリを記述しなければならない場合がほとんどです。 – Ajay

+1

ところで、 "basefilename"は予約済みのキーワードではありません。これは任意の有効な識別子です。彼らが重要なのは、アプリケーションが入力ファイル名またはパスの一部に列値(時には「仮想列」と呼ばれる)を適用することです。 – saveenr

+0

Ohk .....これらのクエリをすべてSPやTVFに書くことができます。ここでは、テーブル名、カラム名をパラメータとして渡すことができますか?これは可能ですか? – Ajay

1

私はCSVファイルの最初の行を使用して値に列に一致するカスタムCSV抽出を使用します。ここで

は、カスタムアセンブリの背後にあるかのようにコードのように追加する骨子である:https://gist.github.com/serri588/ff9e3047d8341398df4aea7557f0a82c

私は同様の構造を持つファイルが、わずかに異なる列のリストを持っているので、私はそれを作りました。標準のCSV抽出プログラムはこの作業にはあまり適していません。抽出したいすべての列名を使用してEXTRACTを作成すれば、それらの値が満たされ、残りは無視されます。

TABLE_1が持つ列A、B、Cの Table_2は、列A、C、およびD

私が欲しい、B、およびCを持っているので、私の抽出物は

を次のようになります。たとえば

EXTRACT 
    A string, 
    B string, 
    C string 
FROM "Table_{*}.csv" 
USING new yourNamespace.CSVExtractor(); 

表1、表2は、D.

1

U-SQLは、それ自体が動的な実行モードを提供しない無視し、AおよびCを移入する一方、すべての3つの列を移入しますがいくつかの動的シナリオに役立ついくつかの機能を追加しています。

今日、TVF/SPのテーブルタイプパラメータの正確なスキーマを提供する必要がありますが、柔軟性のあるスキーマパラメータを提供する機能の開発に取り組んでいます。任意の表形式に適用できます(問合せが図形に依存しない限り)。

この機能が利用可能になるまでは、提案があります:

  1. あなたは可能スキーマが何であるかを知っている場合は、次のそれぞれの可能なスキーマのTVF/SPを生成し、それに応じてそれを呼び出します。

  2. スキーマ情報に基づいてスクリプトをコード化するには、SDK(C#、PowerShell、Java、Python、node.js)を使用します(スキーマ情報を取得できるオブジェクトに適用すると仮定します)。行セット式だけではありません)。

関連する問題