Вы можете либо попросить создателей вашего входного файла использовать один разделитель (как это делают большинство людей), либо вам придется выполнить некоторую предварительную обработку.Например, вы можете сделать это с помощью шага U-SQL, который исправляет файл и затем импортирует этот файл в вашу базу данных SQL, например, некоторый простой U-SQL:
// Multiple column delimiters
@input =
EXTRACT
col1 string
FROM "/input/input91.txt"
USING Extractors.Text(delimiter:'~', skipFirstNRows:1);
// Do some other processing here?
@output = SELECT col1.Replace("||", "|") AS col2 FROM @input;
OUTPUT @output
TO "/output/output.txt"
USING Outputters.Text(delimiter : '|', quoting : false);
NB. Здесь я использовал разделитель(тильда "~"), который, как я знаю, не будет присутствовать во входном файле, чтобы эффективно импортировать все столбцы как один столбец, а затем исправить его.
Есть ли особая причина, по которой вы используете два разделителя?
Кроме того, если ваш файл находится в хранилище BLOB-объектов, теперь вы можете BULK INSERT
в базу данных SQL Azure, и, пройдя этот быстрый тест, BULK INSERT может справиться с несколькими разделителями, например,
DROP TABLE IF EXISTS #tmp
CREATE TABLE #tmp (
a VARCHAR(50),
b VARCHAR(50),
c VARCHAR(50),
)
GO
BULK INSERT #tmp
FROM 'D:\Data Lake\USQLDataRoot\input\input91.txt'
WITH ( FIELDTERMINATOR = '||', DATA_SOURCE = '<yourDataSource>' );
См. здесь для получения дополнительной информации о шагах, которые включают создание внешнего источника данных и учетных данных.Затем можно заставить Data Factory использовать задачу Stored Proc для выполнения, например.