Exercício – Carregar dados na Base de Dados SQL do Azure

Concluído

Quando está a fazer um carregamento em massa de dados, estes têm de vir de algum lado. No Azure, é comum armazenar ou despejar dados no Armazenamento de Blobs do Azure. O Blob Storage é otimizado para armazenar grandes quantidades de dados não estruturados a um custo relativamente baixo.

Neste cenário, o Adventure Works Cycles está a receber dados de devolução do armazenamento em função do número de identificação do armazenamento. Esses dados são armazenados em arquivos .dat , que são enviados por push para o armazenamento de Blob do Azure. Assim que os dados estiverem no Armazenamento de blobs, é necessário arranjar uma forma de o SQL do Azure poder aceder ao mesmo. Pode fazê-lo ao criar uma origem de dados externa que tenha acesso à conta de armazenamento. Você pode controlar o acesso a essa conta de armazenamento por meio da ID do Microsoft Entra, autorização de chave compartilhada ou uma assinatura de acesso compartilhado (SAS).

Neste exercício, exploramos um cenário para o carregamento em massa de dados do armazenamento de Blob do Azure no Banco de Dados SQL do Azure. A abordagem usa T-SQL e assinaturas de acesso compartilhado.

Para concluir este exercício, existem duas opções:

  • sqlcmd no Azure Cloud Shell
  • Blocos de notas do SQL no Azure Data Studio

Ambos os exercícios contêm os mesmos comandos e conteúdos, portanto pode escolher a opção que preferir.

Opção 1: sqlcmd no Azure Cloud Shell

sqlcmd é uma ferramenta de linha de comandos, que lhe permite interagir com o SQL Server e com o SQL do Azure através da linha de comandos. Neste exercício, você usa sqlcmd a instância do PowerShell do Azure Cloud Shell. sqlcmd é instalado por predefinição, pelo que é fácil de utilizar no Azure Cloud Shell.

  1. Devido à maneira como o Azure Cloud Shell for Bash é configurado, primeiro você precisa alterar o modo de terminal executando o seguinte comando no Azure Cloud Shell.

    TERM=dumb
    
  2. Execute o seguinte comando no terminal integrado após ter modificado o seu nome do servidor e palavra-passe.

    sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
    
  3. Crie uma tabela e um esquema para os dados a serem carregados. Este processo é simples T-SQL. Execute o seguinte script no terminal, agora que você está conectado ao seu banco de dados:

    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
    

    Gorjeta

    Você verá uma entrada numérica após as instruções T-SQL. Ele representa cada linha da entrada T-SQL. Por exemplo, o comando anterior termina com 26. Certifique-se de selecionar ENTER após estas linhas.

    Você sabe que o comando terminou quando você vê 1> novamente, o que indica que sqlcmd está pronto para a primeira linha da sua próxima entrada T-SQL.

  4. Em seguida, crie uma chave mestra:

    CREATE MASTER KEY 
    ENCRYPTION BY PASSWORD='MyComplexPassword00!';
    GO
    
  5. Uma chave mestra é necessária para criar um DATABASE SCOPED CREDENTIAL valor porque o armazenamento de Blob não está configurado para permitir acesso público (anônimo). A credencial refere-se à conta de armazenamento de Blob. A parte de dados especifica o contêiner para os dados de retorno de armazenamento.

    Use uma assinatura de acesso compartilhado como a identidade que o SQL do Azure sabe interpretar. O segredo é o token SAS que pode gerar a partir da conta do Armazenamento de blobs. Neste exemplo, foi indicado o token de SAS de uma conta de armazenamento à qual não tem acesso, para que possa aceder apenas aos dados de devolução do armazenamento.

    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. Crie uma fonte de dados externa para o contêiner:

    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. Insira em massa um dos arquivos de retorno da loja. Execute o seguinte script e, enquanto terminar, revise os comentários:

    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. Verifique quantas linhas foram inseridas na tabela:

    SELECT COUNT(*) FROM DataLoad.store_returns;
    GO
    

    Se tudo correu como previsto, deverá ver que 2807797 foi devolvido.

Este código é um exemplo simples de como inserir dados do armazenamento de Blob no Banco de Dados SQL do Azure. Se você quiser executar o exercício novamente, execute o seguinte código para redefinir o que você fez:

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

Opção 2: Blocos de anotações SQL no Azure Data Studio

Para essa atividade, use o bloco de anotações chamado LoadData.ipynb. Você pode encontrá-lo em \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata no seu dispositivo. Abra este ficheiro no Azure Data Studio para concluir este exercício e, em seguida, regresse aqui.

Se, por algum motivo, não conseguir concluir este exercício, poderá analisar os resultados no ficheiro do bloco de notas correspondente no GitHub.