2017-07-11 11 views
1

年/月/日の形式で入力フォルダがADLSにあります(例:2017/07/11)。この入力フォルダを私のusqlスクリプトのパラメータとして渡したいと思います。私はADFを使用していません。入力フォルダーが現在の日付かどうかわからないので、私はUsqlスクリプトの中から現在の日付を生成したくありません。それを効果的に行うには?ADFを使用せずにUSQL入力ファイルをパラメータ化する方法

すべての入力フォルダがADLSアカウントにアップロードされ、「完了」ファイルに日付が含まれていると「完了」ファイルをアップロードしていたと思います。しかし、私は入力データパスを形成するためにその日付を使用することができません。助けてください。

+0

U-SQL [stored proc](https://msdn.microsoft.com/en-us/library/azure/mt621314.aspx)? – wBob

答えて

1

フォルダ構造内に複数のcsvファイル(yyyy/MM/ddで構成)があり、特定の日付のフォルダにすべてのファイルを展開するとします。 2つの方法(正確な日時のセマンティクスを必要とするか、またはパス連結を使用しても問題ないかどうかに応じて)を行うことができます。

まず例連結パス:

DECLARE EXTERNAL @folder = "2017/07/11"; // Script parameter with default value. 
             // You can specify the value also with constant-foldable expression on Datetime.Now. 

DECLARE @path = "/constantpath/"[email protected]+"/{*.csv}"; 

@data = EXTRACT I int, s string // or whatever your schema is... 
     FROM @path 
     USING Extractors.Csv(); 
... 

そして、ここでは、仮想列設定ファイルと例を次に示します。いずれの場合も

DECLARE EXTERNAL @date = "2017/07/11"; // Script parameter with default value. 
             // You can specify the value also with constant-foldable expression on Datetime.Now and string serialization (I am not sure if the ADF parameter model supports DateTime values). 

DECLARE @path = "/constantpath/{date:yyyy}/{date:MM}/{date:dd}/{*.csv}"; 

@data = EXTRACT I int, s string // or whatever your schema is... 
       , date DateTime // virtual column for the date pattern 
     FROM @path 
     USING Extractors.Csv(); 

// Now apply the requested filter to reduce the files to the requested set 
@data = SELECT * FROM @data WHERE date == DateTime.Parse(@date); 
... 

を、あなたはADFのパラメータモデルを経由してパラメータを渡すと、 Bobによって提案されたように、コードをU-SQLストアドプロシージャまたはTVFにラップすることができます。

関連する問題