将数据引入仓库
适用于:✅Microsoft Fabric 中的仓库
Microsoft Fabric 中的仓库提供内置的数据引入工具,允许用户使用无代码或代码丰富的体验将数据大规模引入仓库。
数据引入选项
可以使用下列选项之一将数据引入仓库:
- COPY (Transact-SQL):COPY 语句提供灵活、高吞吐量地从外部 Azure 存储帐户引入数据。 可以在 Transact-SQL 代码中使用 COPY 语句作为现有 ETL/ELT 逻辑的一部分。
- 数据管道:管道为数据引入提供无代码或低代码体验。 使用管道,可以协调可靠的工作流,实现完整的提取、转换和加载 (ETL) 体验,其中包括有助于准备目标环境、运行自定义 Transact-SQL 语句、执行查找或将数据从源复制到目标的活动。
- 数据流:数据流是管道的替代方法,它支持使用无代码体验轻松准备、清理和转换数据。
- 跨仓库引入:也可以从工作区源引入数据。 如果需要创建包含不同表子集的新表,或者在仓库和湖屋中联接了不同的表,则可能需要此方案。 对于跨仓库引入,除了上述选项外,诸如 INSERT...SELECT、SELECT INTO 或 CREATE TABLE AS SELECT (CTAS) 等 Transact-SQL 功能在同一工作区中跨仓库工作。
确定要使用的数据引入工具
若要确定要使用的数据引入选项,可以使用以下条件:
- 将 COPY (Transact-SQL) 语句用于代码丰富的数据引入操作、最高的数据引入吞吐量,或者需要将数据引入添加为 Transact-SQL 逻辑一部分的情况。 有关语法,请参阅 COPY INTO (Transact-SQL)。
- 将数据管道用于无代码或低代码、可靠的数据引入工作流,这些工作流按计划重复运行或涉及大量数据。 有关详细信息,请参阅使用数据管道引入数据。
- 使用数据流实现无代码体验,允许在引入数据之前对源数据进行自定义转换。 这些转换包括(但不限于)更改数据类型、添加或删除列或者使用函数生成计算列。 有关详细信息,请参阅数据流。
- 使用跨仓库引入实现代码丰富的体验,以在同一工作区中创建包含源数据的新表。 有关详细信息,请参阅使用 Transact-SQL 引入数据和编写跨数据库查询。
注意
仓库中的 COPY 语句仅支持 Azure 存储帐户上的数据源,目前不支持 OneLake 源。
支持的数据格式和数据源
Microsoft Fabric 中仓库的数据引入提供了大量可供使用的数据格式和数据源。 概述的每个选项都包含其自己的受支持数据连接器类型和数据格式列表。
对于跨仓库引入,数据源必须位于同一 Microsoft Fabric 工作区中。 可以使用源数据的三部分命名来执行查询。
例如,假设工作区中有两个分别名为 Inventory 和 Sales 的仓库。 如下查询在 Inventory 仓库中创建一个新表,其中包含 Inventory 仓库中表的内容,并与 Sales 仓库中的表联接在一起:
CREATE TABLE Inventory.dbo.RegionalSalesOrders
AS
SELECT s.SalesOrders, i.ProductName
FROM Sales.dbo.SalesOrders s
JOIN Inventory.dbo.Products i
WHERE s.ProductID = i.ProductID
AND s.Region = 'West region'
COPY (Transact-SQL) 语句当前支持 PARQUET 和 CSV 文件格式。 对于数据源,当前支持 Azure Data Lake Storage (ADLS) Gen2 和 Azure Blob Storage。
数据管道和数据流支持各种数据源和数据格式。 有关详细信息,请参阅数据管道和数据流。
最佳实践
Microsoft Fabric 的仓库中的 COPY 命令功能使用简单、灵活且快速的接口进行 SQL 工作负载的高吞吐量数据引入。 在当前版本中,我们仅支持从外部存储帐户加载数据。
还可以使用 TSQL 创建新表并将其插入其中,然后更新和删除数据行。 可以使用跨数据库查询从 Microsoft Fabric 工作区中的任何数据库插入数据。 如果要将数据从湖屋引入仓库,可以使用跨数据库查询执行此操作。 例如:
INSERT INTO MyWarehouseTable
SELECT * FROM MyLakehouse.dbo.MyLakehouseTable;
- 避免使用单一实例 INSERT 语句引入数据,因为这样会导致查询和更新性能不佳。 如果连续使用单一实例 INSERT 语句进行数据引入,我们建议使用 CREATE TABLE AS SELECT (CTAS) 或 INSERT...SELECT 模式创建新表,删除原始表,然后使用 CREATE TABLE AS SELECT (CTAS) 从创建的表再次创建表。
- 删除现有表会影响语义模型,包括你可能对语义模型所做的任何自定义度量或自定义。
- 处理文件的外部数据时,建议文件的大小至少为 4 MB。
- 对于大型压缩 CSV 文件,请考虑将文件拆分为多个文件。
- Azure Data Lake Storage (ADLS) Gen2 提供的性能优于Azure Blob 存储(旧版)。 尽可能考虑使用 ADLS Gen2 帐户。
- 对于频繁运行的管道,请考虑将 Azure 存储帐户与可以同时访问相同文件的其他服务隔离开来。
- 显式事务允许将多个数据更改组合在一起,使它们仅在事务完全提交而读取一个或多个表时才可见。 如果任何更改失败,还可以回滚事务。
- 如果 SELECT 位于事务中,并且前面有数据插入,则回滚后自动生成的统计信息可能不准确。 不准确的统计信息可能导致查询计划和执行时间未优化。 如果在大型 INSERT 之后使用 SELECT 回滚事务,则请更新 SELECT 中提到的列的统计信息。
注意
无论你如何将数据引入仓库,都会使用 V-Order 写入优化方法对数据引入任务生成的 parquet 文件进行优化。 V-Order 将优化 parquet 文件,以便在 Microsoft Fabric 计算引擎(例如 Power BI、SQL、Spark 等)下实现瞬时读取。 这种优化通常能够使仓库查询受益,使其读取速度更快,同时仍然确保 parquet 文件完全符合其开源规范。 与 Fabric 数据工程不同,V-Order 是 Fabric 数据仓库中的一项全局设置,无法将其禁用。 有关 V 顺序的详细信息,请参阅 了解和管理适用于仓库的 V 顺序。