Exercício – carregar dados no Banco de Dados SQL do Azure
Quando você está carregando dados em massa, eles devem vir de algum lugar. No Azure, é comum armazenar ou despejar dados no Armazenamento de Blobs do Azure. O Armazenamento de Blobs é otimizado para armazenar grandes quantidades de dados não estruturados a um custo relativamente baixo.
Nesse cenário, o Adventure Works Cycles está recebendo dados de retorno de repositório com base no número de identificação do repositório. Esses dados são armazenados em arquivos .dat que, a seguir, são enviados por push para o Armazenamento de Blobs do Azure. Depois que os dados estiverem no Armazenamento de Blobs, o SQL do Azure precisará de uma forma de acessá-los. Você pode fazer isso criando uma fonte de dados externa que tem acesso à conta de armazenamento. Você pode controlar o acesso a essa conta de armazenamento por meio do Microsoft Entra ID, da autorização de chave compartilhada ou de uma assinatura de acesso compartilhado (SAS).
Neste exercício, exploramos um cenário para carregamento em massa de dados do armazenamento de Blobs do Azure para o Banco de Dados SQL do Azure. A abordagem usa T-SQL e assinaturas de acesso compartilhado.
Há duas opções para concluir esse exercício:
sqlcmd
no Azure Cloud Shell- Notebooks do SQL no Azure Data Studio
Ambos os exercícios contêm os mesmos comandos e conteúdo, então você pode escolher a opção que preferir.
Opção 1: sqlcmd
no Azure Cloud Shell
sqlcmd
é uma ferramenta de linha de comando, que permite que você interaja com o SQL Server e o SQL do Azure usando a linha de comando. Neste exercício, você usa sqlcmd
na instância do PowerShell do Azure Cloud Shell. sqlcmd
é instalado por padrão, portanto, é fácil usá-lo no Azure Cloud Shell.
Devido à maneira como o Azure Cloud Shell para Bash é configurado, primeiro você precisa alterar o modo de terminal executando o comando a seguir no Azure Cloud Shell.
TERM=dumb
Execute o comando a seguir no terminal integrado depois de modificar o nome do servidor e a senha.
sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
Crie uma tabela e um esquema nos quais os dados possam ser carregados. Esse processo é um T-SQL direto. Execute o seguinte script no terminal, agora que você está conectado ao 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
Dica
Você vê uma entrada numérica após as instruções T-SQL. Os números representam cada linha da inserção no T-SQL. Por exemplo, o comando anterior termina com
26
. Certifique-se de selecionar ENTER após essas linhas.Você saberá que o comando foi concluído quando
1>
estiver visível novamente, indicando que osqlcmd
está pronto para a primeira linha da sua próxima inserção no T-SQL.Em seguida, crie uma chave mestra:
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyComplexPassword00!'; GO
Uma chave mestra é necessária para criar um valor de
DATABASE SCOPED CREDENTIAL
, pois o Armazenamento de Blobs não está configurado para permitir acesso público (anônimo). A credencial se refere à conta de armazenamento de Blobs. A parte dos dados especifica o contêiner para os dados de retorno do repositório.Usamos uma assinatura de acesso compartilhado como uma identidade que o SQL do Azure sabe como interpretar. O segredo é o token SAS que você pode gerar da conta de Armazenamento de Blobs. Neste exemplo, o token SAS de uma conta de armazenamento para a qual você não tem acesso é fornecido para que você possa acessar apenas os dados de retorno do repositório.
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
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
Insira em massa um dos arquivos de retorno do repositório. Execute o seguinte script e, ao final da execução, examine 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
Verifique quantas linhas foram inseridas na tabela:
SELECT COUNT(*) FROM DataLoad.store_returns; GO
Se tudo tiver sido executado corretamente,
2807797
terá sido retornado.
Esse código é um exemplo simples de como inserir dados do armazenamento de Blobs no Banco de Dados SQL do Azure. Para realizar o exercício novamente, execute o seguinte código a fim de reverter o que foi feito:
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: Notebooks do SQL no Azure Data Studio
Para essa atividade, você usará o notebook chamado LoadData.ipynb. Você pode encontrá-lo em \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata no seu dispositivo. Abra o arquivo no Azure Data Studio para concluir o exercício e, em seguida, retorne aqui.
Se não for possível concluir o exercício por qualquer motivo, você poderá examinar os resultados no arquivo de notebook correspondente no GitHub.