ADF отправляет данные json в SQL

#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 с помощью действия хранимой процедуры.

  1. Это мой вывод типа json для моей активности поиска.
     "firstRow": {
        "customerId": 100001,
        "cutomerName": "Tom"
    }
 

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

  1. В 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'

  1. В настройках активности хранимой процедуры мы должны преобразовать json в строку через @string(activity('Lookup1').output.firstRow) . введите описание изображения здесь
  2. Это мой вклад в действие хранимой процедуры. введите описание изображения здесь
  3. Это мой результат отладки: введите описание изображения здесь
  4. Если вы столкнулись с более сложным объектом 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

  1. В настройках активности хранимой процедуры мы должны преобразовать json в строку через @string(activity('Lookup1').output.firstRow) .
    введите описание изображения здесь
  2. Это мой вклад в действие хранимой процедуры. введите описание изображения здесь
  3. Это мой результат отладки:
    введите описание изображения здесь
  4. Если вы столкнулись с более сложным объектом 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.Передача данных. Клиентская библиотека