2017-01-08 1 views
1

を取得:Azureのデータ湖解析IOutputterは私がAAローカルデータベースに私のU-SQLスクリプトの結果を書き込むために、カスタムIOutputterを使用している出力ファイル名

OUTPUT @dataset 
TO "/path/somefilename_{*}.file" 
USING new CustomOutputter() 

public class CustomOutputter: IOutputter 
{   
     public CustomOutputter() 
     { 
      myCustomDatabase.Open("databasefile.database"); 
     }  

     public override void Output(IRow input, IUnstructuredWriter output) 
     { 

     } 
} 

「databasefileを置き換えるために、任意の可能性があります。指定された出力ファイルパス "/path/somefilename_{*}.file"を使用して "データベース"を作成しますか?

output.BaseStreamをデータベースに渡すことができないため、正しいファイル名に正しく書き込む方法が見つかりません。

 public override void Close() 
     { 
      using (var fs = File.Open("databasefile.database", FileMode.Open)) 
      { 
       byte[] buffer = new byte[65536]; 
       int read; 
       while ((read = fs.Read(buffer, 0, buffer.Length)) > 0) 
       { 
        this.output.BaseStream.Write(buffer, 0, read); 
        this.output.BaseStream.Flush(); 
       } 
      } 
     } 

答えて

1

私はあなたが達成しようとするのかわからないです:私はADLAにローカルDBファイルをコピーする方法

UPDATEはOutputStreamを提供します。 (ローカル実行は、この時点ではそのような制限を持たない)ADLAに実行されたとき

  1. Outputters(及び一般的にのUDO)は、それらのコンテナ(VM)を残すことができません。したがって、コンテナの外にあるデータベースに接続することはブロックされ、一時的なVM /コンテナ内のデータベースにデータを書き込むのに役立つのかどうかはわかりません。

  2. UDOモデルは、outputのストリームにinput行(セット)のデータを書き込むことによって、ADLSまたはWASBのいずれかにあるファイルに書き込むための明確なモデルを持っています。ローカルファイルに書き込むこともできますが、頂点の実行が終了した後もこれらのファイルは存在しなくなります。

この情報があれば、言い換えてください。あなたはデータの移動を行うにはADFを使用し

  1. コメントを明確に基づいて

    アップデートは、あなたが行セットからデータベースを生成するための2つのオプションがあります。これは最も一般的に使用されるアプローチであり、おそらく最も簡単です。

  2. あなたは出力器カスタムを使用する場合は次のことを試みることができる:
    1. は(あなたがリソースとしてデータベースを展開する必要があり、そうあなたはおそらく小さなを必要とするあなたの頂点にローカルなデータベースに出力行セットを書きますデータベースのインターフェイスを使用して
    2. を使用し、データベースファイルを頂点ローカルディレクトリから出力ストリームに読み込み、ファイルをADLSにコピーします。
    3. 出力ファイルにアトミックファイル処理が必要なため、多くのデータベースファイルを書き込んで一緒に縫い合わせることは避けてください。
+0

ありがとうございます。 私の意図は、ADLAにデータベースファイルを作成させて、それ以上の処理をせずに他のサービスで使用できるようにすることでした。 ADLAのこれらの制限のため、私は、 DFとADLA出力をデータベースファイル形式に変換するためのカスタムアクティビティを作成できますか? – coalmee

+1

実際には、2つのオプションがあります。 1. ADFを使用してデータ移動を行います。 2.カスタム出力を使用する場合は、次のように試してみてください。 頂点にローカルなデータベースに出力行セットを書き込みます(データベースをリソースとして展開する必要があるかもしれないので、データベース・インタフェースを使用して、データベース・ファイルを使用して、データベース・ファイルを頂点ローカル・ディレクトリから出力ストリームに読み込み、そのファイルをADLSにコピーします。アトミックなファイル処理が必要であり、データベースをリソースとして頂点に展開することに注意してください。 –

+0

私は第2のアプローチを好むでしょう。私は既にDBファイルを出力ストリームにコピーしようとしました。しかし、出力ストリームにファイルを書き込んでいる間は、行サイズの制限が4MBで失敗しています。参照:http://stackoverflow.com/questions/41533328/azure-data-lake-analytics-ioutputter-e-runtime-user-rowtoobig – coalmee

関連する問題