Alıştırma - Azure SQL Veritabanı’na veri yükleme
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.
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
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
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
26
biter. 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.Ardından bir ana anahtar oluşturun:
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyComplexPassword00!'; GO
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
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
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
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.