使用 bcp 加载数据

bcp 是一个命令行批量加载实用工具,用于在 SQL Server、数据文件和 SQL 数据仓库之间复制数据。 使用 bcp 实用程序可将大量的行导入 SQL 数据仓库表,或将 SQL Server 表中的数据导出到数据文件。 除非与 queryout 选项一起使用,否则 bcp 不需要 Transact-SQL 方面的知识。

bcp 是将较小数据集移入和移出 SQL 数据仓库数据库的快速轻松方式。 通过 bcp 加载/提取数据时,建议的确切数据量取决于 Azure 的网络连接。 随时可以使用 bcp 加载和提取小型维度表。 但是,若要加载和提取大量数据,我们建议使用 Polybase 而不要使用 bcp。 PolyBase 适用于 SQL 数据仓库的大规模并行处理体系结构。

使用 bcp 可以:

  • 使用命令行实用工具将数据载入 SQL 数据仓库。
  • 使用命令行实用工具从 SQL 数据仓库提取数据。

本教程:

  • 使用 bcp in 命令将数据导入表中
  • 使用 bcp out 命令从表中导出数据

先决条件

若要逐步完成本教程,需要满足以下条件:

  • SQL 数据仓库数据库
  • bcp 和 sqlcmd 命令行实用工具。 可从 Microsoft 下载中心下载这些工具。

采用 ASCII 或 UTF-16 格式的数据

如果使用自己的数据尝试学习本教程,则数据需要使用 ASCII 或 UTF-16 编码,因为 bcp 不支持 UTF-8。

PolyBase 支持 UTF-8,但尚不支持 UTF-16。 若要使用 bcp 执行数据导出,然后使用 PolyBase 执行数据加载,将数据从 SQL Server 导出后,需要将其转换为 UTF-8。

将数据导入 SQL 数据仓库

本教程会在 Azure SQL 数据仓库中创建一个表,并将数据导入该表。

步骤 1:在 Azure SQL 数据仓库中创建表

在命令提示符下,使用 sqlcmd 运行以下查询,以在实例上创建表:

sqlcmd.exe -S <server name> -d <database name> -U <username> -P <password> -I -Q "
    CREATE TABLE DimDate2
    (
        DateId INT NOT NULL,
        CalendarQuarter TINYINT NOT NULL,
        FiscalQuarter TINYINT NOT NULL
    )
    WITH
    (
        CLUSTERED COLUMNSTORE INDEX,
        DISTRIBUTION = ROUND_ROBIN
    );
"

有关创建表的详细信息,请参阅表概述CREATE TABLE 语法。

步骤 2:创建源数据文件

打开记事本,将以下几行数据复制到新文本文件,然后将此文件保存到本地临时目录,路径为 C:\Temp\DimDate2.txt。

20150301,1,3
20150501,2,4
20151001,4,2
20150201,1,3
20151201,4,2
20150801,3,1
20150601,2,4
20151101,4,2
20150401,2,4
20150701,3,1
20150901,3,1
20150101,1,3

Note

请务必记得 bcp.exe 不支持 UTF-8 文件编码。 使用 bcp.exe 时,请使用 ASCII 文件或 UTF-16 编码的文件。

步骤 3:连接并导入数据

在 bcp 中,可以使用以下命令来连接并导入数据(相应地替换其中的值):

bcp DimDate2 in C:\Temp\DimDate2.txt -S <Server Name> -d <Database Name> -U <Username> -P <password> -q -c -t  ','

可以使用 sqlcmd 运行以下查询来验证是否已加载数据:

sqlcmd.exe -S <server name> -d <database name> -U <username> -P <password> -I -Q "SELECT * FROM DimDate2 ORDER BY 1;"

该查询应返回以下结果:

DateId CalendarQuarter FiscalQuarter
20150101 1 3
20150201 1 3
20150301 1 3
20150401 2 4
20150501 2 4
20150601 2 4
20150701 3 1
20150801 3 1
20150801 3 1
20151001 4 2
20151101 4 2
20151201 4 2

步骤 4:基于新加载的数据创建统计信息

加载数据后,最后一步是创建或更新统计信息。 这有助于提升查询性能。 有关详细信息,请参阅统计信息。 以下 sqlcmd 示例在包含新加载的数据的表中创建统计信息。

sqlcmd.exe -S <server name> -d <database name> -U <username> -P <password> -I -Q "
    create statistics [DateId] on [DimDate2] ([DateId]);
    create statistics [CalendarQuarter] on [DimDate2] ([CalendarQuarter]);
    create statistics [FiscalQuarter] on [DimDate2] ([FiscalQuarter]);
"

从 SQL 数据仓库导出数据

本教程基于 Azure SQL 数据仓库中的某个表创建数据文件。 它会导出在上一部分中导入的数据。 结果将保存到名为 DimDate2_export.txt 的文件中。

步骤 1:导出数据

在 bcp 实用程序中,可以使用以下命令来连接并导出数据(相应地替换其中的值):

bcp DimDate2 out C:\Temp\DimDate2_export.txt -S <Server Name> -d <Database Name> -U <Username> -P <password> -q -c -t ','

可以通过打开新文件来验证是否已正确导出数据。 该文件中的数据应与以下文本匹配:

20150301,1,3
20150501,2,4
20151001,4,2
20150201,1,3
20151201,4,2
20150801,3,1
20150601,2,4
20151101,4,2
20150401,2,4
20150701,3,1
20150901,3,1
20150101,1,3

Note

由于分布式系统的性质,数据顺序在不同 SQL 数据仓库数据库之间可能不同。 另一种做法是使用 bcp 的 queryout 函数来编写查询提取,而不是导出整个表。

后续步骤

若要设计加载过程,请参阅将数据加载到 Azure SQL 数据仓库中的最佳做法