Fabric 中的鏡像 (現已正式推出) 提供輕鬆的體驗,可避免複雜的 ETL (擷取、轉換和載入),並將現有的 Azure PostgreSQL Database 資產與 Microsoft Fabric 中的其餘資料整合。 您可以持續將現有的適用於 PostgreSQL 的 Azure 資料庫直接複寫至 Fabric OneLake。 在 Fabric 中,您可以解鎖強大的商業智慧、人工智慧、資料工程、資料科學和資料共用案例。
這很重要
在 Ignite 2025 之後新建立的伺服器會自動包含鏡像元件的最新正式發行版本。 現有伺服器會在下一個維護週期中逐步升級,無需人工介入。 你不需要停用再重新啟用同步就可以收到更新。
Architecture
適用於 PostgreSQL 的 Azure 資料庫中的網狀架構鏡像是以 邏輯複寫 和變更資料擷取 (CDC) 設計模式等概念為基礎。
一旦在 Azure PostgreSQL Database 彈性伺服器執行個體中為資料庫建立 Fabric 鏡像,PostgreSQL 背景流程會為選定的鏡像資料表建立初始快照。 它會將快照以 Parquet 格式傳輸到 Fabric OneLake 著陸區。 在 Fabric 中執行的 Replicator 程序會取得這些初始快照檔案,並在鏡映資料庫工件中建立 Delta 表。
來源資料庫會擷取後續對特定資料表的變更。 它會將這些變更分批傳送到 OneLake 著陸區,並套用到鏡像資料庫產物中的相應 Delta 表格。
什麼是變更資料擷取 (CDC)?
變更資料擷取 (CDC) 是一種方法,可讓應用程式偵測並擷取對資料庫所做的變更。
它不依賴明確的 SQL 查詢來追蹤變更。
相反地,它涉及資料庫伺服器所發佈的連續變更事件串流。
用戶端可以訂閱此串流來監控更改,重點關注特定資料庫、單個表,甚至表中的列子集。
針對 Fabric 鏡像功能,系統會在稱為 azure_cdc 的專屬 PostgreSQL 延伸模組中實作 CDC 模式。 適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的控制平面,會在 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 入口網站中,適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體的的 Fabric 鏡像功能可讓您將 PostgreSQL 資料庫複寫至 Microsoft Fabric。 此功能可協助您將資料與 Microsoft Fabric 中的其他服務無縫整合,從而實現進階分析、商業智慧和資料科學案例。 藉由在 Azure 入口網站中遵循幾個簡單的步驟,您可以設定必要的必要條件,並開始鏡像資料庫,以充分利用 Microsoft Fabric 的潛力。
支援的版本
Azure PostgreSQL Database 支援 PostgreSQL 14 及更新版本進行 Fabric 鏡像。
先決條件
在你能在 Azure 資料庫中為 PostgreSQL 靈活伺服器實例使用 Fabric 鏡像之前,你需要設定幾個前置條件。
- 必須啟用系統指定的管理身份(SAMI)。
- Azure CDC 使用此身份來驗證與 Fabric OneLake 的通訊、複製初始快照,並將批次變更傳送至著陸區。
你透過以下章節所述的專用啟用工作流程來配置額外的前置條件。 這些先決條件包括:
wal_level 伺服器參數必須設為「邏輯」。
- 啟用邏輯複寫以供來源伺服器使用。
必須增加max_worker_processes伺服器參數,以容納更多鏡映的背景處理程序。
azure_cdc 擴充元件。 Azure CDC 延伸模組 (azure_cdc) 會預先載入至來源伺服器,並註冊所選取的資料庫以進行鏡像 (其需要重新啟動)。
Azure 入口網站新增了一個頁面,用以自動化這些前置設定在來源伺服器上。
選取 開始使用 以啟動啟用流程。
此頁面顯示必要必要條件的目前狀態。 如果未為此伺服器啟用系統指派的受控識別 (SAMI) ,請選取要重新導向至您可以啟用此功能的頁面的連結。
完成後,選擇啟用 Fabric 鏡像的資料庫(預設最多三個,但可以透過更改 max_mirrored_databases server 參數來增加這個限制),然後選擇 準備。
工作流程會呈現一個重新啟動伺服器的彈窗視窗。 選擇 重新啟動後,你就開始了這個流程。 工作流程自動化了所有剩餘的設定步驟。 你可以從 Fabric 使用者介面開始建立鏡像資料庫。
為 Fabric 鏡像建立資料庫角色
接下來,您必須提供或建立適用於 Fabric 服務的 PostgreSQL 角色,以連線到適用於 PostgreSQL 的 Azure 資料庫彈性伺服器。
你可以透過指定一個資料庫 角色 來連接你的來源系統來完成這項任務。
備註
Fabric 鏡像連接到 Azure PostgreSQL Database 時,支援 Entra ID 與本機資料庫角色,請選取最適合您需求的驗證方法。
使用資料庫角色
使用 Visual Studio Code 或 pgAdmin 連接到你的 Azure Database for PostgreSQL。 使用為角色
azure_pg_admin成員的主體進行連線。建立名為
fabric_user的 PostgreSQL 角色。 您可以為此角色選擇任何名稱。 提供您自己的強式密碼。 在資料庫中授予 Fabric 鏡像所需的權限。 執行下列 SQL 指令碼,將CREATEDB、CREATEROLE、LOGIN、REPLICATION、和azure_cdc_admin權限授予名為fabric_user的新角色。-- 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:預設值為關閉。 此參數指定旗標,指出伺服器上是否已啟用鏡映。 它是在伺服器啟用工作流程結束時自動設定的,因此您不應手動變更它。
max_replication_slots:預設值 10。 我們會為每個鏡像資料庫使用一個複寫插槽,但如果客戶建立更多鏡像或為其他目的 (邏輯複寫) 建立其他複寫插槽,則可能會考慮增加此插槽。
max_wal_senders:預設值為 10。 與上一個參數一樣,每個鏡像會使用一個
wal傳送者程序,在鏡像處理更多資料庫時,請相應增加此值。max_worker_processes:預設值為 8。 在初始快照後,每個鏡像資料庫或已啟用鏡像功能 (但尚未在 Fabric 中建立鏡像成品) 的地方使用一個程序。 如果您有其他延伸模組或工作負載使用更多背景工作角色程序,則必須增加此值。
max_parallel_workers:預設值為 8,這限制了可以同時執行的 Worker 數目。 如果您在相同伺服器上啟用多個鏡像會話,您可以考慮增加此參數以允許更多平行運作(例如,提高初始快照中的平行度)。
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_workers 是初始快照期間使用的記憶體緩衝區總計。
azure_cdc.snapshot_export_timeout:預設為 180。 匯出初始快照的時間上限 (以分鐘為單位)。 如果超過最大時間,則重新啟動。
azure_cdc.prune_local_batches:預設為 true。 如果設定好,請在批次資料成功上傳並被 wal_sender 確認後,從本地磁碟中移除。
Monitor
監控 Azure PostgreSQL Database 彈性伺服器執行個體中的 Fabric 鏡像,對於確保鏡像流程順利且有效率地執行至關重要。 透過監控鏡像資料庫的狀態,您可以識別潛在問題並採取矯正措施。
您可以使用數個使用者定義的函式和資料表,來監視適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體中的重要 CDC 計量,並針對 Fabric 的鏡像流程進行疑難排解。
監視函式
Azure Database for PostgreSQL 的 Fabric 鏡像功能能無縫複製你的 PostgreSQL 資料庫到 Microsoft Fabric,讓你能使用進階的分析與資料整合場景。
azure_cdc.list_tracked_publications():對於原始彈性伺服器實例中的每個出版物,回傳一個逗號分隔的字串,包含以下資訊
- 出版名稱(文本)
- includeData (bool)
- includeChanges (bool)
- active (bool)
- baseSnapshotDone (bool)
- generationId(整數)
azure_cdc.publication_status('pub_name')):對於原始碼中的每個出版物,彈性伺服器實例會回傳一個逗號分隔的字串,包含以下資訊
- <狀態、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
- 該資料表不是檢視、具體化檢視、外部資料表、快顯通知資料表或資料分割資料表
- 該表格有一個主鍵,或是唯一、不可空且非部分的索引。 若未達成這些條件,鏡像功能仍可透過應用 replica identity FULL 來運行,但 這將對整體複製效能和 WAL 使用率造成重大影響。 我們建議對於非平凡大小的資料表設置主鍵或唯一索引。
- 資料行名稱不包含下列任何字元:
追蹤資料表
- azure_cdc.tracked_publications:Fabric 中每個現有鏡像資料庫各一列。 查詢此表格以瞭解每個發行集的狀態。
| 欄位名稱 | Postgres 類型 | Explanation |
|---|---|---|
| publication_id | oid | 出版物的 OID(物件識別碼) |
| 目的地路徑 | 收發簡訊 | Fabric OneLake 中登陸區域的路徑 |
| destination_format | azure_cdc.資料格式 | Azure CDC 中的資料格式 |
| include_data | 布爾 (bool) | 是否要在發佈中包含初始快照資料 |
| include_changes | 布爾 (bool) | 是否在發佈中包含變更 |
| 活動中 | 布爾 (bool) | 發行集是否使用中 |
| 快照完成 | 布爾 (bool) | 快照是否已完成 |
| snapshot_progress | smallint | 快照集的進度 |
| 快照進度百分比 | 收發簡訊 | 快照集的進度百分比 |
| 生成識別碼 | 整數 (int) | 世代識別碼 |
| stream_start_lsn | pg_lsn | 日誌序號,變數串流起始位置 |
| 串流開始時間 | 時間戳記 | 變更資料流開始的時間戳記 |
| stream_stop_lsn | pg_lsn | 變更串流停止的日誌序列號 |
| 快照大小 | Bigint | 快照集的總大小 (以位元組為單位) |
| 總時間 | 整數 (int) | 發佈所花費的總時間(以秒為單位) |
-
azure_cdc.tracked_batches:每個擷取並傳送至 Fabric OneLake 的變更批次各一列。 查詢此表格以了解哪批批次已被擷取並上傳至 Fabric OneLake。 透過欄位
last_written_lsn,你可以了解來源資料庫中的某筆交易是否已經運送到 Fabric。
| 名稱 | Postgres 類型 | Explanation |
|---|---|---|
| publication_id | oid | 出版物的 OID(物件識別碼) |
| completed_batch_id | Bigint | 批次的序號(從 1 開始)。 每個出版物的唯一性 |
| last_written_lsn | pg_lsn | 此批次最後一次寫入的 LSN |
- azure_cdc.tracked_tables:每個表格都有一個對應的資料列,跨所有發行物進行追蹤。 對所有已發佈資料表以及所有發行集均具有以下欄位。 如果一個表格同時屬於兩個出版品,則會重複列出。
| 名稱 | Postgres 類型 | Explanation |
|---|---|---|
| publication_id | oid | 出版物的 OID(物件識別碼) |
| table_oid | oid | 資料表的 Oid |
| sequence_number | Bigint | 產生檔案的序號 |