Alıştırma - Azure SQL Veritabanı’na veri yükleme

Tamamlandı

Verilerin toplu yüklenirken bir yerden alınması gerekir. Azure'da verileri Azure Blob Depolama depolamak veya dökümünü almak yaygın bir uygulamadır. Blob Depolama, büyük miktarlarda yapılandırılmamış verileri nispeten düşük maliyetle depolamak için iyileştirilmiştir.

Bu senaryoda Adventure Works Cycles, mağaza iade verilerini mağaza tanımlama numarasına göre alıyor. Bu veriler daha sonra Azure Blob depolamaya gönderilen .dat dosyalarında depolanır. Veriler Blob depolama alanına ulaştığında Azure SQL, bunlara erişmek için bir yönteme ihtiyaç duyuyor. Bunun için depolama hesabına erişimi olan bir dış veri kaynağı oluşturabilirsiniz. Bu depolama hesabına erişimi Microsoft Entra Id, paylaşılan anahtar yetkilendirme veya paylaşılan erişim imzası (SAS) aracılığıyla denetleyebilirsiniz.

Bu alıştırmada Azure Blob depolamadan Azure SQL Veritabanı'a toplu veri yükleme senaryolarından birini keşfedin. Yaklaşımda T-SQL ve paylaşılan erişim imzaları kullanılır.

Bu alıştırmayı tamamlamaya yönelik iki seçenek vardır:

  • Azure Cloud Shell'deki sqlcmd aracı
  • Azure Data Studio'daki SQL not defterleri

Her iki alıştırmada da aynı komutlar ve içerik yer aldığından dilediğinizi tercih edebilirsiniz.

1. Seçenek: Azure Cloud Shell’deki sqlcmd aracı

sqlcmd, komut satırını kullanarak SQL Server ve Azure SQL ile etkileşim kurmanıza olanak veren bir komut satırı aracıdır. Bu alıştırmada Azure Cloud Shell'in PowerShell örneğinde kullanın sqlcmd . sqlcmd varsayılan olarak yüklendiğinden Azure Cloud Shell üzerinden kolayca kullanılabilir.

  1. Bash için Azure Cloud Shell'in yapılandırılma şekli nedeniyle, önce Azure Cloud Shell'de aşağıdaki komutu çalıştırarak terminal modunu değiştirmeniz gerekir.

    TERM=dumb
    
  2. Sunucu adınızı ve parolanızı değiştirdikten sonra tümleşik terminalde aşağıdaki komutu çalıştırın.

    sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
    
  3. Yüklenecek veriler için bir tablo ve şema oluşturun. Bu işlem basit bir T-SQL işlemidir. Veritabanınıza bağlandığınıza göre terminalde aşağıdaki betiği çalıştırın:

    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
    

    Bahşiş

    T-SQL deyimlerinden sonra bir sayı girişi görürsünüz. T-SQL girişinin her satırını temsil eder. Örneğin, yukarıdaki komut ile 26biter. Bu satırlardan sonra ENTER'ı seçtiğinizden emin olun.

    Komutun, bir sonraki T-SQL girdinizin ilk satırı için hazır olduğunu gösteren yeniden gördüğünüzde 1> tamamlandığını sqlcmd biliyorsunuz.

  4. Ardından bir ana anahtar oluşturun:

    CREATE MASTER KEY 
    ENCRYPTION BY PASSWORD='MyComplexPassword00!';
    GO
    
  5. Blob depolama genel (anonim) erişime izin verecek şekilde yapılandırılmadığından, değer oluşturmak için bir DATABASE SCOPED CREDENTIAL ana anahtar gereklidir. Kimlik bilgisi Blob depolama hesabına başvurur. Veri bölümü, depo dönüş verilerinin kapsayıcısını belirtir.

    Azure SQL'in yorumlamayı bildiği kimlik olarak paylaşılan erişim imzasını kullanın. Gizli dizi, Blob depolama hesabından oluşturabileceğiniz SAS belirtecidir. Bu örnekte, yalnızca depo dönüş verilerine erişebilmeniz için erişiminizin olmadığı depolama hesabına yönelik SAS belirteci sağlanır.

    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. Kapsayıcıya bir dış veri kaynağı oluşturun:

    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. Depo dönüş dosyalarından birini toplu olarak ekleyin. Aşağıdaki betiği çalıştırın ve tamamlandığında açıklamaları gözden geçirin:

    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. Tabloya kaç satır eklendiğini denetleyin:

    SELECT COUNT(*) FROM DataLoad.store_returns;
    GO
    

    Her şey doğru şekilde çalıştıysa 2807797 değerinin dönmüş olması gerekir.

Bu kod, Blob depolamadan Azure SQL Veritabanı'a veri eklemenin basit bir örneğidir. Alıştırmayı yeniden çalıştırmak istiyorsanız, yaptığınız işlemi sıfırlamak için aşağıdaki kodu çalıştırın:

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. Seçenek: Azure Data Studio'da SQL not defterleri

Bu etkinlik için LoadData.ipynb adlı not defterini kullanın. Bunu cihazınızda \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata konumunda bulabilirsiniz. Bu alıştırmayı tamamlamak için bu dosyayı Azure Data Studio'da açın ve buraya dönün.

Alıştırmayı herhangi bir nedenden dolayı tamamlayamıyorsanız sonuçları GitHub’daki ilgili not defteri dosyasında gözden geçirebilirsiniz.