2017-01-08 2 views
0

사용자 지정 IOutputter의 결과를 로컬 디스크의 중간 파일에 쓰려고합니다.Azure 데이터 레이크 분석 IOutputter E_RUNTIME_USER_ROWTOOBIG

그 후 데이터베이스 파일 (~ 20MB)을 adl 출력 저장소에 복사하려고합니다.

안타깝게도 스크립트로 종결 :

'Microsoft.Cosmos.ScopeStudio.BusinessObjects.Debugger.ScopeDebugException' 가 Microsoft.Cosmos.ScopeStudio.BusinessObjects.Debugger.dll

발생 유형의 처리되지 않은 예외

추가 정보 : "진단 코드": 195887112, "심각도": "오류", "구성 요소": "실행 시간" " 행이 최대 허용 크기 인 을 초과했습니다. "행이 최대 허용 크기 인 4MB를 초과했습니다.", "internalDiagnostics": " 7ffe97231797 \"4MB ","설명 ":" tScopeEngine!? ToStringInternal @ KeySampleCollection @SSLibV3 @ ScopeEngine @AEAA? AV? $ basic_string @DU? char_traits @D @ std @@ V? $ allocator @D @ 2 @@ std @@ XZ + 11b7 \ t \ n 7ffe971d7261 \ tScopeEngine! 0ExceptionWithStack @ ScopeEngine @@ QEAA @ W4ErrorNumber @ 1 @ AEBV? $ initializer_list @ VScopeErrorArg @ ScopeCommon @@@ std @@ _ N @ Z + 121 \ t \ n 7ffe971d7f6a \ tScopeEngine !? 0RuntimeException @ ScopeEngine @@ QEAA @ W4ErrorNumber @ 1 @ PEBD Z AA + \ T는 \ n 개의 7ffe6de06aca의 \의 t (NO 모듈)! (이름) \ @ t \ n

public class CustomOutputter : IOutputter 
    { 
     private Stream stream; 

     public override void Close() 
     { 
      base.Close(); 

      using (var fs = File.Open("mydb.data", FileMode.Open)) 
      { 
       fs.CopyTo(stream); 
      } 
     } 

     public override void Output(IRow input, IUnstructuredWriter output) 
     { 
      if(stream == null) 
       stream = output.BaseStream; 

      myDb.Insert("somestuff"); 
     } 
    } 

이 문제에 대한 아이디어가 있으십니까?

답변

2

오류 메시지가 현재 USQL에서 읽거나 쓰는 행의 길이에 제한이 있음을 나타내며 4MB입니다. CSV와 같은 레코드 지향 파일을 사용하면이 한도에 도달하게됩니다.

https://github.com/Azure/usql/tree/master/Examples/FileCopyUDOs/FileCopyUDOs에서 바이너리로 파일을 처리하는 데 도움이되는 바이트 지향 파일 읽기/쓰기 UDO의 예가 있습니다. 이를 사용하여 효과적으로 데이터를 청크 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 하지만 FileCopyUDO로 문제를 해결할 수 없습니다. output.BaseStream의 Output 함수에서 직접 StreamWriter로 쓰고있을 때 나는 4MB 제한을 결코 넘지 않을 것입니다. 내 문제는 내 데이터베이스에 output.BaseStream을 전달할 수없는 내장 데이터베이스를 사용한다는 것입니다. 나는 파일 경로로 데이터베이스를 사용할 수 있습니다. 결과 데이터베이스 파일은 정점에 국한됩니다. 이제 추가 처리를 위해 ADL에서 로컬 파일을 사용할 수있는 방법을 찾을 수 없습니다. – coalmee

관련 문제