你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Fabric 中的镜像功能(现已正式发布)提供了一种简单的体验,可避免复杂的 ETL(提取、转换、加载),并可将现有的 Azure Database for PostgreSQL 灵活服务器资产与你在 Microsoft Fabric 中的其他数据集成在一起。 您可以将现有的 Azure Database for PostgreSQL 持续复制直接到 Fabric OneLake。 在 Fabric 中,可以解锁强大的商业智能、人工智能、数据工程、数据科学和数据共享应用场景。
重要
在 Ignite 2025 之后新建的服务器会自动包含镜像组件的最新正式发布版本。 现有服务器将在后续维护周期内逐步升级,无需人工干预。 无需禁用并重新启用镜像即可接收更新。
Architecture
Azure Database for PostgreSQL 中的结构镜像基于 逻辑复制 和变更数据捕获(CDC)设计模式等概念构建。
在 Azure Database for PostgreSQL 灵活服务器实例中为数据库建立 Fabric 镜像后,PostgreSQL 后台进程将为要镜像的选定表创建初始快照。 它以 Parquet 格式将快照文件传输到 Fabric OneLake 着陆区。 在 Fabric 中运行的复制程序进程会获取这些初始快照文件,并在镜像数据库项目中创建 Delta 表。
源数据库捕获应用于所选表的后续更改。 该功能将这些更改分批传输到 OneLake 登陆区域,以便应用于镜像数据库项目中的相应 Delta 表。
什么是变更数据捕获(CDC)?
变更数据捕获(CDC)是一种方法,使应用程序能够检测和捕获对数据库所做的更改。
它不依赖于显式 SQL 查询来跟踪更改。
而是涉及数据库服务器发布的连续更改事件流。
客户端可以订阅此流来监视更改、专注于特定数据库、单个表,甚至是表中列的子集。
对于 Fabric 镜像,CDC 模式是在名为 azure_cdc 的专有 PostgreSQL 扩展中实现的。 Azure Database for PostgreSQL 灵活服务器实例的控制平面在 Fabric 镜像启用工作流期间被安装,并在源数据库中注册。
Azure 变更数据捕获 (CDC) 扩展功能
Azure CDC 是 PostgreSQL 的扩展,可增强逻辑解码的功能。
它将 Write-Ahead 日志(WAL)数据解释和转换为可理解的逻辑格式。
该扩展把数据库修改转换为一系列逻辑操作,如 INSERT、UPDATE 和 DELETE。
Azure CDC 是 PostgreSQL 内置逻辑解码插件 pgoutput之上的一层。
Azure CDC 将表快照和修改内容导出为 Parquet 文件,并将其复制到 Microsoft Fabric OneLake 登陆区域以供后续处理。
在 Azure 门户中启用 Fabric 镜像
通过在 Azure 门户中对 Azure Database for PostgreSQL 灵活服务器实例进行 Fabric 镜像,你可以将 PostgreSQL 数据库复制到 Microsoft Fabric 中。 此功能可帮助你将数据与 Microsoft Fabric 中的其他服务无缝集成,实现高级分析、商业智能和数据科学方案。 通过遵循 Azure 门户中的几个简单步骤,可以配置必要的先决条件并开始镜像数据库,以使用 Microsoft Fabric 的全部潜力。
支持的版本
Azure Database for PostgreSQL 支持 PostgreSQL 14 及更高版本 ,以便进行 Fabric 镜像。
先决条件
在 Azure Database for PostgreSQL 灵活服务器实例中使用 Fabric 镜像之前,需要配置几个先决条件。
- 必须启用系统分配的托管标识(SAMI)。
- Azure CDC 利用此标识向 Fabric OneLake 进行通信验证、复制初始快照,并将更改内容分批传输到登陆区域。
通过以下部分中介绍的专用启用工作流配置其他先决条件。 这些先决条件包括:
wal_level 服务器参数必须设置为“logical”。
- 为源服务器启用逻辑复制。
必须增加max_worker_processes 服务器参数,以适应更多后台进程进行镜像。
azure_cdc 扩展。 Azure CDC 扩展(azure_cdc)已预加载到源服务器上,并注册了所选数据库进行镜像(需要重启)。
Azure 门户中提供了一个新页面,用于在源服务器上自动执行这些先决条件配置。
选择 “开始” 以启动启用工作流。
此页面显示所需先决条件的当前状态。 如果未为此服务器启用系统分配的托管标识(SAMI),请选择要重定向到可启用此功能的页面的链接。
完成后,选择数据库以启用 Fabric 镜像(默认情况下最多三个,但可以通过更改 max_mirrored_databases 服务器参数来提高此限制),然后选择“ 准备”。
工作流显示“重启服务器”弹出窗口。 通过选择 “重启”,可以启动该过程。 工作流自动执行所有剩余的配置步骤。 可以从 Fabric 用户界面开始创建镜像数据库。
创建用于 Fabric 镜像功能的数据库角色
接下来,需要为 Fabric 服务提供或创建 PostgreSQL 角色,以便该服务连接到 Azure Database for PostgreSQL 灵活服务器。
可以通过指定用于连接到源系统 的数据库角色 来完成此任务。
注释
支持使用 Entra ID 和本地数据库角色将 Fabric 镜像连接到 Azure Database for PostgreSQL,请选择最适合您需求的 身份验证方法。
使用数据库角色
使用 Visual Studio Code 或 pgAdmin 连接到 Azure Database for PostgreSQL。 以
azure_pg_admin角色成员的主体身份进行连接。创建名为
fabric_user的 PostgreSQL 角色。 可以为此角色选择任何名称。 提供自行设置的强密码。 授予数据库中 Fabric 镜像功能所需的权限。 运行以下 SQL 脚本,向名为fabric_user的新角色授予CREATEDB、CREATEROLE、LOGIN、REPLICATION和azure_cdc_admin权限。-- create a new user to connect from Fabric CREATE ROLE fabric_user CREATEDB CREATEROLE LOGIN REPLICATION PASSWORD '<strong password>'; -- grant role for replication management to the new user GRANT azure_cdc_admin TO fabric_user; -- grant create permission on the database to mirror to the new user GRANT CREATE ON DATABASE <database_to_mirror> TO fabric_user;创建的数据库用户还需成为镜像数据库内待复制表的
owner。 此要求意味着用户可以使用ALTER TABLE <table name here> OWNER TO fabric_user;创建表或更改这些表的所有权。
重要
缺少前面的安全配置步骤之一会导致 Fabric 门户中的后续镜像操作失败,并显示一条 Internal error 消息。
服务器参数
这些服务器参数直接影响 Azure Database for PostgreSQL 的 Fabric 镜像,可用于优化 Fabric OneLake 的复制过程:
Azure.fabric_mirror_enabled:默认值为 off。 此参数指定指示是否在服务器上启用镜像的标志。 它在服务器启用工作流结束时自动设置,因此不应手动更改它。
max_replication_slots:默认值 10。 我们为每个镜像数据库使用一个复制槽,但如果客户创建更多镜像或创建其他复制槽(逻辑复制),客户可能会考虑增加此槽。
max_wal_senders:默认值为 10。 与上一个参数一样,我们为每个镜像使用一个
wal发送方进程,这在镜像更多数据库时应增加。max_worker_processes:默认值为 8。 初始快照后,我们为每个镜像数据库或已启用镜像但尚未在 Fabric 中创建镜像工件的对象使用一个进程。 如果你有其他扩展或工作负载使用更多工作器进程,则必须增加此值。
max_parallel_workers:默认值为 8,这限制了可以同时运行的工作线程数。 如果在同一服务器上启用多个镜像会话,则可以考虑增加此参数以允许更多并行作(例如,在初始快照中增加并行度)。
azure_cdc.max_fabric_mirrors 默认值为 3。 如果客户需要镜像此服务器上的三个以上的数据库,则可以增加此值。 请务必考虑,每个新的镜像数据库都会消耗服务器资源(五个后台进程使用 CPU 和内存资源进行快照创建和更改批处理),因此,应持续监控资源利用率,如果 CPU 和内存利用率持续超过 80% 或性能不符合您的预期,应将计算资源扩展到下一个可用大小。
azure_cdc.max_snapshot_workers:默认值为 3。 创建初始快照期间使用的最大工作器进程数。 增加这个值以加快初始快照创建速度,当增加镜像数据库的数量时。 但是,在执行此作之前,应考虑系统中运行的其他所有后台进程。
azure_cdc.change_batch_buffer_size:默认值为 16 MB。 更改批处理的最大缓冲区大小(以 MB 为单位)。 该表显示,许多数据会先进行缓冲,直到达到此大小才会写入本地磁盘。 根据镜像数据库的数据更改频率,可以调整此值以减少更改批处理频率,或者增加此值(如果希望确定总体吞吐量的优先级)。
azure_cdc.change_batch_export_timeout:默认值为 30。 更改批处理消息之间的最大空闲时间(以秒为单位)。 超出时,我们将当前批标记为已完成。 根据镜像数据库的数据更改频率,可以调整此值以减少更改批处理频率,或者增加此值(如果希望确定总体吞吐量的优先级)。
azure_cdc.parquet_compression:默认值为 ZSTD。 此参数仅供内部使用,因此不应对其进行修改。
azure_cdc.snapshot_buffer_size:默认值为 1000。 初始快照缓冲区的最大大小(以 MB 为单位)。 根据表格,很多数据会在发送到 Fabric 前被缓冲到一定容量。 请记住,azure_cdc.snapshot_buffer_size*azure_cdc.max_snapshot_worker 是初始快照期间使用的总内存缓冲区。
azure_cdc.snapshot_export_timeout:默认值为 180。 导出初始快照的最长时间(以分钟为单位)。 如果超出最大时间,则会重启。
azure_cdc.prune_local_batches:默认值为 True。 若已设置,则批次数据在成功上传并经 wal_sender 确认后,就会从本地磁盘中删除。
Monitor
监视 Azure Database for PostgreSQL 灵活服务器实例中的 Fabric 镜像对于确保镜像进程顺利高效地运行至关重要。 通过监视镜像数据库的状态,可以识别任何潜在问题并采取纠正措施。
可以使用多个用户定义的函数和表来监视 Azure Database for PostgreSQL 灵活服务器实例中的重要 CDC 指标,并排除到 Fabric 的镜像过程中的故障。
监视功能
Azure Database for PostgreSQL 的 Fabric 镜像功能能够将 PostgreSQL 数据库无缝复制到 Microsoft Fabric 中,使您能够使用高级分析和数据集成方案。
azure_cdc.list_tracked_publication():对于源灵活服务器实例中的每个发布,返回一个逗号分隔的字符串,其中包含以下信息
- publicationName (text)
- includeData (bool)
- includeChanges (bool)
- active (bool)
- baseSnapshotDone(bool)
- generationId (int)
azure_cdc.publication_status('pub_name'):对于源中的每个发布,灵活服务器实例返回一个逗号分隔字符串,其中包含以下信息
- <status、start_lsn、stop_lsn、flush_lsn>。
- 状态包括[“插槽名称”、“源名称”、“CDC 数据目标路径”、“激活”、“快照已完成”、“进度百分比”、“生成 ID”、“批处理 ID 完成”、“已上传批处理 ID”、“CDC 开始时间”]
azure_cdc.is_table_mirrorable('schema_name','table_name'):给定的架构和表名称,如果表可镜像,则返回该表。 若要使表可镜像,它需要满足以下条件:
- 列名不包含以下任何字符:
[ ;{}\n\t=()] - 列类型是以下类型之一:
bigintbigserialbooleanbytescharactercharacter varyingdatedouble precisionintegernumericrealserialoidmoneysmallintsmallserialtexttime without time zonetime with time zonetimestamp without time zonetimestamp with time zoneuuid
- 该表不是视图、具体化视图、外表、Toast 表或分区表
- 该表具有主键或唯一的、非部分的且不可为 null 的索引。 如果未满足这些先决条件,镜像仍会应用 副本标识 FULL,但这 将对总体复制性能和 WAL 利用率产生重大影响。 建议为非特殊大小的表提供主键或唯一索引。
- 列名不包含以下任何字符:
跟踪表
- azure_cdc.tracked_publications:Fabric 中的每个现有镜像数据库对应的一行。 查询此表以了解每个发布的状态。
| 列名 | Postgres 类型 | Explanation |
|---|---|---|
| 出版物编号 | oid | 发布的对象标识符 |
| 目标路径 | 文本消息 | Fabric OneLake 中登陆区域的路径 |
| 目标格式 | azure_cdc.data_format | Azure CDC 中的数据格式 |
| include_data | 布尔 | 是否在发布中包含初始快照数据 |
| include_changes | 布尔 | 是否在发布中包含更改 |
| 活动 | 布尔 | 发布项是否处于活跃状态 |
| 快照完成 | 布尔 | 快照是否已完成 |
| snapshot_progress | smallint | 快照的进度 |
| 快照进度百分比 | 文本消息 | 快照进度百分比 |
| generation_id | int | 生成标识符 |
| stream_start_lsn | pg_lsn | 更改流启动的日志序列号 |
| stream_start_time(流开始时间) | 时间戳 | 更改流启动时的时间戳 |
| stream_stop_lsn | pg_lsn | 更改流停止的日志序列号 |
| 快照大小 | bigint | 快照的总大小(以字节为单位) |
| 总时间 | int | 出版物所用的总时间(以秒为单位) |
-
azure_cdc.tracked_batches:捕获并发送到 Fabric OneLake 的每个更改批次对应一行。 查询该表,以了解哪些数据批次已经被捕获并上传到 Fabric OneLake。
last_written_lsn使用该列,可以了解源数据库中的给定事务是否已寄送到 Fabric。
| Name | Postgres 类型 | Explanation |
|---|---|---|
| 出版物编号 | oid | 发布的对象标识符 |
| completed_batch_id | bigint | 批的序列号(从 1 开始)。 每个发布唯一 |
| last_written_lsn | pg_lsn | 此批次的最后一次写入的 LSN |
- azure_cdc.tracked_tables:针对所有发布资源,一行记录一个跟踪的表。 包含以下字段,这些字段适用于所有发布资源中的所有已发布表格。 如果一个表是两个出版物的一部分,则会列出两次。
| Name | Postgres 类型 | Explanation |
|---|---|---|
| 出版物编号 | oid | 发布的对象标识符 |
| table_oid | oid | 表的对象标识符 |
| sequence_number | bigint | 生成的文件的序列号 |