Ejercicio: Carga de datos en Azure SQL Database

Completado

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, explore 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, use 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.

  1. 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
    
  2. 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
    
  3. 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 que sqlcmd está listo para la primera línea de la siguiente entrada T-SQL.

  4. A continuación, cree una clave maestra:

    CREATE MASTER KEY 
    ENCRYPTION BY PASSWORD='MyComplexPassword00!';
    GO
    
  5. 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
    
  6. 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
    
  7. 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
    
  8. 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.