Cvičení – Načtení dat do databáze Azure SQL
Když hromadně načítáte data, musí tato data odněkud pocházet. V Azure je běžné ukládat nebo ukládat data do služby Azure Blob Storage. Blob Storage je optimalizovaná pro ukládání obrovských objemů nestrukturovaných dat za relativně nízké náklady.
V tomto scénáři získává Adventure Works Cycles vrácená data z úložiště na základě identifikačního čísla úložiště. Tato data se ukládají do .dat souborů, které se pak nasdílí do úložiště objektů blob v Azure. Tam potřebuje mít Azure SQL způsob, jak k nim přistupovat. To můžete provést vytvořením externího zdroje dat, který má přístup k danému účtu úložiště. Přístup k ho účtu úložiště můžete řídit prostřednictvím ID Microsoft Entra, autorizace sdíleného klíče nebo sdíleného přístupového podpisu (SAS).
V tomto cvičení prozkoumáme jeden scénář hromadného načítání dat ze služby Azure Blob Storage do služby Azure SQL Database. Přístup používá T-SQL a sdílené přístupové podpisy.
Můžeme postupovat dvěma způsoby:
sqlcmd
v Azure Cloud Shellu- Soubory SQL Notebook v nástroji Azure Data Studio
Obě možnosti nabízejí stejné příkazy a obsah, takže si můžete zvolit tu, která vám vyhovuje.
Možnost 1: sqlcmd
v Azure Cloud Shellu
sqlcmd
je nástroj pro příkazový řádek, který umožňuje práci s SQL Serverem a Azure SQL pomocí příkazového řádku. V tomto cvičení použijete sqlcmd
v instanci PowerShellu azure Cloud Shell. Příkaz sqlcmd
je standardně nainstalovaný, takže se s ním v Azure Cloud Shellu snadno pracuje.
Vzhledem ke způsobu, jakým je Služba Azure Cloud Shell pro Bash nakonfigurovaná, musíte nejprve změnit režim terminálu spuštěním následujícího příkazu v Azure Cloud Shellu.
TERM=dumb
Po úpravě názvu serveru a hesla spusťte v integrovaném terminálu následující příkaz.
sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
Vytvořte tabulku a schéma pro načtení dat. Tento proces je jednoduchý jazyk T-SQL. V terminálu spusťte následující skript, který je teď připojený k databázi:
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
Tip
Za příkazy T-SQL se zobrazí položka čísla. Představuje každý řádek položky T-SQL. Například předchozí příkaz končí znakem
26
. Nezapomeňte za těmito řádky vybrat ENTER .Víte, že příkaz se po opětovném zobrazení
1>
dokončil, což znamená, žesqlcmd
je připravený na první řádek další položky T-SQL.Dále vytvořte hlavní klíč:
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyComplexPassword00!'; GO
K vytvoření
DATABASE SCOPED CREDENTIAL
hodnoty se vyžaduje hlavní klíč, protože úložiště objektů blob není nakonfigurované tak, aby umožňovalo veřejný (anonymní) přístup. Přihlašovací údaje odkazují na účet úložiště objektů blob. Datová část určuje kontejner pro vrácená data úložiště.Jako identitu, kterou Azure SQL ví, jak interpretovat, použijte sdílený přístupový podpis. Tajný kód je token SAS, který můžete vygenerovat z účtu služby Blob Storage. V tomto příkladu máte k dispozici token SAS k účtu úložiště, k němuž nemáte přístup, takže můžete pracovat jen s vrácenými daty z úložiště.
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
Vytvořte externí zdroj dat pro kontejner:
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
Hromadně vložte jeden z vrácených souborů úložiště. Spusťte následující skript a po dokončení zkontrolujte komentáře:
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
Zkontrolujte, kolik řádků bylo vloženo do tabulky:
SELECT COUNT(*) FROM DataLoad.store_returns; GO
Pokud všechno proběhlo správně, měli byste vidět výsledek
2807797
.
Tento kód představuje jednoduchý příklad vložení dat z úložiště objektů blob do služby Azure SQL Database. Pokud chcete cvičení znovu projít, spusťte následující kód a resetujte, co jste udělali:
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
Možnost 2: Poznámkové bloky SQL v Nástroji Azure Data Studio
Pro tuto aktivitu použijte poznámkový blok s názvem LoadData.ipynb. Najdete ho v \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata na vašem zařízení. Otevřete tento soubor v Nástroji Azure Data Studio a dokončete toto cvičení a vraťte se sem.
Pokud z nějakého důvodu nedokážete cvičení dokončit, můžete si výsledky prohlédnout v příslušném souboru Notebook na GitHubu.