Dataflow Gen2 数据目标和托管设置
使用 Dataflow Gen2 清理并准备好数据后,你希望将数据放置在目标位置。 可以使用 Dataflow Gen2 中的数据目标功能来执行此操作。 借助此功能,可以从不同的目标中进行选择,例如 Azure SQL、Fabric 湖屋等等。 然后,Dataflow Gen2 会将数据写入目标,你可以从那里使用数据进行进一步分析和报告。
以下列表包含支持的数据目标。
- Azure SQL 数据库
- Azure 数据资源管理器 (Kusto)
- Fabric Lakehouse
- Fabric Warehouse
- Fabric KQL 数据库
- Fabric SQL 数据库
入口点
Dataflow Gen2 中的每个数据查询都可以有一个数据目标。 不支持函数和列表;只能将其应用于表格查询。 可以单独为每个查询指定数据目标,并且可以在数据流中使用多个不同的目标。
可以从三个主要的入口点来指定数据目标:
通过顶部功能区。
通过查询设置。
通过关系图视图。
连接到数据目标
连接到数据目标与连接到数据源类似。 连接可用于读取和写入数据,前提是你对数据源拥有适当的权限。 需要创建新的连接或选取现有连接,然后选择“下一步”。
创建新表或选取现有表
加载到数据目标时,可以创建新表或选取现有表。
创建一个新表
选择创建新表时,在 Dataflow Gen2 刷新期间,会在数据目标中创建一个新表。 如果将来通过手动进入目标来删除表,则数据流会在下一次数据流刷新期间重新创建该表。
默认情况下,表名与查询名称同名。 如果表名中存在目标不支持的无效字符,系统会自动调整表名。 例如,许多目标不支持空格或特殊字符。
接下来,必须选择目标容器。 如果已选择任何 Fabric 数据目标,可以使用导航器选择要将数据加载到的 Fabric 项目。 对于 Azure 目标,可以在创建连接期间指定数据库,也可以从导航器体验中选择数据库。
使用现有表
若要选择现有表,请使用导航器顶部的开关。 选择现有表时,需要使用导航器选取 Fabric 项目/数据库和表。
使用现有表时,在任何情况下都无法重新创建该表。 如果从数据目标手动删除表,则 Dataflow Gen2 不会在下次刷新时重新创建该表。
新表的托管设置
加载到新表中时,自动设置默认处于打开状态。 如果使用自动设置,Dataflow Gen2 会为你管理映射。 自动设置提供以下行为:
更新方法替换:每次数据流刷新时都会替换数据。 目标中的任何数据都将被删除。 目标中的数据将替换为数据流的输出数据。
托管映射:系统会为你管理映射。 如果需要更改数据/查询以添加另一列或更改数据类型,则重新发布数据流时,映射会自动针对此更改进行调整。 不必每次更改数据流时都进入数据目标体验,这样就可以在重新发布数据流时轻松更改架构。
删除并重新创建表:若要允许这些架构更改,请在每次数据流刷新时删除并重新创建表。 数据流刷新可能会导致删除以前添加到表的关系或度量值。
注意
目前,仅在湖屋和 Azure SQL 数据库作为数据目标时支持自动设置。
手动设置
通过取消切换“使用自动设置”,可以完全控制如何将数据加载到数据目标中。 可以通过更改源类型或排除数据目标中不需要的任何列来对列映射进行任何更改。
更新方法
大多数目标都支持将追加和替换作为更新方法。 但是,Fabric KQL 数据库和 Azure 数据资源管理器不支持将替换作为更新方法。
替换:每次刷新数据流时,都会从目标中删除数据并将其替换为数据流的输出数据。
追加:每次刷新数据流时,都会将数据流的输出数据追加到数据目标表中的现有数据。
发布时使用的架构选项
仅当更新方法为“替换”时,发布上的架构选项才适用。 追加数据时,无法更改架构。
动态架构:选择动态架构时,允许在重新发布数据流时在数据目标中进行架构更改。 由于你没有使用托管映射,因此在对查询进行任何更改时,仍然需要更新数据流目标流中的列映射。 刷新数据流后,将删除并重新创建表。 数据流刷新可能会导致删除以前添加到表的关系或度量值。
固定架构:选择固定架构时,将无法更改架构。 刷新数据流时,只会删除表中的行,并将其替换为数据流中的输出数据。 表上的任何关系或度量值将保持不变。 如果对数据流中的查询进行了任何更改,并且检测到查询架构与数据目标架构不匹配,则数据流发布将会失败。 如果不打算更改架构,并且不打算将关系或度量值添加到目标表,请使用此设置。
注意
将数据加载到仓库时,仅支持固定架构。
每个目标支持的数据源类型
每个存储位置支持的数据类型 | DataflowStagingLakehouse | Azure DB (SQL) 输出 | Azure 数据资源管理器输出 | Fabric 湖屋 (LH) 输出 | Fabric 仓库 (WH) 输出 | Fabric SQL 数据库 (SQL) 输出 |
---|---|---|---|---|---|---|
操作 | 否 | No | No | No | No | 否 |
任意 | 否 | No | No | No | No | 否 |
二进制 | 否 | No | No | No | No | 否 |
货币 | 是 | 是 | 是 | 是 | No | 是 |
时区 | 是 | 是 | 是 | 否 | No | 是 |
持续时间 | 否 | No | 是 | 否 | No | 否 |
函数 | 否 | No | No | No | No | 否 |
无 | 否 | No | No | No | No | 否 |
Null | 否 | No | No | No | No | 否 |
时间 | 是 | 是 | 否 | No | No | 是 |
类型 | 否 | No | No | No | No | 否 |
结构化(列表、记录、表) | 否 | No | No | No | No | 否 |
高级主题
在加载到目标之前使用暂存
为了增强查询处理的性能,可以在 Dataflows Gen2 中使用暂存,以使用 Fabric 计算来执行查询。
当对查询启用暂存(默认行为)时,数据将加载到暂存位置,该位置是只能由数据流本身访问的内部湖屋。
在某些情况下,将查询折叠到 SQL 分析终结点比在内存处理中更快,这时使用暂存位置可以提高性能。
将数据加载到湖屋或其他非仓库目的地时,我们默认会禁用暂存功能以提高性能。 将数据加载到数据目的地时,数据将直接写入数据目的地,而不使用暂存。 如果要为查询使用暂存,则可以再次启用。
要启用暂存,请右键单击查询,并通过选择“启用暂存”按钮来启用暂存。 然后,查询将变为蓝色。
将数据载入仓库
将数据加载到仓库时,在将数据写入到数据目标之前需要暂存。 此要求可改善性能。 目前,仅支持加载到与数据流相同的工作区。 确保为所有加载到仓库的查询启用暂存。
禁用暂存并选择 Warehouse 作为输出目标时,会收到一条警告,要求先启用暂存,然后才能配置数据目标。
如果已将仓库作为目标并尝试禁用暂存,则会显示警告。 可以移除作为目标的仓库,也可以关闭暂存操作。
清空湖屋数据目标
在 Microsoft Fabric 中使用湖屋作为 Dataflow Gen2 的目标时,执行定期维护以确保最佳性能和高效的存储管理至关重要。 一项基本维护任务是清空数据目标。 此过程有助于移除 Delta 表日志不再引用的旧文件,从而优化存储成本并维护数据的完整性。
为什么清空很重要
- 存储优化:随着时间的推移,Delta 表会累积不再需要的旧文件。 清空有助于清理这些文件,释放存储空间并降低成本。
- 性能提升:移除不必要的文件可以通过减少读取操作期间需要扫描的文件数来提高查询性能。
- 数据完整性:确保仅保留相关文件有助于维护数据的完整性,防止未提交文件可能导致读取器故障或表损坏的潜在问题。
如何清空数据目标
若要清空湖屋中的 Delta 表,请执行以下步骤:
- 导航到湖屋:从 Microsoft Fabric 帐户中,转到所需的湖屋。
- 访问表维护:在湖屋资源管理器中,右键单击要维护的表或使用省略号访问上下文菜单。
- 选择维护选项:选择“维护”菜单项,然后选择“清空”选项。
- 运行清空命令:设置保留阈值(默认值为 7 天),并通过选择“立即运行”来执行清空命令。
最佳做法
- 保留期:设置至少七天的保留间隔,以确保不会过早移除旧快照和未提交的文件,这可能会中断并发表读取器和编写器。
- 定期维护:将定期清空安排为数据维护例程的一部分,以使 Delta 表保持优化并为分析做好准备。
通过将清空纳入数据维护策略,可以确保湖屋目标对于数据流操作保持高效、经济高效且可靠。
有关湖屋中的表维护的更多详细信息,请参阅 Delta 表维护文档。
Nullable
在某些情况下,如果有可为 null 的列,Power Query 会将其检测为不可为 null,写入数据目标时,列类型不可为 null。 在刷新期间,会发生以下错误:
E104100 Couldn't refresh entity because of an issue with the mashup document MashupException.Error: DataFormat.Error: Error in replacing table's content with new data in a version: #{0}., InnerException: We can't insert null data into a non-nullable column., Underlying error: We can't insert null data into a non-nullable column. Details: Reason = DataFormat.Error;Message = We can't insert null data into a non-nullable column.; Message.Format = we can't insert null data into a non-nullable column.
若要强制实施可为 null 的列,可以尝试以下步骤:
从数据目标中删除表。
从数据流中删除数据目标。
转到数据流,使用以下 Power Query 代码更新数据类型:
Table.TransformColumnTypes( #"PREVIOUS STEP", { {"COLLUMNNAME1", type nullable text}, {"COLLUMNNAME2", type nullable Int64.Type} } )
添加数据目标。
数据类型转换和纵向扩展
在某些情况下,数据流中的数据类型与数据目标中支持的数据类型不同,下面是我们实施的一些默认转换,以确保您仍然能够在数据目标中获取数据:
目标 | 数据流数据类型 | 目标数据类型 |
---|---|---|
Fabric Warehouse | Int8.Type | Int16.Type |