Перенос данных из базы данных SQL Server в Базу данных SQL с помощью Фабрики данных Azure

В этой статье показано, как переместить данные из базы данных SQL Server в Базу данных SQL Azure через Хранилище BLOB-объектов Azure с помощью Фабрики данных Azure (ADF). Этот метод поддерживается как устаревший вариант, преимуществом которого является репликация промежуточной копии. Мы рекомендуем изучить более новые варианты на странице, посвященной миграции данных.

Таблица, обобщающая различные варианты перемещения данных в базу данных SQL Azure, содержится в статье Перемещение данных в базу данных SQL Azure для машинного обучения Azure.

Введение. Что такое ADF и когда ее использовать при переносе данных?

Фабрика данных Azure представляет собой полностью управляемую облачную службу интеграции информации, которая организует и автоматизирует перемещение и преобразование данных. Ключевым принципом модели ADF является конвейер. Конвейер — это логическая группа действий, каждое из которых определяет операции, выполняемые с данными, содержащимися в наборах данных. Информация, необходимая фабрике данных для подключения к внешним ресурсам, определяется связанными службами.

С ADF существующие службы обработки данных могут быть включены в конвейеры данных, обладающие высокой доступностью и управляемые в облаке. Для этих конвейеров данных можно запланировать прием, подготовку, преобразование, анализ и публикацию данных, а сложными данными и обработкой зависимостей управляет ADF. Решения можно быстро построить и развернуть в облаке, подключив большое количество локальных и облачных источников данных.

ADF стоит использовать в следующих случаях:

  • когда данные нужно постоянно переносить в гибридном сценарии, при котором осуществляется доступ как к локальным, так и к облачным ресурсам;
  • при необходимости преобразовать данные или добавить к ним новую бизнес-логику во время переноса.

ADF позволяет выполнять планирование и отслеживание заданий с помощью простых сценариев JSON, управляющих перемещением данных на периодической основе. ADF также обладает другими возможностями, такими как поддержка сложных операций. Дополнительные сведения об ADF см. в документации по фабрике данных Azure.

Сценарий

Мы настраиваем конвейер ADF, который объединяет два действия переноса данных. Их сочетание позволяет ежедневно переносить данные из Базы данных SQL Server в Базу данных SQL и обратно. Эти два действия таковы:

  • Копирование из базы данных SQL Server в учетную запись Хранилища BLOB-объектов Azure.
  • Копирование данных из учетной записи Хранилища BLOB-объектов Azure в Базу данных SQL Azure.

Примечание

Описанные здесь действия — адаптированный вариант более подробного руководства, подготовленного разработчиками ADF: Копирование из базы данных SQL Server в хранилище BLOB-объектов Azure. Во всех случаях, когда это уместно, предоставляются ссылки на разделы этого руководства.

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

Для выполнения действий, описанных в этом учебнике, вам необходимо следующее.

Примечание

В этой процедуре используется портал Azure.

Отправка данных в экземпляр SQL Server

Для демонстрации процесса переноса данных мы используем набор данных о такси Нью-Йорка . Набор данных о такси Нью-Йорка доступен, как отмечено в этой статье, в хранилище BLOB-объектов Azure здесь. Данные содержатся в двух файлах: trip_data.csv, содержащем сведения о поездках, и trip_far.csv, содержащем сведения о тарифах для каждой поездки. Пример и описание этих файлов приведены в описании набора данных «Поездки такси Нью-Йорка».

Вы можете либо адаптировать описанные здесь процедуры к собственному набору данных, либо выполнить описанные действия с набором данных о такси Нью-Йорка. Для загрузки набора данных о такси Нью-Йорка в базу данных SQL Server выполните процедуру, описанную в разделе массовый импорт данных в базу данных SQL Server.

Создание фабрики данных Azure

Инструкции по созданию фабрики данных Azure и группы ресурсов на портале Azure представлены здесь. Задайте имя adfdsp для нового экземпляра ADF и имя adfdsprg для созданной группы ресурсов.

Установка и настройка фабрики данных Azure Integration Runtime

Integration Runtime — это управляемая клиентом инфраструктура среды выполнения интеграции, которую Фабрика данных Azure использует для обеспечения интеграции данных между разными сетевыми средами. Эта среда выполнения раньше называлась "Шлюз управления данными".

Чтобы выполнить настройку, следуйте указаниям по созданию конвейера.

Создание связанных служб для подключения к ресурсам данных

Информация, необходимая фабрике данных для подключения к внешним ресурсам, определяется связанными службами. В этом сценарии есть три ресурса, для которых требуются связанные службы.

  1. Локальный сервер SQL Server
  2. хранилище BLOB-объектов Azure
  3. База данных SQL Azure

Пошаговая инструкция по созданию связанных служб приведена в этом разделе.

Определение и создание таблиц для определения доступа к наборам данных

Для создания таблиц, которые определяют структуру, расположение и доступность наборов данных, используются следующие процедуры на основе сценариев. Для определения таблиц используются файлы JSON. Дополнительные сведения о структуре этих файлов см. в статье Наборы данных в фабрике данных Azure.

Примечание

Перед выполнением командлета New-AzureDataFactoryTable необходимо проверить, правильно ли выбрана подписка для его выполнения, выполнив командлет Add-AzureAccount. Документацию по этим командлетам см. в статье Add-AzureAccount.

В определениях на основе JSON в таблицах используются следующие имена:

  • имя таблицы в локальном экземпляре SQL Server имеет значение nyctaxi_data;
  • the имя контейнера в учетной записи хранилища больших двоичных объектов Azure — containername

Для этого конвейера ADF необходимо определить три таблицы:

  1. Локальная таблица SQL.
  2. Таблица BLOB-объектов.
  3. таблица SQL Azure.

Примечание

В этих процедурах для определения и создания действий ADF используется Azure PowerShell. Однако эти задачи также можно выполнить на портале Azure. Дополнительные сведения см. в разделе Создание наборов данных.

Локальная таблица SQL.

Определение таблицы для SQL Server указывается в следующем файле JSON:

{
    "name": "OnPremSQLTable",
    "properties":
    {
        "location":
        {
            "type": "OnPremisesSqlServerTableLocation",
            "tableName": "nyctaxi_data",
            "linkedServiceName": "adfonpremsql"
        },
        "availability":
        {
            "frequency": "Day",
            "interval": 1,
            "waitOnExternal":
            {
                "retryInterval": "00:01:00",
                "retryTimeout": "00:10:00",
                "maximumRetry": 3
            }
        }
    }
}

Сюда не были включены имена столбцов. Для выбора только некоторых столбцов включите сюда их список (дополнительные сведения приведены в статье Документация по ADF).

Скопируйте определение таблицы JSON в файл с именем onpremtabledef.json и сохраните его в известном месте (например, C:\temp\onpremtabledef.json). Создайте таблицу в ADF с помощью следующего командлета Azure PowerShell:

New-AzureDataFactoryTable -ResourceGroupName ADFdsprg -DataFactoryName ADFdsp –File C:\temp\onpremtabledef.json

таблица больших двоичных объектов;

Определение таблицы выходных больших двоичных объектов задается следующим образом (здесь данные, полученные из локальных расположений, сопоставляются с большим двоичным объектом Azure):

{
    "name": "OutputBlobTable",
    "properties":
    {
        "location":
        {
            "type": "AzureBlobLocation",
            "folderPath": "containername",
            "format":
            {
                "type": "TextFormat",
                "columnDelimiter": "\t"
            },
            "linkedServiceName": "adfds"
        },
        "availability":
        {
            "frequency": "Day",
            "interval": 1
        }
    }
}

Скопируйте определение таблицы JSON в файл с именем bloboutputtabledef.json и сохраните его в известном месте (например, C:\temp\bloboutputtabledef.json). Создайте таблицу в ADF с помощью следующего командлета Azure PowerShell:

New-AzureDataFactoryTable -ResourceGroupName adfdsprg -DataFactoryName adfdsp -File C:\temp\bloboutputtabledef.json

таблица SQL Azure.

Определение таблицы для выходных данных SQL Azure задается следующим образом (эта схема сопоставляет данные, полученные из большого двоичного объекта).

{
    "name": "OutputSQLAzureTable",
    "properties":
    {
        "structure":
        [
            { "name": "column1", "type": "String"},
            { "name": "column2", "type": "String"}
        ],
        "location":
        {
            "type": "AzureSqlTableLocation",
            "tableName": "your_db_name",
            "linkedServiceName": "adfdssqlazure_linked_servicename"
        },
        "availability":
        {
            "frequency": "Day",
            "interval": 1
        }
    }
}

Скопируйте определение таблицы JSON в файл с именем AzureSqlTable.json и сохраните его в известном месте (например, C:\temp\AzureSqlTable.json). Создайте таблицу в ADF с помощью следующего командлета Azure PowerShell:

New-AzureDataFactoryTable -ResourceGroupName adfdsprg -DataFactoryName adfdsp -File C:\temp\AzureSqlTable.json

Определение и создание конвейера

Укажите действия, которые принадлежат конвейеру, и создайте конвейер с помощью следующих процедур на основе сценариев. Для определения свойств конвейера используется файл JSON.

  • Сценарий предполагает, что имя конвейераAMLDSProcessPipeline.
  • Также обратите внимание, что мы задаем периодичность выполнения конвейера ежедневно и используем время выполнения задания по умолчанию (00:00 по Гринвичу).

Примечание

В следующих процедурах для определения и создания конвейера ADF используется Azure PowerShell. Однако эту задачу также можно выполнить на портале Azure. Дополнительные сведения см. в разделе Создание конвейера.

Используя приведенные выше определения таблиц, определение конвейера ADF указывается следующим образом:

{
    "name": "AMLDSProcessPipeline",
    "properties":
    {
        "description" : "This pipeline has two activities: the first one copies data from SQL Server to Azure Blob, and the second one copies from Azure Blob to Azure Database Table",
        "activities":
        [
            {
                "name": "CopyFromSQLtoBlob",
                "description": "Copy data from SQL Server to blob",
                "type": "CopyActivity",
                "inputs": [ {"name": "OnPremSQLTable"} ],
                "outputs": [ {"name": "OutputBlobTable"} ],
                "transformation":
                {
                    "source":
                    {
                        "type": "SqlSource",
                        "sqlReaderQuery": "select * from nyctaxi_data"
                    },
                    "sink":
                    {
                        "type": "BlobSink"
                    }
                },
                "Policy":
                {
                    "concurrency": 3,
                    "executionPriorityOrder": "NewestFirst",
                    "style": "StartOfInterval",
                    "retry": 0,
                    "timeout": "01:00:00"
                }
            },
            {
                "name": "CopyFromBlobtoSQLAzure",
                "description": "Push data to Sql Azure",
                "type": "CopyActivity",
                "inputs": [ {"name": "OutputBlobTable"} ],
                "outputs": [ {"name": "OutputSQLAzureTable"} ],
                "transformation":
                {
                    "source":
                    {
                        "type": "BlobSource"
                    },
                    "sink":
                    {
                        "type": "SqlSink",
                        "WriteBatchTimeout": "00:5:00",
                    }
                },
                "Policy":
                {
                    "concurrency": 3,
                    "executionPriorityOrder": "NewestFirst",
                    "style": "StartOfInterval",
                    "retry": 2,
                    "timeout": "02:00:00"
                }
            }
        ]
    }
}

Скопируйте определение JSON конвейера в файл с именем pipelinedef.json и сохраните его в известном месте (например, C:\temp\pipelinedef.json). Создайте конвейер в ADF с помощью следующего командлета Azure PowerShell:

New-AzureDataFactoryPipeline  -ResourceGroupName adfdsprg -DataFactoryName adfdsp -File C:\temp\pipelinedef.json

Запуск конвейера

Конвейер можно запустить с помощью следующей команды:

Set-AzureDataFactoryPipelineActivePeriod -ResourceGroupName ADFdsprg -DataFactoryName ADFdsp -StartDateTime startdateZ –EndDateTime enddateZ –Name AMLDSProcessPipeline

Значения параметров startdate и enddate необходимо заменить фактическими датами, определяющими временной интервал запуска конвейера.

После запуска конвейера вы сможете увидеть, как в контейнере большого двоичного объекта начнут появляться данные, по одному файлу в день.

Мы не используем возможность поэтапного поступления данных в конвейер, предоставляемую ADF. Дополнительные сведения об этой и других возможностях ADF см. в документации по ADF.