Краткое руководство. Создание фабрики данных Azure и конвейера с помощью REST APIQuickstart: Create an Azure data factory and pipeline by using the REST API

Фабрика данных Azure — это облачная служба интеграции данных, которая позволяет создавать управляемые данными рабочие процессы в облаке для оркестрации и автоматизации перемещения и преобразования данных.Azure Data Factory is a cloud-based data integration service that allows you to create data-driven workflows in the cloud for orchestrating and automating data movement and data transformation. С помощью фабрики данных Azure можно создавать и включать в расписание управляемые данными рабочие процессы (конвейеры), которые могут принимать данные из разнородных хранилищ данных, обрабатывать и преобразовывать эти данные с помощью служб вычислений (например, Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics и машинного обучения Azure), а также публиковать выходные данные в хранилища данных (например, хранилище данных SQL Azure) для использования приложениями бизнес-аналитики.Using Azure Data Factory, you can create and schedule data-driven workflows (called pipelines) that can ingest data from disparate data stores, process/transform the data by using compute services such as Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics, and Azure Machine Learning, and publish output data to data stores such as Azure SQL Data Warehouse for business intelligence (BI) applications to consume.

В этом кратком руководстве описано создание фабрики данных Azure с помощью REST API.This quickstart describes how to use REST API to create an Azure data factory. В этой фабрике данных конвейер копирует данные из одного расположения в другое в хранилище BLOB-объектов Azure.The pipeline in this data factory copies data from one location to another location in an Azure blob storage.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.If you don't have an Azure subscription, create a free account before you begin.

Предварительные требованияPrerequisites

Примечание

Эта статья была изменена и теперь содержит сведения о новом модуле Az для Azure PowerShell.This article has been updated to use the new Azure PowerShell Az module. Вы по-прежнему можете использовать модуль AzureRM, исправления ошибок для которого будут продолжать выпускаться как минимум до декабря 2020 г.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Дополнительные сведения о совместимости модуля Az с AzureRM см. в статье Introducing the new Azure PowerShell Az module (Знакомство с новым модулем Az для Azure PowerShell).To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Инструкции по установке модуля Az см. в статье об установке Azure PowerShell.For Az module installation instructions, see Install Azure PowerShell.

  • Подписка Azure.Azure subscription. Если у вас нет подписки, вы можете создать бесплатную пробную учетную запись.If you don't have a subscription, you can create a free trial account.
  • Учетная запись хранения Azure.Azure Storage account. Хранилище BLOB-объектов используется как хранилище данных источник и приемник.You use the blob storage as source and sink data store. Если у вас нет учетной записи хранения Azure, ознакомьтесь с разделом Создание учетной записи хранения.If you don't have an Azure storage account, see the Create a storage account article for steps to create one.
  • Создайте контейнер больших двоичных объектов в хранилище BLOB-объектов, в контейнере создайте входную папку и отправьте несколько файлов в нее.Create a blob container in Blob Storage, create an input folder in the container, and upload some files to the folder. Такие средства, как обозреватель службы хранилища Azure, можно использовать для подключения к хранилищу BLOB-объектов Azure, создания контейнера BLOB-объектов, отправки входного файла и проверки выходного.You can use tools such as Azure Storage explorer to connect to Azure Blob storage, create a blob container, upload input file, and verify the output file.
  • Установите Azure PowerShell.Install Azure PowerShell. Следуйте инструкциям по установке и настройке Azure PowerShell.Follow the instructions in How to install and configure Azure PowerShell. В этом руководстве используется PowerShell для вызова REST API.This quickstart uses PowerShell to invoke REST API calls.
  • Используйте следующие инструкции, чтобы создать приложение в Azure Active Directory.Create an application in Azure Active Directory following this instruction. Запишите следующие значения, которые вы используете в следующих шагах: идентификатор приложения, ключ аутентификации и идентификатор клиента.Make note of the following values that you use in later steps: application ID, authentication key, and tenant ID. Назначьте приложению роль Участник.Assign application to "Contributor" role.

Настройка глобальных переменныхSet global variables

  1. Запустите PowerShell.Launch PowerShell. Не закрывайте Azure PowerShell, пока выполняются описанные в этом кратком руководстве инструкции.Keep Azure PowerShell open until the end of this quickstart. Если закрыть и снова открыть это окно, то придется вновь выполнять эти команды.If you close and reopen, you need to run the commands again.

    Выполните следующую команду и введите имя пользователя и пароль, которые используются для входа на портал Azure.Run the following command, and enter the user name and password that you use to sign in to the Azure portal:

    Connect-AzAccount
    

    Чтобы просмотреть все подписки для этой учетной записи, выполните следующую команду:Run the following command to view all the subscriptions for this account:

    Get-AzSubscription
    

    Выполните следующую команду, чтобы выбрать подписку, с которой вы собираетесь работать.Run the following command to select the subscription that you want to work with. Замените значение SubscriptionId на идентификатор подписки Azure:Replace SubscriptionId with the ID of your Azure subscription:

    Select-AzSubscription -SubscriptionId "<SubscriptionId>"
    
  2. Выполните следующие команды после замены заполнителей собственными значениями, чтобы задать глобальные переменные, используемые в последующих шагах.Run the following commands after replacing the places-holders with your own values, to set global variables to be used in later steps.

    $tenantID = "<your tenant ID>"
    $appId = "<your application ID>"
    $authKey = "<your authentication key for the application>"
    $subsId = "<your subscription ID to create the factory>"
    $resourceGroup = "<your resource group to create the factory>"
    $dataFactoryName = "<specify the name of data factory to create. It must be globally unique.>"
    $apiVersion = "2018-06-01"
    

Аутентификация с помощью Azure ADAuthenticate with Azure AD

Выполните следующую команды для проверки подлинности с помощью Azure Active Directory (AAD):Run the following commands to authenticate with Azure Active Directory (AAD):

$AuthContext = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext]"https://login.microsoftonline.com/${tenantId}"
$cred = New-Object -TypeName Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential -ArgumentList ($appId, $authKey)
$result = $AuthContext.AcquireTokenAsync("https://management.core.windows.net/", $cred).GetAwaiter().GetResult()
$authHeader = @{
'Content-Type'='application/json'
'Accept'='application/json'
'Authorization'=$result.CreateAuthorizationHeader()
}

Создание фабрики данныхCreate a data factory

Чтобы создать фабрику данных, выполните следующие команды:Run the following commands to create a data factory:

$request = "https://management.azure.com/subscriptions/${subsId}/resourceGroups/${resourceGroup}/providers/Microsoft.DataFactory/factories/${dataFactoryName}?api-version=${apiVersion}"
$body = @"
{
    "name": "$dataFactoryName",
    "location": "East US",
    "properties": {},
    "identity": {
        "type": "SystemAssigned"
    }
}
"@
$response = Invoke-RestMethod -Method PUT -Uri $request -Header $authHeader -Body $body
$response | ConvertTo-Json

Обратите внимание на следующие моменты.Note the following points:

  • Имя фабрики данных Azure должно быть глобально уникальным.The name of the Azure data factory must be globally unique. Если появляется следующая ошибка, измените имя и повторите попытку.If you receive the following error, change the name and try again.

    Data factory name "ADFv2QuickStartDataFactory" is not available.
    
  • Чтобы получить список регионов Azure, в которых сейчас доступна Фабрика данных, выберите интересующие вас регионы на следующей странице, а затем разверните раздел Аналитика, чтобы найти пункт Фабрика данных: Доступность продуктов по регионам.For a list of Azure regions in which Data Factory is currently available, select the regions that interest you on the following page, and then expand Analytics to locate Data Factory: Products available by region. Хранилища данных (служба хранилища Azure, база данных SQL Azure и т. д.) и вычисления (HDInsight и т. д.), используемые фабрикой данных, могут располагаться в других регионах.The data stores (Azure Storage, Azure SQL Database, etc.) and computes (HDInsight, etc.) used by data factory can be in other regions.

Ниже приведен пример ответа:Here is the sample response:

{
    "name": "<dataFactoryName>",
    "tags": {
    },
    "properties":  {
        "provisioningState":  "Succeeded",
        "loggingStorageAccountKey":  "**********",
        "createTime":  "2017-09-14T06:22:59.9106216Z",
        "version":  "2018-06-01"
    },
    "identity":  {
        "type":  "SystemAssigned",
        "principalId":  "<service principal ID>",
        "tenantId":  "<tenant ID>"
    },
    "id":  "dataFactoryName",
    "type":  "Microsoft.DataFactory/factories",
    "location":  "East US"
}

Создание связанных службCreate linked services

Связанная служба в фабрике данных связывает хранилища данных и службы вычислений с фабрикой данных.You create linked services in a data factory to link your data stores and compute services to the data factory. В этом руководстве необходимо создать одну связанную службу хранилища Azure для копирования хранилища-источника и приемника, который в примере называется AzureStorageLinkedService.In this quickstart, you only need create one Azure Storage linked service as both copy source and sink store, named "AzureStorageLinkedService" in the sample.

Выполните следующие команды для создания связанной службы с именем AzureStorageLinkedService:Run the following commands to create a linked service named AzureStorageLinkedService:

Перед выполнением команд замените значения <accountname> и <accountkey> на имя вашей учетной записи хранения Azure и ее ключ.Replace <accountName> and <accountKey> with name and key of your Azure storage account before executing the commands.

$request = "https://management.azure.com/subscriptions/${subsId}/resourceGroups/${resourceGroup}/providers/Microsoft.DataFactory/factories/${dataFactoryName}/linkedservices/AzureStorageLinkedService?api-version=${apiVersion}"
$body = @"
{
    "name": "AzureStorageLinkedService",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": {
                "value": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>",
                "type": "SecureString"
            }
        }
    }
}
"@
$response = Invoke-RestMethod -Method PUT -Uri $request -Header $authHeader -Body $body
$response | ConvertTo-Json

Пример выходных данных:Here is the sample output:

{
    "id":  "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>/linkedservices/AzureStorageLinkedService",
    "name":  "AzureStorageLinkedService",
    "properties":  {
        "type":  "AzureStorage",
        "typeProperties":  {
            "connectionString":  "@{value=**********; type=SecureString}"
        }
    },
    "etag":  "0000c552-0000-0000-0000-59b1459c0000"
}

Создание наборов данныхCreate datasets

Вы можете определить набор данных, который будет представлять данные для копирования из источника в приемник.You define a dataset that represents the data to copy from a source to a sink. В этом примере набор данных большого двоичного объекта относится к связанным службам хранилища Azure, созданным на предыдущем шаге.In this example, this Blob dataset refers to the Azure Storage linked service you create in the previous step. Набор данных принимает параметр, значение которого задается в действии, использующем набор данных.The dataset takes a parameter whose value is set in an activity that consumes the dataset. Параметр используется для создания folderPath, указывающего, где находятся или хранятся данные.The parameter is used to construct the "folderPath" pointing to where the data resides/stored.

$request = "https://management.azure.com/subscriptions/${subsId}/resourceGroups/${resourceGroup}/providers/Microsoft.DataFactory/factories/${dataFactoryName}/datasets/BlobDataset?api-version=${apiVersion}"
$body = @"
{
    "name": "BlobDataset",
    "properties": {
        "type": "AzureBlob",
        "typeProperties": {
            "folderPath": {
                "value": "@{dataset().path}",
                "type": "Expression"
            }
        },
        "linkedServiceName": {
            "referenceName": "AzureStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "path": {
                "type": "String"
            }
        }
    }
}
"@
$response = Invoke-RestMethod -Method PUT -Uri $request -Header $authHeader -Body $body
$response | ConvertTo-Json

Пример выходных данных:Here is the sample output:

{
    "id":  "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>/datasets/BlobDataset",
    "name":  "BlobDataset",
    "properties":  {
        "type":  "AzureBlob",
        "typeProperties":  {
            "folderPath":  "@{value=@{dataset().path}; type=Expression}"
        },
        "linkedServiceName":  {
            "referenceName":  "AzureStorageLinkedService",
            "type":  "LinkedServiceReference"
        },
        "parameters":  {
            "path":  "@{type=String}"
        }
    },
    "etag":  "0000c752-0000-0000-0000-59b1459d0000"
}

Создание конвейераCreate pipeline

В этом примере этот конвейер содержит одно действие и принимает два параметра: путь входного и выходного большого двоичного объекта.In this example, this pipeline contains one activity and takes two parameters - input blob path and output blob path. Значения для этих параметров устанавливаются при активации или выполнении конвейера.The values for these parameters are set when the pipeline is triggered/run. Действие копирования ссылается на тот же набор данных большого двоичного объекта, который был создан на предыдущем шаге, в качестве входного и выходного.The copy activity refers to the same blob dataset created in the previous step as input and output. Если набор данных используется в качестве входного, указывается путь к входным данным.When the dataset is used as an input dataset, input path is specified. И если набор данных используется в качестве выходного, указывается путь к выходным данным.And, when the dataset is used as an output dataset, the output path is specified.

$request = "https://management.azure.com/subscriptions/${subsId}/resourceGroups/${resourceGroup}/providers/Microsoft.DataFactory/factories/${dataFactoryName}/pipelines/Adfv2QuickStartPipeline?api-version=${apiVersion}"
$body = @"
{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "activities": [
            {
                "name": "CopyFromBlobToBlob",
                "type": "Copy",
                "inputs": [
                    {
                        "referenceName": "BlobDataset",
                        "parameters": {
                            "path": "@pipeline().parameters.inputPath"
                        },
                    "type": "DatasetReference"
                    }
                ],
                "outputs": [
                    {
                        "referenceName": "BlobDataset",
                        "parameters": {
                            "path": "@pipeline().parameters.outputPath"
                        },
                        "type": "DatasetReference"
                    }
                ],
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "BlobSink"
                    }
                }
            }
        ],
        "parameters": {
            "inputPath": {
                "type": "String"
            },
            "outputPath": {
                "type": "String"
            }
        }
    }
}
"@
$response = Invoke-RestMethod -Method PUT -Uri $request -Header $authHeader -Body $body
$response | ConvertTo-Json

Пример выходных данных:Here is the sample output:

{
    "id":  "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.DataFactory/factories/<dataFactoryName>/pipelines/Adfv2QuickStartPipeline",
    "name":  "Adfv2QuickStartPipeline",
    "properties":  {
        "activities":  [
            "@{name=CopyFromBlobToBlob; type=Copy; inputs=System.Object[]; outputs=System.Object[]; typeProperties=}"
        ],
        "parameters":  {
            "inputPath":  "@{type=String}",
            "outputPath":  "@{type=String}"
        }
    },
    "etag":  "0000c852-0000-0000-0000-59b1459e0000"
}

Создание конвейераCreate pipeline run

В этом шаге параметрам inputPath и outputPath задаются значения, указываемые в конвейере с фактическими значениями путей большого двоичного объекта источника и приемника, а также активируется конвейер.In this step, you set values of inputPath and outputPath parameters specified in pipeline with the actual values of source and sink blob paths, and trigger a pipeline run. Идентификатор контейнера, возвращаемый в теле ответа, используется позже при мониторинге API.The pipeline run ID returned in the response body is used in later monitoring API.

Замените значения inputPath и outputPath своими путями к источнику и приемнику больших двоичных объектов для копирования данных до сохранения файла.Replace value of inputPath and outputPath with your source and sink blob path to copy data from and to before saving the file.

$request = "https://management.azure.com/subscriptions/${subsId}/resourceGroups/${resourceGroup}/providers/Microsoft.DataFactory/factories/${dataFactoryName}/pipelines/Adfv2QuickStartPipeline/createRun?api-version=${apiVersion}"
$body = @"
{
    "inputPath": "<the path to existing blob(s) to copy data from, e.g. containername/path>",
    "outputPath": "<the blob path to copy data to, e.g. containername/path>"
}
"@
$response = Invoke-RestMethod -Method POST -Uri $request -Header $authHeader -Body $body
$response | ConvertTo-Json
$runId = $response.runId

Пример выходных данных:Here is the sample output:

{
    "runId":  "2f26be35-c112-43fa-9eaa-8ba93ea57881"
}

Отслеживание конвейераMonitor pipeline

  1. Запустите следующий скрипт, чтобы проверять состояние выполнения, пока не закончится копирование данных.Run the following script to continuously check the pipeline run status until it finishes copying the data.

    $request = "https://management.azure.com/subscriptions/${subsId}/resourceGroups/${resourceGroup}/providers/Microsoft.DataFactory/factories/${dataFactoryName}/pipelineruns/${runId}?api-version=${apiVersion}"
    while ($True) {
        $response = Invoke-RestMethod -Method GET -Uri $request -Header $authHeader
        Write-Host  "Pipeline run status: " $response.Status -foregroundcolor "Yellow"
    
        if ($response.Status -eq "InProgress") {
            Start-Sleep -Seconds 15
        }
        else {
            $response | ConvertTo-Json
            break
        }
    }
    

    Пример выходных данных:Here is the sample output:

    {
        "key":  "000000000-0000-0000-0000-00000000000",
        "timestamp":  "2017-09-07T13:12:39.5561795Z",
        "runId":  "000000000-0000-0000-0000-000000000000",
        "dataFactoryName":  "<dataFactoryName>",
        "pipelineName":  "Adfv2QuickStartPipeline",
        "parameters":  [
            "inputPath: <inputBlobPath>",
            "outputPath: <outputBlobPath>"
        ],
        "parametersCount":  2,
        "parameterNames":  [
            "inputPath",
            "outputPath"
        ],
        "parameterNamesCount":  2,
        "parameterValues":  [
            "<inputBlobPath>",
            "<outputBlobPath>"
        ],
        "parameterValuesCount":  2,
        "runStart":  "2017-09-07T13:12:00.3710792Z",
        "runEnd":  "2017-09-07T13:12:39.5561795Z",
        "durationInMs":  39185,
        "status":  "Succeeded",
        "message":  ""
    }
    
  2. Запустите следующий скрипт, извлекающий сведения о выполнении действия копирования, например размер записанных и прочитанных данных.Run the following script to retrieve copy activity run details, for example, size of the data read/written.

    $request = "https://management.azure.com/subscriptions/${subsId}/resourceGroups/${resourceGroup}/providers/Microsoft.DataFactory/factories/${dataFactoryName}/pipelineruns/${runId}/activityruns?api-version=${apiVersion}&startTime="+(Get-Date).ToString('yyyy-MM-dd')+"&endTime="+(Get-Date).AddDays(1).ToString('yyyy-MM-dd')+"&pipelineName=Adfv2QuickStartPipeline"
    $response = Invoke-RestMethod -Method GET -Uri $request -Header $authHeader
    $response | ConvertTo-Json
    

    Пример выходных данных:Here is the sample output:

    {
        "value":  [
            {
                "id":  "000000000-0000-0000-0000-00000000000",
                "timestamp":  "2017-09-07T13:12:38.4780542Z",
                "pipelineRunId":  "000000000-0000-00000-0000-0000000000000",
                "pipelineName":  "Adfv2QuickStartPipeline",
                "status":  "Succeeded",
                "failureType":  "",
                "linkedServiceName":  "",
                "activityName":  "CopyFromBlobToBlob",
                "activityType":  "Copy",
                "activityStart":  "2017-09-07T13:12:02.3299261Z",
                "activityEnd":  "2017-09-07T13:12:38.4780542Z",
                "duration":  36148,
                "input":  "@{source=; sink=}",
                "output":  "@{dataRead=331452208; dataWritten=331452208; copyDuration=22; throughput=14712.9; errors=System.Object[]; effectiveIntegrationRuntime=DefaultIntegrationRuntime (West US); usedDataIntegrationUnits=2; billedDuration=22}",
                "error":  "@{errorCode=; message=; failureType=; target=CopyFromBlobToBlob}"
            }
        ]
    }
    

Проверка выходных данныхVerify the output

Воспользуйтесь обозревателем службы хранилища Azure, чтобы проверить, скопирован ли большой двоичный объект в outputBlobPath из inputBlobPath, как указано при создании конвейера.Use Azure Storage explorer to check the blob(s) is copied to "outputBlobPath" from "inputBlobPath" as you specified when creating a pipeline run.

Очистка ресурсовClean up resources

Вы можете удалить ресурсы, созданные в ходе работы с этим руководством, двумя способами.You can clean up the resources that you created in the Quickstart in two ways. Вы можете удалить группу ресурсов Azure, которая содержит все связанные ресурсы.You can delete the Azure resource group, which includes all the resources in the resource group. Если же вы хотите сохранить другие ресурсы, удалите только фабрику данных, созданную в этом руководстве.If you want to keep the other resources intact, delete only the data factory you created in this tutorial.

Выполните следующую команду, чтобы удалить всю группу ресурсов:Run the following command to delete the entire resource group:

Remove-AzResourceGroup -ResourceGroupName $resourcegroupname

Выполните следующую команду для удаления только фабрики данных:Run the following command to delete only the data factory:

Remove-AzDataFactoryV2 -Name "<NameOfYourDataFactory>" -ResourceGroupName "<NameOfResourceGroup>"

Дополнительная информацияNext steps

В этом примере конвейер копирует данные из одного расположения в другое в хранилище BLOB-объектов Azure.The pipeline in this sample copies data from one location to another location in an Azure blob storage. Перейдите к руководствам, чтобы узнать об использовании фабрики данных в различных сценариях.Go through the tutorials to learn about using Data Factory in more scenarios.