Чтение шаблона из Azure пользовательского выходного устройства - PullRequest
1 голос
/ 22 апреля 2020

Я довольно новичок в Azure Data Lake. Я хотел бы создать определяемый пользователем выходной файл, который использует шаблон файла для создания выходного файла. Вопрос в том, каков наилучший способ сохранить и извлечь файл шаблона в выходной файл? Самый простой и легкий способ - встроить файл шаблона в сборку U- SQL и прочитать его из ресурсов сборки. Но это не гибкое решение - если потребуется изменить шаблон, потребуется повторно развернуть dll-модуль вывода. Правильный способ, по-видимому, заключается в том, чтобы сохранить шаблон в Azure хранилище озера данных, но я не уверен, как прочитать шаблон из кода C# преобразователя.

1 Ответ

0 голосов
/ 22 апреля 2020

Я не думаю, что можно ссылаться на внешние файлы внутри определяемого пользователем устройства вывода. Вы в основном обрабатываете построчно и выводите в потоки.

Определяемый пользователем модуль вывода имеет модель программирования, и я не вижу, чтобы она поддерживала доступ к чему-либо вне сборки. Модель программирования, определяемая пользователем,

Я хотел бы предложить следующее: определить логические флаги для различных форматов вывода, которые вы хотите поддерживать, и затем соответствующим образом обработать строки. Таким образом, вы можете иметь один выход для поддержки нескольких форматов вывода.

Уже встроенный преобразователь Outputters.Text () поддерживает несколько форматов путем изменения разделителя. Вы также можете думать о чем-то похожем.

OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text.txt" USING Outputters.Text();
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_outputHeader.txt" USING Outputters.Text(outputHeader: true);
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_charFormat.txt" USING Outputters.Text(charFormat: "string");
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_delimiter.txt" USING Outputters.Text(delimiter: '|');
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_dateTimeFormat.txt" USING Outputters.Text(dateTimeFormat: "D");
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_encoding.txt" USING Outputters.Text(encoding: Encoding.UTF32);
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_escapeCharacter.txt" USING Outputters.Text(escapeCharacter: ':');
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_nullEscape.txt" USING Outputters.Text(nullEscape: "null");
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_quoting.txt" USING Outputters.Text(quoting: false);
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_rowDelimiter.txt" USING Outputters.Text(rowDelimiter: "\u0003");
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_charFormat_nullEscape_escapeCharacter.txt" USING Outputters.Text(charFormat: "string", nullEscape:"NULL", escapeCharacter:'#');
OUTPUT @sampleData TO "/Output/ReferenceGuide/BuiltIn/UDOs/Text_charFormat_encoding.txt" USING Outputters.Text(charFormat: "string", encoding:Encoding.Unicode);

Поскольку вы обрабатываете строку за строкой, в идеале вам не нужен файл шаблона. Вы можете обрабатывать логи c в сборке. но если вам нужен файл шаблона, вы можете сохранить файл в файле ресурсов и развернуть его вместе со сборкой. Вы также можете определить файл конфигурации и развернуть его вместе со сборкой, исходя из необходимости.

...