Упражнение — загрузка данных в базу данных SQL Azure

Завершено

При выполнении операции массовой загрузки данных они должны откуда-то браться. В Azure обычно хранятся или сбрасывают данные в Хранилище BLOB-объектов Azure. Большой двоичный объект служба хранилища оптимизирован для хранения больших объемов неструктурированных данных с относительно низкой стоимостью.

В этом сценарии AdventureWorks получает данные о возврате товаров из магазинов на основе идентификационного номера магазина. Эти данные хранятся в DAT-файлах, которые затем отправляются в хранилище BLOB-объектов Azure. После помещения данных в хранилище BLOB-объектов службе SQL Azure необходим способ доступа к хранилищу. Это можно сделать, создав внешний источник данных, который имеет доступ к учетной записи службы хранилища. Вы можете управлять доступом к этой учетной записи хранения с помощью идентификатора Microsoft Entra, авторизации общего ключа или подписанного URL-адреса (SAS).

В этом упражнении изучите один сценарий массовой загрузки данных из хранилища BLOB-объектов Azure в База данных SQL Azure. В подходе используются подписи T-SQL и подписанные URL-адреса.

Для выполнения этого упражнения существует два варианта.

  • sqlcmdв Azure Cloud Shell
  • Записные книжки SQL в Azure Data Studio

Оба упражнения содержат одни и те же команды и содержимое, поэтому можно выбрать тот вариант, который больше нравится.

Вариант 1: sqlcmd в Azure Cloud Shell

sqlcmd — это инструмент командной строки, которая позволяет взаимодействовать с SQL Server и SQL Azure с помощью командной строки. В этом упражнении используйте sqlcmd в экземпляре PowerShell Azure Cloud Shell. sqlcmd устанавливается по умолчанию, поэтому его можно легко использовать из Azure Cloud Shell.

  1. Из-за настройки Azure Cloud Shell для Bash сначала необходимо изменить режим терминала, выполнив следующую команду в Azure Cloud Shell.

    TERM=dumb
    
  2. После изменения имени сервера и пароля выполните следующую команду в интегрированном терминале.

    sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
    
  3. Создайте таблицу и схему для загрузки данных. Этот процесс прост в T-SQL. Выполните следующий скрипт в терминале, теперь, когда вы подключены к базе данных:

    IF SCHEMA_ID('DataLoad') IS NULL
    EXEC ('CREATE SCHEMA DataLoad')
    CREATE TABLE DataLoad.store_returns
    (
        sr_returned_date_sk             bigint,
        sr_return_time_sk               bigint,
        sr_item_sk                      bigint,
        sr_customer_sk                  bigint,
        sr_cdemo_sk                     bigint,
        sr_hdemo_sk                     bigint,
        sr_addr_sk                      bigint,
        sr_store_sk                     bigint,
        sr_reason_sk                    bigint,
        sr_ticket_number                bigint,
        sr_return_quantity              integer,
        sr_return_amt                   float,
        sr_return_tax                   float,
        sr_return_amt_inc_tax           float,
        sr_fee                          float,
        sr_return_ship_cost             float,
        sr_refunded_cash                float,
        sr_reversed_charge              float,
        sr_store_credit                 float,
        sr_net_loss                     float
    );
    GO
    

    Совет

    После инструкций T-SQL вы увидите запись числа. Он представляет каждую строку записи T-SQL. Например, предыдущая команда заканчивается 26на . Не забудьте выбрать ВВОД после этих строк.

    Вы знаете, что команда завершилась снова 1> , что указывает, что sqlcmd она готова к первой строке следующей записи T-SQL.

  4. Затем создайте главный ключ:

    CREATE MASTER KEY 
    ENCRYPTION BY PASSWORD='MyComplexPassword00!';
    GO
    
  5. Для создания значения требуется главный DATABASE SCOPED CREDENTIAL ключ, так как хранилище BLOB-объектов не настроено для предоставления общедоступного (анонимного) доступа. Учетные данные ссылаются на учетную запись хранения BLOB-объектов. Часть данных указывает контейнер для возвращаемых данных хранилища.

    Используйте подписанный URL-адрес в качестве удостоверения, которое SQL Azure знает, как интерпретировать. Секрет — это маркер SAS, который можно создать из учетной записи хранения BLOB-объектов. В этом примере указан маркер SAS для учетной записи хранилища, доступ к которому отсутствует, чтобы получить доступ только к возвращаемым данным хранилища.

    CREATE DATABASE SCOPED CREDENTIAL [https://azuresqlworkshopsa.blob.core.windows.net/data/]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = 'st=2020-09-28T22%3A05%3A27Z&se=2030-09-29T22%3A05%3A00Z&sp=rl&sv=2018-03-28&sr=c&sig=52WbuSIJCWyjS6IW6W0ILfIpqh4wLMXmOlifPyOetZI%3D';
    GO
    
  6. Создайте внешний источник данных для контейнера:

    CREATE EXTERNAL DATA SOURCE dataset
    WITH
    (
        TYPE = BLOB_STORAGE,
        LOCATION = 'https://azuresqlworkshopsa.blob.core.windows.net/data',
        CREDENTIAL = [https://azuresqlworkshopsa.blob.core.windows.net/data/]
    );
    GO
    
  7. Массовая вставка одного из возвращаемых файлов хранилища. Запустите следующий скрипт и, пока завершится, просмотрите комментарии:

    SET NOCOUNT ON -- Reduce network traffic by stopping the message that shows the number of rows affected
    BULK INSERT DataLoad.store_returns -- Table you created in step 3
    FROM 'dataset/store_returns/store_returns_1.dat' -- Within the container, the location of the file
    WITH (
    DATA_SOURCE = 'dataset' -- Using the external data source from step 6
    ,DATAFILETYPE = 'char'
    ,FIELDTERMINATOR = '\|'
    ,ROWTERMINATOR = '\|\n'
    ,BATCHSIZE=100000 -- Reduce network traffic by inserting in batches
    , TABLOCK -- Minimize number of log records for the insert operation
    );
    GO
    
  8. Проверьте, сколько строк было вставлено в таблицу:

    SELECT COUNT(*) FROM DataLoad.store_returns;
    GO
    

    Если все было запущено правильно, вы увидите, что возвращено 2807797.

Этот код является простым примером вставки данных из хранилища BLOB-объектов в База данных SQL Azure. Если вы хотите выполнить упражнение еще раз, выполните следующий код, чтобы сбросить выполненные действия.

DROP EXTERNAL DATA SOURCE dataset;
DROP DATABASE SCOPED CREDENTIAL [https://azuresqlworkshopsa.blob.core.windows.net/data/];
DROP TABLE DataLoad.store_returns;
DROP MASTER KEY;
GO

Вариант 2. Записные книжки SQL в Azure Data Studio

Для этого действия используйте записную книжку LoadData.ipynb. Его можно найти на устройстве в файле \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata . Откройте этот файл в Azure Data Studio, чтобы завершить это упражнение, а затем вернитесь сюда.

Если не удается выполнить упражнение по какой-либо причине, можно ознакомиться с результатами в соответствующем файле записной книжки на сайте GitHub.