你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将数据从 Azure Data Lake Storage 加载到 Azure Synapse Analytics 中的专用 SQL 池

本指南概述如何使用 COPY 语句从 Azure Data Lake Store 加载数据。 有关跨所有身份验证方法使用 COPY 语句的快速示例,请访问以下文档:使用专用 SQL 池安全地加载数据

注意

若要提供有关 COPY 语句的反馈或报告相关问题,请将电子邮件发送到以下通讯组列表:sqldwcopypreview@service.microsoft.com。

  • 创建要从 Azure Data Lake Storage 加载数据的目标表。
  • 创建 COPY 语句将数据加载到数据仓库。

如果还没有 Azure 订阅,可以在开始前创建一个免费 Azure 帐户

准备阶段

开始本教程之前,请下载并安装最新版 SQL Server Management Studio (SSMS)。

若要运行本教程,需要:

  • 专用 SQL 池。 请参阅创建专用 SQL 池和查询数据
  • Data Lake Storage 帐户。 请参阅 Azure Data Lake Storage 入门。 对于此存储帐户,需要配置或指定以下凭据之一来进行加载:存储帐户密钥、共享访问签名 (SAS) 密钥、Azure Directory 应用程序用户,或者具有存储帐户的相应 Azure 角色的 Microsoft Entra 用户。
  • 目前,使用 COPY 命令将数据引入到使用新的 Azure 存储 DNS 分区功能的 Azure 存储帐户中会导致错误。 在不使用 DNS 分区的订阅中,为本教程预配一个存储帐户。

创建目标表

连接到专用 SQL 池,并创建将要加载到的目标表。 在此示例中,我们将创建一个产品维度表。

-- A: Create the target table
-- DimProduct
CREATE TABLE [dbo].[DimProduct]
(
    [ProductKey] [int] NOT NULL,
    [ProductLabel] [nvarchar](255) NULL,
    [ProductName] [nvarchar](500) NULL
)
WITH
(
    DISTRIBUTION = HASH([ProductKey]),
    CLUSTERED COLUMNSTORE INDEX
    --HEAP
);

创建 COPY 语句

连接到 SQL 专用池并运行 COPY 语句。 要获得完整的示例列表,请访问以下文档:使用专用 SQL 池安全地加载数据

-- B: Create and execute the COPY statement

COPY INTO [dbo].[DimProduct]  
--The column list allows you map, omit, or reorder input file columns to target table columns.  
--You can also specify the default value when there is a NULL value in the file.
--When the column list is not specified, columns will be mapped based on source and target ordinality
(
    ProductKey default -1 1,
    ProductLabel default 'myStringDefaultWhenNull' 2,
    ProductName default 'myStringDefaultWhenNull' 3
)
--The storage account location where you data is staged
FROM 'https://storageaccount.blob.core.windows.net/container/directory/'
WITH  
(
   --CREDENTIAL: Specifies the authentication method and credential access your storage account
   CREDENTIAL = (IDENTITY = '', SECRET = ''),
   --FILE_TYPE: Specifies the file type in your storage account location
   FILE_TYPE = 'CSV',
   --FIELD_TERMINATOR: Marks the end of each field (column) in a delimited text (CSV) file
   FIELDTERMINATOR = '|',
   --ROWTERMINATOR: Marks the end of a record in the file
   ROWTERMINATOR = '0x0A',
   --FIELDQUOTE: Specifies the delimiter for data of type string in a delimited text (CSV) file
   FIELDQUOTE = '',
   ENCODING = 'UTF8',
   DATEFORMAT = 'ymd',
   --MAXERRORS: Maximum number of reject rows allowed in the load before the COPY operation is canceled
   MAXERRORS = 10,
   --ERRORFILE: Specifies the directory where the rejected rows and the corresponding error reason should be written
   ERRORFILE = '/errorsfolder',
) OPTION (LABEL = 'COPY: ADLS tutorial');

优化列存储压缩

默认情况下,表定义为聚集列存储索引。 加载完成后,某些数据行可能未压缩到列存储中。 发生这种情况的原因多种多样。 若要了解详细信息,请参阅管理列存储索引

若要在加载后优化查询性能和列存储压缩,请重新生成表,以强制列存储索引压缩所有行。


ALTER INDEX ALL ON [dbo].[DimProduct] REBUILD;

优化统计信息

最好是在加载之后马上创建单列统计信息。 对于统计信息,可以使用多个选项。 例如,如果针对每个列创建单列统计信息,则重新生成所有统计信息可能需要花费很长时间。 如果知道某些列不会在查询谓词中使用,可以不创建有关这些列的统计信息。

如果决定针对每个表的每个列创建单列统计信息,可以使用 statistics(统计信息)一文中的存储过程代码示例 prc_sqldw_create_stats

以下示例是创建统计信息的不错起点。 它会针对维度表中的每个列以及事实表中的每个联接列创建单列统计信息。 以后,随时可以将单列或多列统计信息添加到其他事实表列。

大功告成!

已成功地将数据加载到数据仓库中。 干得不错!

后续步骤

加载数据是使用 Azure Synapse Analytics 开发数据仓库解决方案的第一步。 请查看我们的开发资源。

有关加载示例和参考的详细信息,请查看以下文档: