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

У меня есть конвейер фабрики данных Azure (DF), который состоит из операции копирования. Действие Copy использует 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),

2 ответа

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

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

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

Итак, пожалуйста, настройте сервер SQL stored procedure в вашем приемнике sql server в качестве обходного пути.

Пожалуйста, следуйте инструкциям из этого документа:

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

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

Шаг 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

Выход:

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

Есть способ исправить преобразование guid в uniqueidentifierПравильный тип столбца SQL через конфигурацию JSON. Отредактируйте действие копирования с помощью кнопки кода {} на верхней правой панели инструментов.

Помещать:

          "translator": {
        "type": "TabularTranslator",
        "typeConversion": true
    }

в typePropertiesблок CopyМероприятия. Это также будет работать, если схема сопоставления не указана/динамическая.

Другие вопросы по тегам