Übung: Laden von Daten in Azure SQL-Datenbank

Abgeschlossen

Beim Massenladen von Daten stammen diese Daten aus bestimmten Quellen. In Azure ist es üblich, Daten in Azure Blob Storage zu speichern oder zu sichern. Blob Storage ist für die relativ konstengünstige Speicherung großer Mengen unstrukturierter Daten optimiert.

In diesem Szenario empfängt Adventure Works Cycles basierend auf der Identifikationsnummer Rückgabedaten aus dem Speicher. Diese Daten werden in DAT-Dateien gespeichert, die dann mithilfe von Push in den Azure-Blobspeicher übertragen werden. Sobald sich die Daten im Blobspeicher befinden, benötigt Azure SQL eine Möglichkeit für den Zugriff darauf. Hierfür können Sie eine externe Datenquelle erstellen, die Zugriff auf das Speicherkonto hat. Sie können den Zugriff auf dieses Speicherkonto über Microsoft Entra ID, die Autorisierung mit einem gemeinsam verwendeten Schlüssel oder mit einer Shared Access Signature (SAS) steuern.

In dieser Übung wird ein Szenario für das Massenladen von Daten aus dem Azure-Blobspeicher in Azure SQL-Datenbank erläutert. Der Ansatz verwendet T-SQL und Shared Access Signatures (SAS).

Es gibt zwei Möglichkeiten, diese Übung abzuschließen:

  • sqlcmd in Azure Cloud Shell
  • SQL-Notebooks in Azure Data Studio

Beide Übungen verwenden dieselben Befehle und Inhalte, sodass Sie frei wählen können.

Option 1: sqlcmd in Azure Cloud Shell

sqlcmd ist ein Befehlszeilentool, mit dem Sie über die Befehlszeile mit SQL Server und Azure SQL interagieren können. In dieser Übung verwenden Sie sqlcmd in der PowerShell-Instanz von Azure Cloud Shell. sqlcmd wird standardmäßig installiert, sodass das Programm in Azure Cloud Shell einfach zu verwenden ist.

  1. Aufgrund der Konfiguration von Azure Cloud Shell für Bash müssen Sie zunächst den Terminalmodus ändern, indem Sie den folgenden Befehl in Azure Cloud Shell ausführen.

    TERM=dumb
    
  2. Führen Sie den folgenden Befehl im integrierten Terminal aus, nachdem Sie den Servernamen und das Kennwort geändert haben.

    sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
    
  3. Erstellen Sie eine Tabelle und ein Schema, in die die Daten geladen werden. Für diesen Vorgang wird T-SQL verwendet. Führen Sie das folgende Skript im Terminal aus, nachdem Sie eine Verbindung mit der Datenbank hergestellt haben:

    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
    

    Tipp

    Nach den T-SQL-Anweisungen sehen Sie einen Zahleneintrag. Er stellt jeweils eine Zeile der T-SQL-Eingabe dar. Der vorstehende Befehl endet beispielsweise mit 26. Vergessen Sie nicht, nach diesen Zeilen die EINGABETASTE zu drücken.

    Sie wissen, dass der Befehl beendet ist, wenn 1> wieder angezeigt wird. Dies gibt an, dass sqlcmd bereit für die nächste Zeile der nächsten T-SQL-Eingabe ist.

  4. Erstellen Sie dann einen Hauptschlüssel:

    CREATE MASTER KEY 
    ENCRYPTION BY PASSWORD='MyComplexPassword00!';
    GO
    
  5. Ein Hauptschlüssel ist erforderlich, um einen DATABASE SCOPED CREDENTIAL-Wert zu erstellen, da der Blobspeicher nicht so konfiguriert ist, dass er öffentlichen (anonymen) Zugriff zulässt. Die Anmeldeinformationen beziehen sich auf das Blob-Speicherkonto. Der Datenteil gibt den Container der Speicherrückgabedaten an.

    Sie verwenden eine Shared Access Signature (SAS) als Identität, die von Azure SQL interpretiert werden kann. Das Geheimnis ist das SAS-Token, das Sie aus dem Blobspeicherkonto generieren können. In diesem Beispiel wird das SAS-Token für ein Speicherkonto bereitgestellt, auf das Sie keinen Zugriff haben, sodass Sie nur auf die Speicherrückgabedaten zugreifen können.

    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. Erstellen Sie eine externe Datenquelle für den Container:

    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. Massenhinzufügen einer der Speicherrückgabedateien. Führen Sie das folgende Skript aus, und überprüfen Sie während der Ausführung die Kommentare:

    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. Überprüfen Sie, wie viele Zeilen in die Tabelle eingefügt wurden:

    SELECT COUNT(*) FROM DataLoad.store_returns;
    GO
    

    Wenn alles ordnungsgemäß ausgeführt wurde, sollte 2807797 zurückgegeben werden.

Dieser Code ist ein einfaches Beispiel für das Einfügen von Daten aus einem Blobspeicher in Azure SQL-Datenbank. Wenn Sie die Übung noch mal ausführen möchten, führen Sie den folgenden Code aus, um die Vorgänge zurückzusetzen:

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

Option 2: SQL-Notebooks in Azure Data Studio

Für diese Aktivität verwenden Sie das Notebook namens LoadData.ipynb. Sie finden es im Verzeichnis \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata auf Ihrem Gerät. Öffnen Sie diese Datei in Azure Data Studio, um diese Übung abzuschließen, und kehren Sie dann hierher zurück:

Wenn Sie die Übung aus irgendeinem Grund nicht abschließen können, können Sie die Ergebnisse in der entsprechenden Notebook-Datei auf GitHub überprüfen.