Запуск конвейера фабрики данных Azure из приложения логики с параметром

Позвольте мне предсказать, что я новичок в приложениях логики и фабрике данных. В любом случае, в настоящее время я работаю над интеграцией, и одна из ее частей заключается в том, что мне нужно запустить конвейер в фабрике данных из приложений логики. Я успешно сделал это, часть один, которую я не могу понять, - это то, как передавать параметры в мой конвейер. Я попытался изменить JSON в разделах "параметры" и "триггеры", но пока не получил ни на что щелкнуть. Конвейер завершает работу, но только с параметрами по умолчанию.

Кому-нибудь удалось это сделать? Любая помощь приветствуется.

Используете ли вы REST API для запуска конвейера фабрики данных? docs.microsoft.com/en-us/azure/data-factory/…. Это может быть полезно в вашем случае. Соединитель приложения логики не поддерживает параметры?

Thomas 02.05.2018 12:39

Возможно, мне придется поиграть с этим, возможно, используя действие HTTP в Logic Apps? В основном пытаюсь понять, действительно ли я могу использовать параметры в коннекторе ADF, что, похоже, я не смогу?

Mike R 02.05.2018 15:55

Да, действие Http должно работать

Thomas 03.05.2018 00:35

Привет, Майк, мне удалось сделать это с помощью комбинации функции Azure и приложения логики. Итак, я написал функцию, которая запускает конвейер, и с помощью .net SDK вы можете передавать параметры.

DraganB 14.05.2018 15:04

Привет, @DraganB, вы можете добавить некоторые детали / снимки экрана в качестве ответа, поскольку это может быть более полезным, чем комментарий. Спасибо.

wBob 15.05.2018 10:11

@wBob вы можете проверить мой ответ и посмотреть, подходит ли он вам :)

DraganB 16.05.2018 11:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
6
7 261
3

Ответы 3

как я сказал в комментарии, я создаю обходной путь с помощью лазурных функций. Функции Azure и приложение логики хорошо работают вместе. По этой ссылке вы можете увидеть, как создавать конвейеры и управлять ими с помощью .net. https://docs.microsoft.com/en-us/azure/data-factory/quickstart-create-data-factory-dot-net

Если у вас уже есть ADF и конвейер, вы просто хотите запустить его (с конвейерами), тогда вы можете просто

Dictionary<string, object> parameters = new Dictionary<string, object>
       {
           {"BoxSerialNumbers", req.BoxSerialNumbers},
           {"StartDate", req.StartDate },
           {"EndDate",req.EndDate },
           {"Recipient", req.Recipient }
       };//this is how you add initialaze parameters

        var client = Authenticate(); //Authentication with azure
        log.Info("Creating.");
        CreateRunResponse runResponse = client.Pipelines.CreateRun(resourceGroup, dataFactoryName, "pipeline1", parameters);//run pipeline, you can do this async (it's better)
        log.Info("Created.");
        var response = new HttpResponseMessage();
        if (client.PipelineRuns.Get(resourceGroup, dataFactoryName, runResponse.RunId).Status.Equals("InProgress"))
        {
            response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(runResponse.RunId, Encoding.UTF8)
            };
        }
        else
        {
            response = new HttpResponseMessage(HttpStatusCode.BadRequest)
            {
                Content = new StringContent("Pipeline didn't started", Encoding.UTF8)//just some validation for function
            };
        }
        return response;                                               


    public static DataFactoryManagementClient Authenticate()
    {
        var context = new AuthenticationContext("https://login.windows.net/" + tenantID);
        ClientCredential cc = new ClientCredential(applicationID, authenticationKey);
        AuthenticationResult result = context.AcquireTokenAsync("https://management.azure.com/", cc).Result;
        ServiceClientCredentials cred = new TokenCredentials(result.AccessToken);
        return new DataFactoryManagementClient(cred) { SubscriptionId = subscriptionID };
    }

Таким образом, в запросе вы можете передать свои параметры из приложения логики, с помощью runId вы можете проверить статус. Затем в приложении логики достаточно простого HTTP-запроса для вызова этой функции. Надеюсь, это кому-то поможет.

Интересный подход - проголосовал за. NB. Microsoft только что опубликовала (11 мая 2018 г.) на сайте Отзыв о Logic Apps, что действие по запуску конвейера фабрики данных изначально из приложений логики достигло состояния «Завершено». Следите за тем, как это скоро появится в продукте, я полагаю!

wBob 16.05.2018 12:27

@wBob таким образом мне удается передать параметры из нашего веб-приложения в фабрику данных и скрипт u sql. Кроме того, странно, что нет соединителя для u sql (хорошо, вы можете управлять этим также с помощью .net, но ...). В приложении логики он все еще находится в режиме предварительного просмотра, я думаю, они это изменят.

DraganB 16.05.2018 12:34

Я использовал решение DraganB, но подпись вызова на

CreateRunResponse runResponse = client.Pipelines.CreateRun(resourceGroup, dataFactoryName, "pipeline1", parameters);

изменилось. Незначительные правки делают эту работу безупречной:

CreateRunResponse runResponse = client.Pipelines.CreateRun(resourceGroup, dataFactoryName, "pipeline1", parameters: parameters);

Вот функция для всех, кому она нужна.

[FunctionName("DatafactoryShim")]
    public async static Task<HttpResponseMessage> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post")]
        HttpRequestMessage req,
        ExecutionContext context,
        TraceWriter log
    )
    {
        string messageBody = await req.Content.ReadAsStringAsync();

        BlobToDatalakeFactoryParameters postValues = JsonHelper.ToClass<BlobToDatalakeFactoryParameters>(messageBody);

        Dictionary<string, object> parameters = new Dictionary<string, object>
        {
            {"blobContainer", postValues.BlobContainer},
            {"blobFolder", postValues.BlobFolder },
            {"relativeDatalakeFolder", postValues.RelativeDatalakeFolder },
            {"modelType", postValues.ModelType }

        }; //this is how you add initialaze parameters

        var client = Authenticate(); //Authentication with azure

        string resourceGroup = ConfigurationManager.AppSettings["resourceGroup"];
        string dataFactoryName = ConfigurationManager.AppSettings["dataFactoryName"];
        string pipelineName = ConfigurationManager.AppSettings["pipelineName"];

        Console.WriteLine("Creating pipeline run...");
        CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
            resourceGroup,
            dataFactoryName,
            pipelineName,
            parameters: parameters).Result.Body;
        Console.WriteLine("Pipeline run ID: " + runResponse.RunId);

        var response = new HttpResponseMessage();

        if (client.PipelineRuns.Get(ConfigurationManager.AppSettings["resourceGroup"],
            ConfigurationManager.AppSettings["dataFactoryName"], runResponse.RunId).Status.Equals("InProgress"))
        {
            response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(runResponse.RunId, Encoding.UTF8)
            };
        }
        else
        {
            response = new HttpResponseMessage(HttpStatusCode.BadRequest)
            {
                Content =
                    new StringContent("Pipeline didn't started", Encoding.UTF8) //just some validation for function
            };
        }

        return response;
    }

Вы можете использовать свойство body действия приложения логики «Создать прогон конвейера» для передачи параметров конвейеру. Как всегда, будьте осторожны, потому что это действие не только находится в предварительной версии, но я также не смог найти это решение ни в одной документации MS. Я просто сделал обоснованное предположение, основываясь на том, как отформатированы другие похожие действия.

Пример:

"Run_my_pipeline": {
  "inputs": {
    "host": {
      "connection": {
        "name": "@parameters('$connections')['azuredatafactory']['connectionId']"
      }
    },
    "method": "post",
    "body": {
      "param1": "myParamValue",
      "param2": "myParamValue"
    },
    "path": "...",
    "queries": {
      "x-ms-api-version": "2017-09-01-preview"
    },
    "authentication": "@parameters('$authentication')"
  }
}

Обратите внимание, что после этого ответа действие Create A Pipeline Run добавило нестандартный параметр с именем «parameters». Этот параметр параметров транслируется в тот же объект тела, о котором я упоминал выше. Итак, этот ответ по-прежнему действителен, хотя теперь вы можете добавить объект body из представления портала. К сведению, это действие все еще находится в режиме предварительного просмотра.

Josh Williams 16.10.2019 21:21

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