Övning – Läsa in data i Azure SQL Database

Slutförd

När du använder massinläsning av data måste de komma någonstans ifrån. I Azure är det vanligt att lagra eller dumpa data i Azure Blob Storage. Blob Storage är optimerat för lagring av enorma mängder ostrukturerade data till en relativt låg kostnad.

I det här scenariot tar AdventureWorks emot lagringsreturdata baserat på ett lagrings-id-nummer. Dessa data lagras i .dat filer som sedan skickas till Azure Blob Storage. När data lagras i Blob Storage behöver Azure SQL ett sätt att komma åt dem. Du kan lösa det här genom att skapa en extern datakälla som har åtkomst till lagringskontot. Du kan styra åtkomsten till lagringskontot via Microsoft Entra-ID, auktorisering av delad nyckel eller en signatur för delad åtkomst (SAS).

I den här övningen utforskar vi ett scenario för massinläsning av data från Azure Blob Storage till Azure SQL Database. Metoden använder signaturer för T-SQL och delad åtkomst.

Den här övningen kan utföras på två sätt:

  • sqlcmd i Azure Cloud Shell
  • SQL-notebook-filer i Azure Data Studio

Båda övningarna innehåller samma kommandon och innehåll, så du kan välja vilket alternativ du vill.

Alternativ 1: sqlcmd i Azure Cloud Shell

sqlcmd är ett kommandoradsverktyg som gör att du kan interagera med SQL Server och Azure SQL via kommandoraden. I den här övningen använder sqlcmd du i PowerShell-instansen av Azure Cloud Shell. sqlcmd installeras som standard, så du kan enkelt använda det via Azure Cloud Shell.

  1. På grund av hur Azure Cloud Shell för Bash har konfigurerats måste du först ändra terminalläget genom att köra följande kommando i Azure Cloud Shell.

    TERM=dumb
    
  2. Kör följande kommando i den integrerade terminalen när du har ändrat servernamn och lösenord.

    sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
    
  3. Skapa en tabell och ett schema för data som ska läsas in i. Den här processen är enkel T-SQL. Kör följande skript i terminalen nu när du är ansluten till databasen:

    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
    

    Dricks

    Du ser en nummerpost efter T-SQL-uttrycken. Den representerar varje rad i T-SQL-posten. Till exempel slutar föregående kommando med 26. Se till att välja RETUR efter dessa rader.

    Du vet att kommandot har slutförts när du ser 1> igen, vilket anger att sqlcmd är redo för den första raden i nästa T-SQL-post.

  4. Skapa sedan en huvudnyckel:

    CREATE MASTER KEY 
    ENCRYPTION BY PASSWORD='MyComplexPassword00!';
    GO
    
  5. En huvudnyckel krävs för att skapa ett DATABASE SCOPED CREDENTIAL värde eftersom Blob Storage inte har konfigurerats för att tillåta offentlig (anonym) åtkomst. Autentiseringsuppgifterna refererar till Blob Storage-kontot. Datadelen anger containern för lagringens returdata.

    Använd en signatur för delad åtkomst som den identitet som Azure SQL vet hur man tolkar. Hemligheten är den SAS-token du kan generera via bloblagringskontot. I det här exemplet tillhandahålls en SAS-token för ett lagringskonto som du inte har åtkomst till, så du har endast åtkomst till lagringsreturdata.

    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. Skapa en extern datakälla till containern:

    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. Massinfoga en av lagringsreturfilerna. Kör följande skript och granska kommentarerna medan det är klart:

    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. Kontrollera hur många rader som infogades i tabellen:

    SELECT COUNT(*) FROM DataLoad.store_returns;
    GO
    

    Om allt kördes korrekt ska 2807797 rader ha returnerats.

Den här koden är ett enkelt exempel på hur du infogar data från Blob Storage i Azure SQL Database. Om du vill köra övningen igen kör du följande kod för att återställa det du har gjort:

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

Alternativ 2: SQL-notebook-filer i Azure Data Studio

För den här aktiviteten använder du notebook-filen LoadData.ipynb. Du hittar den i \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata på enheten. Öppna den här filen i Azure Data Studio för att slutföra den här övningen och gå sedan tillbaka hit.

Om du inte kan slutföra övningen av någon anledning kan du granska resultaten i motsvarande notebook-fil på GitHub.