Fabric Data Warehouse的预部署和部署后脚本(预览版)

适用于:Microsoft Fabric 中的✅ 仓库

Important

此功能目前为预览版

预部署和部署后脚本允许在部署Fabric中部署仓库时运行自定义 Transact-SQL 命令。 使用部署前脚本和部署后脚本清理数据、种子引用数据,或应用未在仓库架构中表示的 SQL 安全性。

在Fabric Data Warehouse中,部署前或部署后脚本是共享 SQL 查询。 可以在 SQL 数据库项目中创作这些脚本,并从Fabric门户指定这些脚本。 该指定信息以仓库级元数据的形式存储,并作为仓库的 .sqlproj 文件的一部分提交到源代码控制中,因此可在 Git 和部署流水线中完整流转,而无需手动重新应用。

本文介绍了什么是预部署和部署后脚本、如何在 Fabric 门户中配置脚本、它们如何与源代码管理和部署管道的行为,以及如何在Visual Studio Code和SQL Server Management Studio(SSMS)中创作它们。

Important

在发布之前,请始终查看部署脚本和设置。 首先在开发和测试环境中进行测试,以防止意外数据丢失。

什么是部署前脚本和部署后脚本?

当你将工作区连接到源代码控制时,每个仓库会以SQL数据库项目的形式出现:一个由源代码控制的脚本,包含构成仓库模式的SQL对象(表、视图、存储过程和函数)。 每个对象都存储为包含 .sql 其数据定义语言(DDL)语法的文件,例如 CREATE TABLE。 这些对象描述架构 的所需状态 ,部署过程将所需状态与目标仓库进行比较,并生成一个差异 T-SQL 脚本,用于创建、更改或删除对象,以便目标与项目匹配。

部署前和部署后脚本通过围绕架构部署运行的 Transact-SQL 扩展此过程:

  • 部署前脚本在应用架构部署计划之前运行。
  • 部署后脚本在架构部署计划完成后运行。

部署前或部署后脚本是存储在仓库的“查询”文件夹下的共享查询之一。 仓库最多支持一个部署前脚本和一个部署后脚本。 该标记以仓库级元数据的形式存储,而不是复制脚本内容,因此带来的存储开销几乎可以忽略不计。

由于每个指定脚本在每次部署该仓库时都会运行,因此请编写具有幂等性的 Transact-SQL(可安全地重复运行)。

Tip

当脚本具有幂等性时,你可以多次运行它而不会引发问题。 你可以部署到多个数据库,无需预先确定它们的状态。

常见用例

  • 引用和静态数据管理:在部署架构后插入、更新或删除查找、配置或引用表中的行。
  • 数据清理:在应用架构更改之前或之后删除过时或临时数据。
  • 环境设置:应用开发、测试和生产环境之间的差异的设置或初始化状态。
  • 元数据驱动的管道初始化:准备下游管道步骤所需的仓库状态。
  • SQL 安全性:数据仓库表数据和 SQL 安全功能(如角色、用户和 GRANT/DENY 权限)不包括在 SQL 数据库项目中。 使用部署后脚本在部署后重新创建这些对象,包括测试和生产环境之间的差异。 有关示例,请参阅 SQL 安全性的部署后脚本示例

SQL 项目文件结构和语法

仓库SQL项目通过使用PreDeployPostDeploy项目类型,引用项目文件(.sqlproj)中的部署前和部署后脚本。 每个入口指向项目中的单个共享查询文件。

以下示例指定 pre-deployment.sql 为部署前脚本和 post-deployment.sql 部署后脚本:

<ItemGroup>
  <PreDeploy Include="pre-deployment.sql" />
  <PostDeploy Include="post-deployment.sql" />
</ItemGroup>

Important

Fabric Data Warehouse仅支持预部署脚本的单个文件和部署后脚本的单个文件。 不支持从多个文件(例如,使用 SQLCMD :r 命令引用其他文件)编写脚本。 .sqlproj如果包含多个预部署或部署后条目,Git 更新将失败。

SQL 安全性部署后脚本示例

由于 SQL 安全功能未在 SQL 数据库项目中捕获,因此部署后脚本是部署仓库后重新创建这些功能的一种常见方法。 编写脚本,以便它可以在每个部署上运行。

以下示例创建一个命名 DataReaders 并授予 SELECT 架构权限的 dbo 自定义数据库角色。

-- post-deployment.sql
-- Recreate a role and grant permissions after deployment.
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = N'DataReaders')
BEGIN
    CREATE ROLE DataReaders;
END;
GO

GRANT SELECT ON SCHEMA::dbo TO DataReaders;
GO

注释

Fabric Data Warehouse不支持SQL Server中提供的每个Transact-SQL 语句。 请确保脚本中的语句在Fabric Data Warehouse受支持。

在 Fabric 门户中配置部署前和部署后脚本

在Fabric门户中,将现有共享查询指定为部署前或部署后脚本。 可以从对象资源管理器或仓库项目的“设置”中执行此操作。

不能同时将共享查询指定为部署前脚本和部署后脚本。

从 对象资源管理器

  1. 在仓库编辑器中,展开对象资源管理器中的“查询”文件夹。
  2. 右键单击要使用的共享查询。
    • 如有必要,将查询从 “我的查询 ”迁移到共享查询。
  3. 选择 “设置部署脚本”。 此操作会将你转到“项设置”窗格。
  4. 部署前脚本部署后脚本 字段中,选择 “选择脚本”。
  5. 选择“ 设置查询作为部署前/部署后脚本 选项”,然后为每个脚本选择共享查询。 每个下拉菜单都会列出仓库中所有共享查询。

从项目设置中

  1. 打开仓库 的设置
  2. 前往CI/CD部分。
  3. 部署前脚本部署后脚本 字段中,选择 “选择脚本”。
  4. 选择“ 设置查询作为部署前/部署后脚本 选项”,然后为每个脚本选择共享查询。 每个下拉菜单都会列出仓库中所有共享查询。

所做的选择存储为仓库级元数据,并在对象资源管理器和项设置之间保持同步。

部署前脚本和部署后脚本的行为方式

使用 Git 集成

当你将工作区连接到 Git 存储库时,预部署和后部署标记会在提交时序列化并写入仓库的 .sqlproj 文件。 从 Git 更新仓库时,Fabric将更改应用到实时仓库并按顺序运行脚本:

  1. 部署前脚本在应用架构更改之前运行。
  2. 架构部署计划已应用。
  3. 部署后脚本在架构更改完成后运行。

指定项通过 Git 往返同步时,无论是在门户中配置并提交脚本,还是在 .sqlproj 中编写脚本并更新工作区,都会产生一致的结果。 重复提交和更新不会重复或丢失配置。 由于只允许一个预部署和一个部署后脚本,因此 Git 中创作的配置会替换更新时仓库中的任何现有指定。

使用部署管道

部署管道在将仓库从 开发测试生产 各阶段进行提升时,使用“部署前”和“部署后”这两个标识。 指定的脚本在每个目标环境中以确定性方式执行,因此可以使用它们应用环境设置,或者在内容在阶段之间移动时重新应用 SQL 安全性。

在没有源代码管理的工作区中

仓库项定义包括部署前和部署后标识,即使工作区未连接到源代码管理也是如此。 导出仓库时会包含配置,导入后可将配置原封不动地还原。

在 SQL 数据库项目中创作预部署和部署后脚本

您无需通过 Fabric 门户,而是可以使用 Visual Studio Code 中的 SQL Database Projects 扩展或 SQL Server Management Studio 中集成的 SQL 项目功能,直接在仓库的 SQL 数据库项目中编写部署前和部署后脚本。 下一次 Git 更新后,该配置会显示在 Fabric 门户中——同时显示在 对象资源管理器 和项目 设置 中。

Visual Studio Code

  1. 在 Visual Studio Code 中安装 SQL 数据库项目扩展。
  2. 打开仓库的 SQL 数据库项目。 如果工作区已连接到 Git,请克隆存储库,然后打开仓库项目文件夹。
  3. “数据库项目 ”视图中,右键单击项目节点,然后选择“ 添加预部署脚本 ”或 “添加部署后脚本”。
  4. 提供没有文件扩展名的脚本名称。 脚本文件将添加到项目中并在编辑器中打开。
  5. 将 Transact-SQL 添加到脚本并保存文件。 确保文件保存在下一次Git更新时的 .sharedqueries 文件夹里。
  6. 提交更改并将其推送到 Git 存储库,然后从源代码管理更新工作区以应用配置。

SQL Server Management Studio

  1. 使用 SQL Server Management Studio 22 或更高版本,其中包括 SQL 数据库项目体验。
  2. 打开仓库的 SQL 数据库项目。
  3. 解决方案资源管理器中,右键单击项目节点并选择“添加>脚本”。 选择“预先部署脚本”或“后期部署脚本”
  4. 脚本文件将添加到项目并在查询编辑器中打开。
  5. 将 Transact-SQL 添加到脚本并保存文件。 确保你把文件保存到 .sharedqueries 文件夹里,以便下一次Git更新时使用。
  6. 提交更改并将其推送到 Git 存储库,然后从源代码管理更新工作区以应用配置。

直接编辑项目文件

在任何工具中,都可以通过编辑 .sqlproj 文件,并向 PreDeploy 中添加单个 PostDeployItemGroup 项来指定脚本:

<ItemGroup>
  <PreDeploy Include="./sharedqueries/pre-deployment.sql" />
  <PostDeploy Include="./sharedqueries/post-deployment.sql" />
</ItemGroup>

从现有 SQL 项目迁移

如果你从 SQL Server Data Tools(SSDT)或 Visual Studio 迁移一个已包含 <PostDeploy>.sqlproj 条目的 <PreDeploy>,导入过程会识别这些条目,并将其映射到 Fabric 的部署前和部署后配置。 由于Fabric仅支持一个预部署和一个部署后脚本,因此在导入之前,请确保项目最多包含每种类型的一个条目。

注意事项和限制

  • 仓库仅支持单个预部署脚本和单个部署后脚本。 它不支持一个脚本对应多个文件。
  • 不能将共享查询指定为部署前脚本和部署后脚本。
  • 如果删除指定为部署前或部署后脚本的共享查询,则会自动清除相应的指定。
  • 如果将指定为预部署或部署后脚本的共享查询更改为用户查询,则会自动清除相应的指定。
  • 部署前和部署后脚本在每个仓库部署上运行。 Transact-SQL 脚本应具有幂等性,从而使重复运行时不会失败,也不会创建重复对象。
  • 在构建时,不会根据数据库模型对预部署脚本和后部署脚本进行验证。 脚本中的错误在部署时浮出水面,脚本失败会停止部署。
  • 只能使用Fabric Data Warehouse中支持的Transact-SQL
  • 运行部署的标识必须具有执行脚本内容所需的权限。