演習 - データを Azure SQL Database に読み込む
データの一括読み込みを行うときは、どこかから取得する必要があります。 Azure では、Azure Blob Storage にデータを格納またはダンプするのが一般的です。 Blob Storage は、比較的低コストで大量の非構造化データを格納できるよう最適化されています。
このシナリオでは、Adventure Works Cycles は店舗の ID 番号に基づいて店舗返品データを受け取ります。 このデータは .dat ファイルに格納された後、Azure Blob Storage にプッシュされます。 データが Blob Storage に格納されたら、Azure SQL でそれにアクセスする方法が必要です。 ストレージ アカウントにアクセスできる外部データ ソースを作成することで、それを行うことができます。 そのストレージ アカウントへのアクセスは、Microsoft Entra ID、共有キーの認可、または Shared Access Signature (SAS) を使用して制御できます。
この演習では、Azure Blob Storage から Azure SQL Database にデータを一括で読み込む 1 つのシナリオについて調べます。 このアプローチでは、T-SQL と Shared Access Signature を使います。
この演習を行うには、2 つのオプションがあります。
- Azure Cloud Shell での
sqlcmd
- Azure Data Studio での SQL ノートブック
どちらの演習にも同じコマンドとコンテンツが含まれているため、お好きなオプションを選択できます。
オプション 1: Azure Cloud Shell での sqlcmd
sqlcmd
は、コマンド ラインを使用して SQL Server および Azure SQL を操作できるコマンド ライン ツールです。 この演習では、Azure Cloud Shell の PowerShell インスタンスで sqlcmd
を使います。 sqlcmd
は既定でインストールされるので、Azure Cloud Shell から簡単に使用できます。
Bash 用に Azure Cloud Shell を構成する方法のため、最初に Azure Cloud Shell で次のコマンドを実行し、ターミナル モードを変更する必要があります。
TERM=dumb
サーバー名とパスワードを自分のものに変更した後、統合ターミナルで次のコマンドを実行します。
sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
読み込むデータのためのテーブルとスキーマを作成します。 このプロ説は、単純な T-SQL です。 データベースに接続したので、ターミナルで次のスクリプトを実行します。
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
ヒント
T-SQL ステートメントの後に数値エントリが表示されます。 これは、T-SQL エントリの各行を表します。 たとえば、上のコマンドは
26
で終了します。 これらの行の後で必ず Enter キーを押してください。1>
が再び表示されると、コマンドが終了したことがわかります。これは、sqlcmd
に次の T-SQL エントリの最初の行を入力する準備ができたことを示します。次に、マスター キーを作成します。
CREATE MASTER KEY ENCRYPTION BY PASSWORD='MyComplexPassword00!'; GO
Blob Storage はパブリック (匿名) アクセスを許可するように構成されていないため、
DATABASE SCOPED CREDENTIAL
値を作成するにはマスター キーが必要です。 資格情報では Blob Storage アカウントを参照します。 データ部分では、店舗返品データのコンテナーを指定します。Azure SQL が解釈する方法を認識している ID として Shared Access Signature を使います。 シークレットは、Blob Storage アカウントから生成できる SAS トークンです。 この例では、アクセス権のないストレージ アカウントの SAS トークンが提供されるため、店舗返品データのみにアクセスできます。
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
コンテナーに対する外部データ ソースを作成します。
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
店舗返品ファイルの 1 つを一括挿入します。 次のスクリプトを実行し、完了するまでに、コメントを確認します。
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
テーブルに挿入された行の数を確認します。
SELECT COUNT(*) FROM DataLoad.store_returns; GO
すべてが正常に実行された場合、
2807797
が返されるはずです。
このコードは、Blob Storage から Azure SQL Database にデータを挿入する方法の簡単な例です。 演習をもう一度行いたい場合は、次のコードを実行して、行った内容をリセットします。
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: Azure Data Studio での SQL ノートブック
このアクティビティでは、LoadData.ipynb という名前のノートブックを使います。 これは、デバイスの \mslearn-azure-sql-fundamentals\02-DeployAndConfigure\loaddata にあります。 Azure Data Studio でこのファイルを開いてこの演習を完了した後で、ここに戻ります。
何らかの理由で演習を完了できない場合は、GitHub の対応するノートブック ファイルで結果を確認できます。