注释
本文重点介绍来自 CI/CD 和 ALM(应用程序生命周期管理)解决方案体系结构的解决方案体系结构,这些体系结构 依赖于 变量库集成 ,仅适用于支持 CI/CD 的数据流 Gen2。
Dataflow Gen2 中的 Fabric 变量库支持跨环境进行集中的可重用配置管理。 通过直接在数据流脚本中引用变量,无需硬编码值即可动态调整行为,这对于 CI/CD 工作流来说是理想的选择。 此集成允许在运行时注入特定于工作区的值(如 Lakehouse 或 Workspace ID),使数据流更具适应性和可维护性,从而简化了跨阶段的部署。
本教程指导你完成在数据流中使用变量引用的示例解决方案,并演示如何:
- 设置变量:使用 Fabric 变量库及其不同的数据类型
- 变量驱动源:使用 Lakehouse 和 WideWorldImpoters 示例数据集作为数据源
- 变量驱动逻辑:使用在整个数据流体验过程中可用的输入部件
- 变量驱动目标:使用仓库作为目标
注释
本文中展示的概念对于 Dataflow Gen2 是通用的,并且还适用于除此处所示以外的其他源和目标。
情景
此方案中使用的数据流很简单,但描述的核心原则适用于所有类型的数据流。 它从存储在 Lakehouse 中的 Wide World Importers 示例数据集连接到名为dimension_city的表。 它会筛选 SalesTerritory 列等于 "Southeast" 的行,并将结果加载到仓库中的一个名为 City 的新表中。 所有组件(Lakehouse、Warehouse 和数据流)都位于同一工作区中。 若要使数据流动态,请使用变量来驱动源表、筛选器值和目标表。 这些更改允许数据流使用存储在 Fabric 变量库中的值而不是硬编码的值运行。
设置变量
注释
请确保为组织或安全组启用了 Fabric 变量库。 详细了解 如何开始使用变量库。
建议的最佳做法是,在创建解决方案之前先构思设计,并了解您的数据流中哪些组件是从变量库动态获取的。 虽然可以在工作区中创建多个库,但此示例使用名为 “我的库 ”的单个库,该库包含数据流 Gen2 使用的变量:
| 变量名称 | 类型 | 目的 |
|---|---|---|
| WorkspaceId | Guid | 用于Dataflow中的数据源和目标端脚本 |
| LakehouseId | Guid | 确定被用作源的湖仓的ID |
| WarehouseId | Guid | 确定用作目标的仓库的 ID |
| 领土 | String | 设置用于驱动数据流处理筛选逻辑的值 |
请确保设置对应于你自己的环境的默认值,然后保存变量库。
变量驱动源
使用任何 Fabric 连接器(如 Lakehouse、Warehouse 或 Fabric SQL)时,它们都遵循相同的导航结构并使用相同的输入格式。 在此方案中,任何连接器都不需要手动输入才能建立连接。 但是,每个工作区都显示它通过查询中的导航步骤连接到的工作区和项。 例如,第一个导航步骤包括查询连接到的 workspaceId。
目标是将编辑栏中的硬编码值替换为变量。 具体而言,你想要使用变量 WorkspaceId 和 LakehouseId 来驱动此逻辑。 首先,需要将这些变量引入数据流 Gen2。 建议的方法是为每个不同的变量创建查询,以集中和轻松管理计划使用的任何变量。 为此,请通过进入功能区中的 “获取数据 ”条目并选择下拉菜单中的“空白查询”选项来创建空白查询。
选择此选项将带来一个新对话框,可在其中查看创建的空白查询。 可以选择“确定”以添加新的空白查询。
创建查询并在数据流中显示后,将其重命名为 WorkspaceId,并将源步骤中的公式替换为:
Variable.ValueOrDefault("$(/**/My Library/WorkspaceId)", "Your Workspace ID")
此脚本本质上是能够确定要提取的库和变量的脚本。 函数的Variable.ValueOrDefault第二个参数确定在无法提取变量时要提供的值。
注释
请确保将函数的第二个参数 “工作区 ID”字符串替换为环境中自己的相应值并保存查询。
对 LakehouseId 变量重复此过程,并创建与变量同名的查询,但对 Source 步骤使用以下公式:
Variable.ValueOrDefault("$(/**/My Library/LakehouseId)", "Your Lakehouse ID")
注释
请确保将函数的第二个参数 “Your Lakehouse ID”字符串替换为环境中自己的相应值并保存查询。
创建这两个查询后,可以更新查询脚本以使用它们,而不是硬编码的值。 这涉及将公式栏中的原始值手动替换为对 WorkspaceId 和 LakehouseId 查询的引用。 原始查询脚本如下所示:
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"
你会注意到,它在数据流编辑器中仍然能够正确评估数据预览,并且直接在关系图视图中创建了所有相关查询之间的引用。
变量驱动逻辑
现在源正在使用变量,接下来可以专注于修改数据流的转换逻辑。 在此场景中,筛选步骤是应用逻辑的位置,而当前硬编码为东南的值应替换为引用变量的查询。 为此,请重复创建一个新的空白查询并重新调整其 Source 步骤的公式,以保存 Territory 的变量,并将查询的名称更改为变量名称。 使用以下脚本:
Variable.ValueOrDefault("$(/**/My Library/Territory)", "Mideast")
鉴于筛选步骤是使用用户界面创建的,可以转到过滤行步骤,双击它以获取筛选步骤的设置对话框。 此对话框允许您通过输入部件选择是否使用查询而不是静态值。
选择“ 选择查询”选项后,将显示下拉列表以显示可从中选择的所有查询。 在此列表中,可以选择新建的 “区域” 查询。
选择“确定”后,请注意,关系图视图已创建“区域”查询与正在使用的查询之间的链接。 不仅这样,数据预览现在还显示 中东 地区的信息。
由变量驱动的目标
注释
建议熟悉数据流 Gen2 中的数据目标的概念,以及如何从有关数据目标和托管设置的文章中创建其混合脚本
在此方案中修改的最后一个组件是目标。 为此,请使用 数据目标查询功能的高级编辑 ,这样就可以使用 Power Query M 代码直接在数据流编辑器中修改目标查询脚本。
在开始之前,请为 WarehouseId 变量创建查询。 按照前面部分中所述的相同过程创建新的空白查询并替换源步骤的公式:
Variable.ValueOrDefault("$(/**/My Library/WarehouseId)", "Your Warehouse ID")
注释
请确保将函数的第二个参数 “Your Warehouse 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 不再有效。 必须继续在高级编辑器中对该目的地进行任何进一步修改。 有关详细信息,请参阅 数据目标查询的高级编辑。
现在可以运行数据流,该数据流使用变量库中的值。