Ejercicio: Carga de datos en Azure SQL Database
Cuando se cargan datos de forma masiva, tienen que provenir de cualquier lugar. En Azure, es habitual almacenar o volcar datos en Azure Blob Storage. Blob Storage está optimizado para almacenar grandes cantidades de datos no estructurados a un costo relativamente bajo.
En este escenario, Adventure Works Cycles recibe datos devueltos por el almacén según el número de identificación del almacén. Estos datos se almacenan en archivos .dat, que luego se insertan en el almacenamiento de blobs de Azure. Una vez que los datos están en el almacenamiento de blobs, Azure SQL necesita una manera de acceder a ellos. Puede hacerlo si crea un origen de datos externo que tenga acceso a la cuenta de almacenamiento. Puede controlar el acceso a esa cuenta de almacenamiento a través de Microsoft Entra ID, la autorización de clave compartida o una firma de acceso compartido (SAS).
En este ejercicio, exploramos un escenario para cargar datos de forma masiva desde Azure Blob Storage en Azure SQL Database. El enfoque usa T-SQL y firmas de acceso compartido.
Existen dos opciones para completar este ejercicio:
sqlcmd
en Azure Cloud Shell- Cuadernos de SQL en Azure Data Studio
Los dos ejercicios contienen los mismos comandos y el mismo contenido, por lo que puede elegir la opción que prefiera.
Opción 1: sqlcmd
en Azure Cloud Shell
sqlcmd
es una herramienta de línea de comandos que permite interactuar con SQL Server y Azure SQL mediante la línea de comandos. En este ejercicio, usará sqlcmd
en la instancia de PowerShell de Azure Cloud Shell. sqlcmd
se instala de forma predeterminada, por lo que es fácil de usar desde Azure Cloud Shell.
Debido a la forma en la que se configura Azure Cloud Shell para Bash, primero debe cambiar el modo de terminal ejecutando el siguiente comando en Azure Cloud Shell.
TERM=dumb
Ejecute el comando siguiente en el terminal integrado después de modificar el nombre y la contraseña del servidor.
sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
Cree una tabla y un esquema para los datos que se van a cargar. El proceso se trata de T-SQL sencillo. Ahora que está conectado a la base de datos, ejecute el siguiente script en el terminal:
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
Sugerencia
Verá una entrada numérica después de las instrucciones T-SQL. Representa cada línea de la entrada de T-SQL. Por ejemplo, el comando anterior termina con
26
. Asegúrese de seleccionar ENTRAR después de estas líneas.Sabrá que el comando se ha completado cuando vuelva a ver
1>
, lo que indica quesqlcmd
está listo para la primera línea de la siguiente entrada T-SQL.A continuación, cree una clave maestra:
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyComplexPassword00!'; GO
Se necesita una clave maestra para crear un valor
DATABASE SCOPED CREDENTIAL
porque el almacenamiento de blobs no está configurado para permitir el acceso público (anónimo). La credencial hace referencia a la cuenta de Blob Storage. La parte de datos especifica el contenedor de los datos devueltos por el almacén.Use una firma de acceso compartido como la identidad que Azure SQL sabrá cómo interpretar. El secreto es el token de SAS, que se puede generar a partir de la cuenta de almacenamiento de blobs. En este ejemplo, se proporciona el token de SAS para una cuenta de almacenamiento a la que no tiene acceso, para que solo pueda acceder a los datos devueltos del almacén.
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
Cree un origen de datos externo para el contenedor:
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
Inserte de forma masiva uno de los archivos devueltos del almacén. Ejecute el siguiente script y, mientras se completa, revise los comentarios:
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
Compruebe cuántas filas se han insertado en la tabla:
SELECT COUNT(*) FROM DataLoad.store_returns; GO
Si todo se ha ejecutado correctamente, debería ver que se ha devuelto
2807797
.
Este código es un ejemplo sencillo de cómo insertar datos desde Blob Storage en Azure SQL Database. Si quiere repetir el ejercicio, ejecute el siguiente código para deshacer lo que ha hecho:
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
Opción 2: cuadernos de SQL en Azure Data Studio
En esta actividad, usará el cuaderno denominado LoadData.ipynb. Puede encontrarlo en \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata en el dispositivo. Abra este archivo en Azure Data Studio para completar este ejercicio y, después, vuelva aquí.
Si no puede completar el ejercicio por cualquier motivo, puede revisar los resultados en el archivo de cuaderno correspondiente en GitHub.