使用 COPY 语句将数据引入仓库

适用于:✅Microsoft Fabric 中的仓库

COPY 语句是将数据引入仓库表的主要方法。 COPY 从外部 Azure 存储帐户执行高吞吐量数据引入,可以灵活地配置源文件格式选项、存储拒绝行的位置、跳过标头行和其他选项。

本教程演示了使用 T-SQL COPY 语句为仓库表进引入数据的示例。 它使用来自 Azure 开放数据集的必应新冠肺炎示例数据。 有关此数据的详细信息(包括其架构和使用权限),请参阅必应新冠肺炎

注意

若要详细了解 T-SQL COPY 语句(包括更多示例和完整语法),请参阅 COPY (Transact-SQL)

创建表

在使用 COPY 语句之前,需要创建目标表。 若要创建此示例的目标表,请使用以下步骤:

  1. 在 Microsoft Fabric 工作区中,找到并打开仓库。

  2. 切换到“开始”选项卡,然后选择“新建 SQL 查询”。

    用户工作区顶部的屏幕截图,显示“新建 SQL 查询”按钮。

  3. 若要创建用作本教程中目标的表,请运行以下代码:

    CREATE TABLE [dbo].[bing_covid-19_data]
    (
        [id] [int] NULL,
        [updated] [date] NULL,
        [confirmed] [int] NULL,
        [confirmed_change] [int] NULL,
        [deaths] [int] NULL,
        [deaths_change] [int] NULL,
        [recovered] [int] NULL,
        [recovered_change] [int] NULL,
        [latitude] [float] NULL,
        [longitude] [float] NULL,
        [iso2] [varchar](8000) NULL,
        [iso3] [varchar](8000) NULL,
        [country_region] [varchar](8000) NULL,
        [admin_region_1] [varchar](8000) NULL,
        [iso_subdivision] [varchar](8000) NULL,
        [admin_region_2] [varchar](8000) NULL,
        [load_time] [datetime2](6) NULL
    );
    

使用 COPY 语句引入 Parquet 数据

在第一个示例中,我们使用 Parquet 源加载数据。 由于此数据公开可用且不需要身份验证,因此可以通过指定源和目标轻松复制此数据。 不需要身份验证详细信息。 只需指定 FILE_TYPE 参数。

使用以下代码对 Parquet 源运行 COPY 语句:

COPY INTO [dbo].[bing_covid-19_data]
FROM 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
WITH (
    FILE_TYPE = 'PARQUET'
);

使用 COPY 语句引入 CSV 数据并跳过标题行

逗号分隔值 (CSV) 文件通常有一个标题行,该行提供表示 CSV 文件中表的列名。 COPY 语句可以从 CSV 文件复制数据,并跳过源文件标题中的一行或多行。

如果运行前面的示例以从 Parquet 加载数据,请考虑从表中删除所有数据:

DELETE FROM [dbo].[bing_covid-19_data];

若要从跳过标题行的 CSV 文件加载数据,请使用以下代码:

COPY INTO [dbo].[bing_covid-19_data]
FROM 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv'
WITH (
    FILE_TYPE = 'CSV', 
    FIRSTROW = 2
);

检查结果

COPY 语句通过将 4,766,736 行引入新表中来完成。 可以通过运行返回表中总行数的查询来确认操作是否成功运行:

SELECT COUNT(*) FROM [dbo].[bing_covid-19_data];

如果你运行了两个示例而在两次运行之间不删除行,则会看到此查询的结果中的行数是原来的两倍。 虽然在这种情况下,这适用于数据引入,但如果要进一步试验此数据,请考虑删除所有行并仅引入数据一次。