数据流 Gen2 中的增量刷新(预览版)

本文介绍数据流 Gen2 中用于 Microsoft Fabric 数据工厂的增量数据刷新。 使用数据流进行数据引入和转换时,在某些情况下,你特别需要仅刷新新的或更新的数据,尤其是在数据继续增长时。 增量刷新功能通过允许你减少刷新时间、通过避免长时间运行的操作来提高可靠性,并最大程度地减少资源使用量,从而解决了这一需求。

先决条件

若要在数据流 Gen2 中使用增量刷新,需要满足以下先决条件:

  • 必须具有 Fabric 容量。
  • 数据源支持 折叠 (建议),并且需要包含可用于筛选数据的 Date/DateTime 列。
  • 应具有支持增量刷新的数据目标。 有关详细信息,请转到 目标支持
  • 在开始之前,请确保查看增量刷新的限制。 有关详细信息,请转到 “限制”。

目标支持

增量刷新支持以下数据目标:

  • Fabric Warehouse
  • Azure SQL 数据库
  • Azure Synapse Analytics

其他目标(如 Lakehouse)可与增量刷新结合使用,方法是使用引用暂存数据的第二个查询来更新数据目标。 这样,你仍然可以使用增量刷新来减少需要处理和从源系统检索的数据量。 但需要从暂存数据完全刷新到数据目标。

如何使用增量刷新

  1. 创建新的数据流 Gen2 或打开现有的数据流 Gen2。

  2. 在数据流编辑器中,创建一个新查询,用于检索要以增量方式刷新的数据。

  3. 检查数据预览以确保查询返回包含可用于筛选数据的 DateTime、Date 或 DateTimeZone 列的数据。

  4. 确保查询完全折叠,这意味着查询完全推送到源系统。 如果查询未完全折叠,则需要修改查询,使其完全折叠。 可以通过检查查询编辑器中的查询步骤来确保查询完全折叠。

    数据流 Gen2 中的查询编辑器的屏幕截图。

  5. 右键单击查询并选择 增量刷新

    数据流 Gen2 中下拉菜单的屏幕截图。

  6. 提供增量刷新所需的设置。

    增量刷新设置的屏幕截图。

    1. 选择要筛选依据的 DateTime 列。
    2. 从过去提取数据。
    3. 存储桶大小。
    4. 仅当此列中的最大值发生更改时,才提取新数据。
  7. 根据需要配置高级设置。

    1. 需要增量刷新查询才能完全折叠。
  8. 选择“确定”以保存设置。

  9. 如果需要,现在可以为查询设置数据目标。 请确保在第一次增量刷新之前执行此操作,否则数据目标仅包含自上次刷新以来增量更改的数据。

  10. 发布 Dataflow Gen2。

配置增量刷新后,数据流会根据所提供的设置以增量方式刷新数据。 数据流仅检索自上次刷新以来更改的数据。 因此,数据流运行速度更快,消耗的资源更少。

增量刷新在后台的工作原理

增量刷新的工作原理是将数据划分为基于 DateTime 列的存储桶。 每个存储桶都包含自上次刷新以来已更改的数据。 数据流通过检查指定的列中的最大值来了解更改的内容。 如果该存储桶的最大值已更改,则数据流将检索整个存储桶并替换目标中的数据。 如果最大值未更改,则数据流不会检索任何数据。 以下部分简要概述了增量刷新如何分步工作。

第一步:评估更改

数据流运行时,首先评估数据源中的更改。 它通过将 DateTime 列中的最大值与上一次刷新中的最大值进行比较来计算此计算。 如果最大值已更改或首次刷新,数据流会将存储桶标记为已更改,并列出它进行处理。 如果未更改最大值,数据流将跳过存储桶,并且不会处理它。

第二步:检索数据

现在,数据流已准备好检索数据。 它检索已更改的每个存储桶的数据。 数据流并行执行此检索以提高性能。 数据流从源系统检索数据,并将其加载到暂存区域。 数据流仅检索存储桶范围内的数据。 换句话说,数据流仅检索自上次刷新以来更改的数据。

最后一步:替换数据目标中的数据

数据流将目标中的数据替换为新数据。 数据流使用 replace 该方法替换目标中的数据。 也就是说,数据流首先删除该存储桶的目标中的数据,然后插入新数据。 数据流不会影响存储桶范围之外的数据。 因此,如果目标中的数据早于第一个存储桶,增量刷新不会以任何方式影响此数据。

说明的增量刷新设置

若要配置增量刷新,需要指定以下设置。

增量刷新设置的屏幕截图。

常规设置

常规设置是必需的,并指定增量刷新的基本配置。

选择要筛选依据的 DateTime 列

此设置是必需的,并指定数据流用于筛选数据的列。 此列应为 DateTime、Date 或 DateTimeZone 列。 数据流使用此列筛选数据,并仅检索自上次刷新以来更改的数据。

从过去提取数据

此设置是必需的,并指定数据流应提取数据的时间。 此设置用于检索初始数据加载。 数据流从指定时间范围内源系统检索所有数据。 可能的值为:

  • x 天
  • x 周
  • x 月
  • x 季度
  • x 年

例如,如果指定 1 个月,数据流将从源系统检索上个月内的所有新数据。

存储桶大小

此设置是必需的,并指定数据流用于筛选数据的存储桶的大小。 数据流将数据划分为基于 DateTime 列的存储桶。 每个存储桶都包含自上次刷新以来已更改的数据。 存储桶大小确定每次迭代中处理的数据量。 较小的存储桶大小意味着数据流在每次迭代中处理的数据较少,但也意味着处理所有数据需要更多的迭代。 更大的存储桶大小意味着数据流在每个迭代中处理更多数据,但也意味着处理所有数据所需的迭代更少。

仅当此列中的最大值更改时提取新数据

此设置是必需的,并指定数据流用于确定是否更改数据的列。 数据流将此列中的最大值与上一次刷新中的最大值进行比较。 如果更改了最大值,数据流将检索自上次刷新以来更改的数据。 如果未更改最大值,则数据流不会检索任何数据。

仅提取已结束时间段的数据

此设置是可选的,指定数据流是否应仅提取已结束时间段的数据。 如果启用此设置,则数据流只会提取结束的时间段的数据。 因此,数据流仅提取已完成且不包含任何未来数据的时间段的数据。 如果禁用此设置,数据流将提取所有时间段的数据,包括未完成的时间段以及包含将来的数据。

例如,如果你有一个 DateTime 列,其中包含事务的日期,并且只想刷新完成月份,则可以结合存储桶大小 month启用此设置。 因此,数据流仅提取完整月份的数据,并且不会提取不完整月份的数据。

高级设置

某些设置被视为高级设置,大多数方案不需要设置。

需要增量刷新查询才能完全折叠

此设置是可选的,指定用于增量刷新的查询是否必须完全折叠。 如果启用此设置,则用于增量刷新的查询必须完全折叠。 换句话说,必须将查询完全推送到源系统。 如果禁用此设置,则用于增量刷新的查询不需要完全折叠。 在这种情况下,可以将查询部分推送到源系统。 强烈建议启用此设置以提高性能,以避免检索不必要的和未筛选的数据。

限制

仅支持基于 SQL 的数据目标

目前,仅支持基于 SQL 的数据目标进行增量刷新。 因此,只能使用 Fabric Warehouse、Azure SQL 数据库 或 Azure Synapse Analytics 作为增量刷新的数据目标。 此限制的原因是,这些数据目标支持增量刷新所需的基于 SQL 的操作。 我们使用“删除”和“插入”操作替换数据目标中的数据,不能在其他数据目标上并行执行。

数据目标必须设置为固定架构

数据目标必须设置为固定架构,这意味着数据目标中的表架构必须固定且无法更改。 如果数据目标中的表的架构设置为动态架构,则需要在配置增量刷新之前将其更改为固定架构。

数据目标中唯一受支持的更新方法是 replace

数据目标 replace中唯一支持的更新方法是,这意味着数据流会将数据目标中每个存储桶的数据替换为新数据。 但是,超出存储桶范围的数据不会受到影响。 因此,如果数据目标中的数据早于第一个存储桶,增量刷新不会以任何方式影响此数据。

单个查询的最大存储桶数为 50,整个数据流的最大存储桶数为 150

数据流支持的每个查询的最大存储桶数为 50。 如果存储桶数超过 50 个,则需要增加存储桶大小或减少存储桶范围以降低存储桶数。 对于整个数据流,最大存储桶数为 150。 如果数据流中有超过 150 个存储桶,则需要减少增量刷新查询的数量或增加存储桶大小以减少存储桶数。

数据流 Gen1 和数据流 Gen2 中的增量刷新之间的差异

在数据流 Gen1 和数据流 Gen2 之间,增量刷新的工作原理有一些差异。 以下列表说明了 Dataflow Gen1 和 Dataflow Gen2 中的增量刷新之间的主要差异。

  • 增量刷新现在是数据流 Gen2 中的一流功能。 在数据流 Gen1 中,必须在发布数据流后配置增量刷新。 在数据流 Gen2 中,增量刷新现在是一类功能,可以直接在数据流编辑器中配置。 使用此功能可以更轻松地配置增量刷新并降低错误的风险。
  • 在数据流 Gen1 中,必须在配置增量刷新时指定历史数据范围。 在数据流 Gen2 中,无需指定历史数据范围。 数据流不会从存储桶范围之外的目标中删除任何数据。 因此,如果目标中的数据早于第一个存储桶,增量刷新不会以任何方式影响此数据。
  • 在 Dataflow Gen1 中,必须在配置增量刷新时指定增量刷新的参数。 在数据流 Gen2 中,无需指定增量刷新的参数。 数据流自动将筛选器和参数添加为查询中的最后一步。 因此,无需手动指定增量刷新的参数。

常见问题解答

我收到了一条警告,指出我使用了同一列来检测更改和筛选。 这是什么意思呢?

如果收到警告,指出使用了同一列来检测更改和筛选,这意味着你为检测更改指定的列也用于筛选数据。 不建议使用此用法,因为它可能会导致意外结果。 相反,建议使用不同的列来检测更改和筛选数据。 如果数据在存储桶之间移动,数据流可能无法正确检测更改,并且可能会在目标中创建重复的数据。 可以使用其他列检测更改和筛选数据来解决此警告。 或者,如果确定数据不会在指定的列的刷新之间更改,则可以忽略该警告。

我想对不支持的数据目标使用增量刷新。 我该怎么办?

如果要对不支持的数据目标使用增量刷新,可以在查询上启用增量刷新,并使用引用暂存数据的第二个查询来更新数据目标。 这样,仍然可以使用增量刷新来减少需要从源系统处理和检索的数据量,但需要从暂存数据完全刷新到数据目标。 确保正确设置窗口和存储桶大小,因为我们不保证暂存中的数据保留在存储桶范围之外。

如何实现知道我的查询是否启用了增量刷新?

可以通过在数据流编辑器中检查查询旁边的图标来查看查询是否启用了增量刷新。 如果图标包含蓝色三角形,则会启用增量刷新。 如果该图标不包含蓝色三角形,则不会启用增量刷新。

当我使用增量刷新时,源会收到过多的请求。 我该怎么办?

我们添加了一个设置,用于设置并行查询评估的最大数目。 可以在数据流的全局设置中找到此设置。 通过将此值设置为较低的数字,可以减少发送到源系统的请求数。 此设置有助于减少并发请求数并提高源系统的性能。 若要设置并行查询执行的最大数目,请转到数据流的全局设置,导航到 “缩放 ”选项卡,并设置并行查询评估的最大数目。 建议不要启用此限制,除非遇到源系统问题。

数据流并发控制设置的屏幕截图。

后续步骤