Не удалось выполнить операцию копирования фабрики данных Azure, сопоставив строки (из csv) с полем uniqueidentifier приемника таблицы SQL Azure

У меня есть конвейер фабрики данных Azure (DF), который состоит из операции копирования. Действие копирования использует HTTP-коннектор в качестве источника для вызова конечной точки REST и возвращает поток CSV, который попадает в таблицу базы данных SQL Azure.

Копирование не выполняется, если CSV содержит строки (например, 40f52caf-e616-4321-8ea3-12ea3cbc54e9), которые сопоставлены с полем uniqueIdentifier в целевой таблице с сообщением об ошибке The given value of type String from the data source cannot be converted to type uniqueidentifier of the specified target column.

Я безуспешно пытался обернуть исходную строку {}, например {40f52caf-e616-4321-8ea3-12ea3cbc54e9}.

Действие копирования будет работать, если я изменил поле целевой таблицы с uniqueIdentifier на nvarchar(100).


person Lee    schedule 19.07.2018    source источник


Ответы (1)


Воспроизведу вашу проблему на своей стороне.

введите здесь описание изображения

Причина в том, что типы данных источника и приемника не совпадают. Вы можете проверить Сопоставление типов данных для SQL-сервера.

введите здесь описание изображения

Ваш исходный тип данных - string, который сопоставлен с nvarchar или varchar, а uniqueidentifier в базе данных sql требуется тип GUID в фабрике данных azure.

Итак, настройте сервер sql stored procedure в приемнике сервера sql в качестве временного решения.

Следуйте инструкциям из этого документ:

Шаг 1. Настройте набор данных Sink:

введите здесь описание изображения

Шаг 2: Настройте раздел Sink в действии копирования следующим образом:

введите здесь описание изображения

Шаг 3. В своей базе данных определите тип таблицы с тем же именем, что и sqlWriterTableType. Обратите внимание, что схема типа таблицы должна быть такой же, как схема, возвращаемая вашими входными данными.

    CREATE TYPE [dbo].[CsvType] AS TABLE(
    [ID] [varchar](256) NOT NULL
)

Шаг 4. В своей базе данных определите хранимую процедуру с тем же именем, что и SqlWriterStoredProcedureName. Он обрабатывает входные данные из указанного источника и объединяет их с выходной таблицей. Обратите внимание, что имя параметра хранимой процедуры должно быть таким же, как «tableName», определенное в наборе данных.

Create PROCEDURE convertCsv @ctest [dbo].[CsvType] READONLY
AS
BEGIN
  MERGE [dbo].[adf] AS target
  USING @ctest AS source
  ON (1=1)
  WHEN NOT MATCHED THEN
      INSERT (id)
      VALUES (convert(uniqueidentifier,source.ID));
END

Вывод:

введите здесь описание изображения

Надеюсь, это поможет вам.Любое беспокойство, пожалуйста, дайте мне знать.

person Jay Gong    schedule 19.07.2018