Не удалось выполнить операцию копирования фабрики данных 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
Мероприятия. Это также будет работать, если схема сопоставления не указана/динамическая.