2017-01-08 6 views
1

Я использую обычай IOutputter писать результаты моего U-SQL скрипт для аа локальной базы данных:Azure Lake Data Analytics 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 в базу данных Я не могу найти способ правильно записать правильное имя файла.

UPDATE Как скопировать локальный файл базы данных в ADLA при условии OutputStream:

 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

Я не уверен, что вы пытаетесь достичь.

  1. Outputters (и UDOs в целом) не может оставить свои контейнеры (VM), когда выполняются в ADLA (локальное исполнение не имеет такого предела в этой точке). Поэтому подключение к базе данных за пределами контейнера будет заблокировано, и я не уверен, что он помогает записывать данные в базу данных в переходном VM/контейнере.

  2. модели UDO имеет хорошо определенную модель для записи в файлы, которые живут в любом ADLS или WASB путем записи данных в строке input (комплект) в поток output «ы. Вы можете писать в локальные файлы, но опять же, эти файлы перестанут существовать после завершения выполнения вершины.

С учетом этой информации, пожалуйста, перефразируйте?

Обновления на основе уточнения комментария

у вас есть два варианта для генерации базы данных из набора строк:

  1. вы используете ADF, чтобы сделать перемещение данных. Это наиболее часто используемый подход и, вероятно, самый простой.
  2. Если вы используете пользовательские outputter вы можете попробовать следующее:
    1. написать выходной набор строк в базу данных, которая является локальной для вашей вершины (вы должны развернуть базу данных в качестве ресурса, так что вам, возможно, потребуется небольшая версия для рабочего места, чтобы вписаться в ограничение размера ресурсов), используя интерфейс базы данных, затем запустите файл базы данных из локального каталога вершин в выходной поток, чтобы скопировать файл в ADLS.
    2. Обратите внимание, что вам нужна обработка атомарного файла на выходе, чтобы избежать записи многих файлов базы данных, которые затем сшиваются вместе.
+0

Благодарим за разъяснения. Моей целью было позволить ADLA создать файл базы данных, который затем может быть использован другими службами без дальнейшей обработки. Так что из-за этих ограничений ADLA кажется, что я должен использовать, например. DF и пользовательский режим для преобразования вывода ADLA в формат моей базы данных, верно? – coalmee

+1

На самом деле у вас есть две возможности: 1. Вы используете ADF для перемещения данных. 2. Если вы используете пользовательский выход, вы можете попробовать следующее: записать выходной набор строк в базу данных, которая является локальной для вашей вершины (возможно, вам придется развернуть базу данных в качестве ресурса, поэтому вам, вероятно, потребуется небольшая версия вписывается в ограничение размера ресурса), используя интерфейс базы данных, затем читайте файл базы данных из локального каталога вершин в выходной поток, чтобы скопировать файл в ADLS. Обратите внимание, что вам нужна обработка атомарного файла и развертывание базы данных в качестве ресурса в вершине. –

+0

Я предпочел бы второй подход. Я уже пытался скопировать файл DB в выходной поток. Но он не работает с ограничением размера строки 4 МБ при записи файла в выходной поток. См. Также: http://stackoverflow.com/questions/41533328/azure-data-lake-analytics-ioutputter-e-runtime-user-rowtoobig – coalmee

Смежные вопросы