Упражнение — загрузка данных в базу данных SQL Azure
При выполнении операции массовой загрузки данных они должны откуда-то браться. В Azure обычно хранятся или сбрасывают данные в Хранилище BLOB-объектов Azure. Хранилище BLOB-объектов оптимизировано для хранения больших объемов неструктурированных данных с относительно низкой стоимостью.
В этом сценарии 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.
Из-за настройки Azure Cloud Shell для Bash сначала необходимо изменить режим терминала, выполнив следующую команду в Azure Cloud Shell.
TERM=dumb
После изменения имени сервера и пароля выполните следующую команду в интегрированном терминале.
sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
Создайте таблицу и схему для загрузки данных. Этот процесс прост в 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.Затем создайте главный ключ:
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyComplexPassword00!'; GO
Для создания значения требуется главный
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
Создайте внешний источник данных для контейнера:
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
Массовая вставка одного из возвращаемых файлов хранилища. Запустите следующий скрипт и, пока завершится, просмотрите комментарии:
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
Проверьте, сколько строк было вставлено в таблицу:
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.