练习 - 将数据加载到 Azure SQL 数据库

已完成

大容量加载数据时,它必须来自某个位置。 在 Azure 中,通常会将数据存储或转储到 Azure Blob 存储。 Blob 存储经过优化,能够以相对较低的成本存储巨量的非结构化数据。

在这种情况下,Adventure Works Cycles 将根据存储标识号接收存储返回数据。 此数据存储在 .dat 文件中,然后被推送到 Azure Blob 存储。 数据位于 Blob 存储之后,Azure SQL 需要一种方法来访问它。 为此,你可创建有权访问存储帐户的外部数据源。 可以通过 Microsoft Entra ID、共享密钥授权或共享访问签名 (SAS) 来控制对该存储帐户的访问。

在此练习中,我们将探讨一种将数据从 Azure Blob 存储批量加载到 Azure SQL 数据库的方案。 该方法使用 T-SQL 和共享访问签名。

可通过两个选项完成此练习:

  • Azure Cloud Shell 中的 sqlcmd
  • Azure Data Studio 中的 SQL 笔记本

这两个练习都包含相同的命令和内容,因此你可选择所需的选项。

选项 1:Azure Cloud Shell 中的 sqlcmd

sqlcmd 是一个命令行工具,借助该工具,你可以使用命令行与 SQL Server 和 Azure SQL 交互。 在此练习中,你将在 Azure Cloud Shell 的 PowerShell 实例中使用 sqlcmdsqlcmd 默认情况下已安装,因此可以从 Azure Cloud Shell 轻松使用。

  1. 由于用于 Bash 的 Azure Cloud Shell 的配置方式,首先需要在 Azure Cloud Shell 中运行以下命令来更改终端模式。

    TERM=dumb
    
  2. 修改服务器名称和密码后,在集成终端中运行以下命令。

    sqlcmd -S <server name>.database.windows.net -P <password> -U cloudadmin -d AdventureWorks
    
  3. 创建一个表和架构,以将数据加载到其中。 这个过程是一个简单的 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 条目的第一行做好了准备),你会知道该命令已完成。

  4. 接下来,创建一个主密钥:

    CREATE MASTER KEY 
    ENCRYPTION BY PASSWORD='MyComplexPassword00!';
    GO
    
  5. 创建 DATABASE SCOPED CREDENTIAL 值时需要主密钥,因为没有将 Blob 存储配置为允许公共(匿名)访问。 该凭据引用 Blob 存储帐户。 数据部分指定存储返回数据的容器。

    使用共享访问签名作为 Azure SQL 知道如何解释的标识。 机密是可以从 Blob 存储帐户生成的 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
    
  6. 为容器创建外部数据源:

    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. 批量插入其中一个存储返回文件。 运行以下脚本,并在完成时查看注释:

    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. 检查插入到表中的行数:

    SELECT COUNT(*) FROM DataLoad.store_returns;
    GO
    

    如果一切正常运行,应会返回 2807797

此代码是如何将 Blob 存储中的数据插入 Azure SQL 数据库的简单示例。 如果要再次运行此练习,请运行以下代码来重置已完成的操作:

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 上的相应笔记本文件中查看结果。