注释
本文重点介绍来自 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 中的数据目标的概念,以及如何从有关数据目标和托管设置的文章中创建其混合脚本
在此方案中修改的最后一个组件是目标。 虽然可以在数据流编辑器中找到有关数据目标的信息,但若要修改数据流的此部分,需要使用 Git 或 REST API。
本教程介绍如何通过 Git 进行更改。 在通过 git 进行更改之前,请确保:
- 为 WarehouseId 变量创建查询:按照前面部分所述的相同过程创建新的空白查询并替换源步骤的公式:
Variable.ValueOrDefault("$(/**/My Library/WarehouseId)", "Your Warehouse ID")
注释
请确保将函数的第二个参数 “Your Warehouse ID”字符串替换为环境中自己的相应值并保存查询。
重要
请确保所有包含变量的查询都已禁用暂存功能。
- 保存数据流:使用功能区主选项卡中的“保存”按钮。
保存数据流后,请确保将更改提交到 Git 存储库,然后前往存储库,查看数据流的 mashup.pq 文件。 查看 mashup.pq 文件时,查找与数据目标关联的查询。 在此情境中,该查询的名称为dimension_city。 此时会看到此查询名称上方的记录属性:
[DataDestinations = {[Definition = [Kind = "Reference", QueryName = "dimension_city_DataDestination", IsNewTarget = true], Settings = [Kind = "Manual", AllowCreation = true, ColumnSettings = [Mappings = {[SourceColumnName = "CityKey", DestinationColumnName = "CityKey"], [SourceColumnName = "WWICityID", DestinationColumnName = "WWICityID"], [SourceColumnName = "City", DestinationColumnName = "City"], [SourceColumnName = "StateProvince", DestinationColumnName = "StateProvince"], [SourceColumnName = "Country", DestinationColumnName = "Country"], [SourceColumnName = "Continent", DestinationColumnName = "Continent"], [SourceColumnName = "SalesTerritory", DestinationColumnName = "SalesTerritory"], [SourceColumnName = "Region", DestinationColumnName = "Region"], [SourceColumnName = "Subregion", DestinationColumnName = "Subregion"], [SourceColumnName = "Location", DestinationColumnName = "Location"], [SourceColumnName = "LatestRecordedPopulation", DestinationColumnName = "LatestRecordedPopulation"]}], DynamicSchema = false, UpdateMethod = [Kind = "Replace"], TypeSettings = [Kind = "Table"]]]}]
shared dimension_city = let
此属性记录具有名为 QueryName 的字段,该字段包含具有与此查询关联的所有数据目标逻辑的查询的名称。 此查询如下所示:
shared dimension_city_DataDestination = 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。 将这些固定值替换为创建的查询的标识符,脚本应如下所示:
shared dimension_city_DataDestination = 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
现在,可以使用数据流中的更改通过工作区中的源代码管理功能提交此更改并更新数据流。
现在可以运行数据流,该数据流使用变量库中的值。