#azure-data-factory #azure-data-factory-2
Вопрос:
У меня есть конвейер adf для извлечения данных из API и хранения их в хранилище больших двоичных объектов в формате json. Затем я извлекаю те же данные json из большого двоичного объекта с помощью поиска. Используя foreach и фильтр, я получаю определенный контент внутри отфильтрованного json. Теперь мне нужно вставить эти отфильтрованные данные в базу данных. Есть ли способ скопировать отфильтрованные данные в БД?
Ответ №1:
Обновить:
Это тот же процесс, если мы вводим массив json. Как показано ниже,:
Мой ввод заключается [{"customerId":100001,"cutomerName":"Tom"},{"customerId":100002,"cutomerName":"John"},{"customerId":100003,"cutomerName":"Tinny"}]
в том , что я вижу 3 записи в своем SQL Azure.
Здесь я использую действие поиска, чтобы получить один объект json и скопировать его в SQL azure с помощью действия хранимой процедуры.
- Это мой вывод типа json для моей активности поиска.
"firstRow": {
"customerId": 100001,
"cutomerName": "Tom"
}
- В azure sql мы можем создать таблицу и сохраненный процесс.
--1. create table
create table dbo.CustomerInfo(
customerId INT,
cutomerName varchar(50)
)
--2. create stored procedure
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[uspCustomerInfo] @json NVARCHAR(MAX)
AS
begin
INSERT INTO dbo.CustomerInfo(customerId,cutomerName)
SELECT customerId,cutomerName
FROM OPENJSON(@json,N'
-
В настройках активности хранимой процедуры мы должны преобразовать json в строку через
@string(activity('Lookup1').output.firstRow)
.
-
Это мой вклад в действие хранимой процедуры.
-
Это мой результат отладки:
-
Если вы столкнулись с более сложным объектом json, вы можете обратиться к этому документу.
Комментарии:
1. Это потрясающе. Спасибо, что это сработало. У меня есть один запрос здесь, хотя я хотел добиться успеха, в общей сложности это действие завершается ошибкой "Указанная хранимая процедура недопустима". Это может быть вызвано тем, что хранимая процедура не возвращает никаких данных". Можете ли вы помочь мне избежать этого и сделать эту деятельность успешной?
2. Как мы должны обращаться, если у меня есть что-то подобное с несколькими объектами: [ { "Идентификатор клиента": 100001, "Имя пользователя": "Том"}, {"Идентификатор клиента": 100002, "Имя пользователя": "Том1"}]
3. Привет @ARUN VARRIAR. Это тот же процесс, если мы вводим массив json. Я обновил свой ответ. Ты решил проблему
The specified Stored Procedure is not valid...
? Вы используете действие хранимых процедур? Или вы можете опубликовать эту проблему.4. Ошибка: Сбой произошел на стороне "Источника". Код ошибки=SqlInvalidDbStoredProcedure,'Тип=Microsoft.dataTransfer.Common. Общий. Исключение HybridDeliveryException,Сообщение=Указанная хранимая процедура недопустима. Это может быть вызвано тем, что хранимая процедура не возвращает никаких данных. Недопустимый сценарий хранимой процедуры: '[dbo]. [TestProc]'.,Источник=Microsoft.Передача данных. Клиентская библиотека. Также не уверен, что, когда я даю необработанный json, описанные выше шаги работают идеально. Но когда я даю @string(действие('Filter1').вывод.значение), он копирует только значения первой строки
5. Привет @joseph xu Я решил все остальные вопросы. Но все еще не могу решить эту проблему: Ошибка: Сбой произошел на стороне "Источника". Код ошибки=SqlInvalidDbStoredProcedure,'Тип=Microsoft.dataTransfer.Common. Общий. Исключение HybridDeliveryException,Сообщение=Указанная хранимая процедура недопустима. Это может быть вызвано тем, что хранимая процедура не возвращает никаких данных. Недопустимый сценарий хранимой процедуры: '[dbo]. [TestProc]'.,Источник=Microsoft.Передача данных. Клиентская библиотека
)
WITH (
customerId INT N'$.customerId',
cutomerName VARCHAR(255) N'$.cutomerName'
);
end
- В настройках активности хранимой процедуры мы должны преобразовать json в строку через
@string(activity('Lookup1').output.firstRow)
.
- Это мой вклад в действие хранимой процедуры.
- Это мой результат отладки:
- Если вы столкнулись с более сложным объектом json, вы можете обратиться к этому документу.
Комментарии:
1. Это потрясающе. Спасибо, что это сработало. У меня есть один запрос здесь, хотя я хотел добиться успеха, в общей сложности это действие завершается ошибкой «Указанная хранимая процедура недопустима». Это может быть вызвано тем, что хранимая процедура не возвращает никаких данных». Можете ли вы помочь мне избежать этого и сделать эту деятельность успешной?
2. Как мы должны обращаться, если у меня есть что-то подобное с несколькими объектами: [ { «Идентификатор клиента»: 100001, «Имя пользователя»: «Том»}, {«Идентификатор клиента»: 100002, «Имя пользователя»: «Том1»}]
3. Привет @ARUN VARRIAR. Это тот же процесс, если мы вводим массив json. Я обновил свой ответ. Ты решил проблему
The specified Stored Procedure is not valid...
? Вы используете действие хранимых процедур? Или вы можете опубликовать эту проблему.4. Ошибка: Сбой произошел на стороне «Источника». Код ошибки=SqlInvalidDbStoredProcedure,’Тип=Microsoft.dataTransfer.Common. Общий. Исключение HybridDeliveryException,Сообщение=Указанная хранимая процедура недопустима. Это может быть вызвано тем, что хранимая процедура не возвращает никаких данных. Недопустимый сценарий хранимой процедуры: ‘[dbo]. [TestProc]’.,Источник=Microsoft.Передача данных. Клиентская библиотека. Также не уверен, что, когда я даю необработанный json, описанные выше шаги работают идеально. Но когда я даю @string(действие(‘Filter1’).вывод.значение), он копирует только значения первой строки
5. Привет @joseph xu Я решил все остальные вопросы. Но все еще не могу решить эту проблему: Ошибка: Сбой произошел на стороне «Источника». Код ошибки=SqlInvalidDbStoredProcedure,’Тип=Microsoft.dataTransfer.Common. Общий. Исключение HybridDeliveryException,Сообщение=Указанная хранимая процедура недопустима. Это может быть вызвано тем, что хранимая процедура не возвращает никаких данных. Недопустимый сценарий хранимой процедуры: ‘[dbo]. [TestProc]’.,Источник=Microsoft.Передача данных. Клиентская библиотека