注释
本文重点介绍来自 CI/CD 和 ALM(应用程序生命周期管理)解决方案体系结构的解决方案体系结构,这些体系结构 依赖于 公共参数模式功能 ,仅适用于支持 CI/CD 的数据流 Gen2。
Fabric Dataflow Gen2 中的参数允许你定义可重用输入,这些输入可塑造数据流的设计方式,并且借助 公共参数模式 ,这些输入可以通过管道或 API 在运行时设置。 它使单个数据流具有高度灵活性和通用性,因为只需传递不同的值,即可在多个方案中重复使用相同的逻辑,从而启用动态自动化工作流,而无需重写或复制转换。
本教程将引导你通过一个示例,向你展示如何:
- 参数化源:将 Lakehouse 与 WideWorldImporters 示例数据集一起用作源
- 参数化逻辑:使用贯穿整个数据流体验中可用的输入控件
- 参数化目标:将仓库用作目标
- 使用参数值提交运行请求:通过 Fabric 管道内的数据流活动体验传递参数值
注释
本文中展示的概念对于 Dataflow Gen2 是通用的,并且还适用于除此处所示以外的其他源和目标。
情景
此方案中使用的数据流很简单,但描述的核心原则适用于所有类型的数据流。 它从存储在 Lakehouse 中的 Wide World Importers 示例数据集连接到名为dimension_city的表。 它会筛选 SalesTerritory 列等于 "Southeast" 的行,并将结果加载到仓库中的一个名为 City 的新表中。 所有组件(Lakehouse、Warehouse 和数据流)都位于同一工作区中。 若要使数据流动态,请参数化源表、筛选器值和目标表。 这些更改允许数据流使用特定值而不是硬编码的值运行。
在继续之前,请通过转到“开始”选项卡,选择“选项”,在“参数”部分中勾选“启用参数以供发现和重写执行”的复选框,并允许数据流在执行期间接受参数,从而启用公共参数模式。
参数化源
使用任何 Fabric 连接器(如 Lakehouse、Warehouse 或 Fabric SQL)时,它们都遵循相同的导航结构并使用相同的输入格式。 在此方案中,任何连接器都不需要手动输入才能建立连接。 但是,每个工作区都显示它通过查询中的导航步骤连接到的工作区和项。 例如,第一个导航步骤包括查询连接到的 workspaceId。
目标是将编辑栏中的硬编码值替换为参数。 具体而言,需要为 WorkspaceId 创建一个参数,另一个参数用于 LakehouseId。 若要创建参数,请转到功能区中的 “开始 ”选项卡,选择“ 管理参数”,然后从下拉菜单中选择 “新建参数 ”。
创建参数时,请确保两者都标记为 必需 ,并设置为 文本 类型。 对于当前值,请使用与特定环境中的相应值匹配的值。
创建这两个参数后,可以更新查询脚本以使用它们,而不是硬编码的值。 这涉及到将公式栏中的原始值手动替换为对工作区 ID 和 Lakehouse ID 参数的引用。 原始查询脚本如下所示:
let
Source = Lakehouse.Contents([]),
#"Navigation 1" = Source{[workspaceId = "8b325b2b-ad69-4103-93ae-d6880d9f87c6"]}[Data],
#"Navigation 2" = #"Navigation 1"{[lakehouseId = "2455f240-7345-4c8b-8524-c1abbf107d07"]}[Data],
#"Navigation 3" = #"Navigation 2"{[Id = "dimension_city", ItemKind = "Table"]}[Data],
#"Filtered rows" = Table.SelectRows(#"Navigation 3", each ([SalesTerritory] = "Southeast")),
#"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"ValidFrom", "ValidTo", "LineageKey"})
in
#"Removed columns"
更新导航步骤中的引用后,新的更新脚本可能如下所示:
let
Source = Lakehouse.Contents([]),
#"Navigation 1" = Source{[workspaceId = WorkspaceId]}[Data],
#"Navigation 2" = #"Navigation 1"{[lakehouseId = LakehouseId]}[Data],
#"Navigation 3" = #"Navigation 2"{[Id = "dimension_city", ItemKind = "Table"]}[Data],
#"Filtered rows" = Table.SelectRows(#"Navigation 3", each ([SalesTerritory] = "Southeast")),
#"Removed columns" = Table.RemoveColumns(#"Filtered rows", {"ValidFrom", "ValidTo", "LineageKey"})
in
#"Removed columns"
你会注意到,在数据流编辑器中,它仍然正确显示数据预览。
参数化逻辑
现在源正在使用参数,接下来可以专注于参数化数据流的转换逻辑。 在此情境中,筛选器步骤是应用逻辑的地方,应该将目前已硬编码为东南的值替换为参数。 为此,请创建一个名为 Territory 的新参数,将其数据类型设置为 文本,将其 标记为不需要,并将其当前值设置为 Mideast。
鉴于筛选步骤是使用用户界面创建的,可以转到过滤行步骤,双击它以获取筛选步骤的设置对话框。 您可以通过输入小组件在此对话框中选择是否要使用参数而不是静态值。
选择“ 选择参数”选项后,下拉列表将显示与所需数据类型匹配的所有可用参数。 在此列表中,可以选择新建的 Territory 参数。
选择“确定”后,请注意,关系图视图已经创建了新创建的参数与正在使用的查询之间的链接。 不仅这样,数据预览现在还显示 中东 地区的信息。
参数化目标
注释
建议熟悉数据流 Gen2 中的数据目标的概念,以及如何从有关数据目标和托管设置的文章中创建其混合脚本
在此方案中参数化的最后一个组件是目标。 为此,请使用 数据目标查询功能的高级编辑 ,这样就可以使用 Power Query M 代码直接在数据流编辑器中修改目标查询脚本。
在开始之前,请创建一个名称为 WarehouseId 的参数。 请确保将仓库的相应 ID 用作当前值,根据需要设置,并将其设置为文本数据类型。
为数据目标查询启用高级编辑
若要直接在数据流编辑器中修改目标查询,首先需要启用高级编辑功能:
从功能区中的“开始”选项卡中选择“选项”。
在 “选项 ”对话框中,向下滚动到 “数据目标 ”部分。
选中“ 为数据目标查询启用高级编辑”复选框。
此时会显示一个警告对话框,说明修改目标查询可能会导致意外行为或破坏数据流。 仔细阅读警告,然后选择“ 确定 ”以确认。
选择 “确定 ”关闭“选项”对话框。
修改目标查询
启用高级编辑后,可以访问和修改数据目标的目标查询:
在 “查询 ”窗格中,找到显示已配置目标的数据目标部分。
右键单击名为 dimension_city的目标查询。
从上下文菜单中选择 “高级编辑器”。
目标查询如下所示:
let
Pattern = Fabric.Warehouse([HierarchicalNavigation = null, CreateNavigationProperties = false]),
Navigation_1 = Pattern{[workspaceId = "8b325b2b-ad69-4103-93ae-d6880d9f87c6"]}[Data],
Navigation_2 = Navigation_1{[warehouseId = "527ba9c1-4077-433f-a491-9ef370e9230a"]}[Data],
TableNavigation = Navigation_2{[Item = "City", Schema = "dbo"]}?[Data]?
in
TableNavigation
类似于 Lakehouse 源的脚本,这个用于目标的脚本具有同样的模式,其中 workspaceId 和 warehouseId 都被硬编码。 将这些固定值替换为参数的标识符,脚本如下所示:
let
Pattern = Fabric.Warehouse([HierarchicalNavigation = null, CreateNavigationProperties = false]),
Navigation_1 = Pattern{[workspaceId = WorkspaceId]}[Data],
Navigation_2 = Navigation_1{[warehouseId = WarehouseId]}[Data],
TableNavigation = Navigation_2{[Item = "City", Schema = "dbo"]}?[Data]?
in
TableNavigation
选择 “确定” 以在高级编辑器中保存更改。
重要
使用高级编辑修改目标查询后,用于更改该目标的标准 UI 不再有效。 必须继续在高级编辑器中对该目的地进行任何进一步修改。 有关详细信息,请参阅 数据目标查询的高级编辑。
可以通过查看已添加的数据目标和任何以前的参数引用来验证所有更改是否已到位。 这将完成数据流的所有参数化,现在可以通过传递参数值来运行数据流。
使用参数值运行请求
可以使用 Fabric REST API 发送包含该特定运行作的参数值的自定义有效负载的运行请求,还可以使用 REST API 发现数据流参数 并了解数据流所需的内容,以便触发运行。 在本教程中,你将使用在 Fabric 管道的数据流活动中找到的体验。 首先创建管道并将新的 数据流活动 添加到画布。 在活动的设置中,找到数据流所在的工作区,然后从下拉列表中选择数据流。
可以展开数据流参数部分以显示数据流中的所有可用参数及其默认值。 可以替换此处的任何值,传递的值将用于定义应使用哪些源、逻辑和目标来评估数据流运行。 您还可以尝试新方案,方法是创建新仓库并更改用于评估的 WarehouseId,或者在需要传递 WorkspaceId 和其他参数以指向相应环境中的正确项的部署管道中使用此模式。