Azure Фабрика данных: в исходном наборе данных есть хранимая процедура с определяемым пользователем типом таблицы - PullRequest
1 голос
/ 02 апреля 2020

У меня есть хранимая процедура, которая принимает определенный пользователем тип таблицы в качестве параметра. Я хочу использовать этот SP в исходном наборе данных в операции копирования данных фабрики данных Azure. Я видел примеры, где мы можем использовать определяемый пользователем тип таблицы в наборе данных приемника, но не с исходным набором данных.

Можно ли выполнить SP с определенным пользователем типом таблицы в качестве параметра, чтобы получить данные из SQL и скопировать их в хранилище BLOB-объектов?

Вот мой SP:

CREATE PROCEDURE [export].[up_get_qnxt_enrollment_date]
      @effectiveDate DATETIME
     , @lobPlanDimIDs export.intList READONLY
AS
BEGIN
 ......
END

export.intList - это пользовательский тип таблицы:

CREATE TYPE [export].[intList] AS TABLE(
    [Id] [int] NULL,
    [Name] [varchar(256)] NULL
)

Я не могу установить этот параметр в наборе исходных данных Azure DF. Я попытался установить этот массив JSON, но безуспешно:

"typeProperties": {
                    "source": {
                        "type": "AzureSqlSource",
                        "sqlReaderStoredProcedureName": "[export].[up_get_qnxt_enrollment_date]",
                        "storedProcedureParameters": {
                            "effectiveDate": {
                                "type": "DateTime",
                                "value": "2004-01-01"
                            },
                            "lobPlanDimIDs": {
                                "type": "export.intList",
                                "value": [
                                    {
                                        "Id": {   "type": "int",  "value": 1   },
                                        "Name": {  "type":  "String", "value": "ABC" }
                                    },
                                    {
                                        "Id": {   "type": "int",  "value": 2   },
                                        "Name": {  "type":  "String", "value": "DEF" }
                                    }
                                ]
                            }
                        },
                        "queryTimeout": "02:00:00"

Есть что-то, чего мне не хватает или эта функция еще не доступна в Azure DF?

Обновление: Согласно предложению Мартина Эстебана Зуриты, я использовал запрос вместо SP. Это идеальный обходной путь. Я также создал запрос функции: Поддержка определяемой пользователем таблицы в Azure DF для источника

Пожалуйста, сообщите, если вам нужна эта функциональность.

1 Ответ

1 голос
/ 03 апреля 2020

Для более основанного на конфигурации подхода вы можете проверить эту запись в блоге от pragmati c works: https://blog.pragmaticworks.com/using-stored-procedure-in-azure-data-factory

Когда я столкнулся с этой проблемой, то, как я решил это было использование запроса вместо использования хранимой процедуры enter image description here

, а затем вызов запроса, как если бы он вызывался из командной строки sql, например:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()
DECLARE @lob AS intList
insert into @lob (Id, Name) select 1, 'ABC'
insert into @lob (Id, Name) select 2, 'DEF'
EXEC [up_get_qnxt_enrollment_date] @tmp, @lob

Надеюсь, это помогло!

...