編輯

共用方式為


企業商業智慧

Power BI
Azure Synapse Analytics
Azure Data Factory
Microsoft Entra ID
Azure Blob 儲存體

此範例案例示範如何將資料從內部部署資料倉儲提取到雲端環境,然後使用商業智慧 (BI) 模型提供服務。 這種方法可能是邁向使用雲端式元件進行完整現代化的最終目標,或是第一步。

下列步驟以 Azure Synapse Analytics 端對端案例為基礎。 它會使用 Azure Pipelines 將資料從 SQL 資料庫內嵌至 Azure Synapse SQL 集區,然後轉換該資料以供分析。

架構

使用 Azure Synapse 的企業 BI 架構圖表。

下載此架構的 Visio 檔案

工作流程

資料來源

擷取和資料儲存體

  1. Azure Data Lake Gen2 會在資料擷取期間作為臨時暫存區域。 然後,您可以使用 PolyBase 將資料複製到 Azure Synapse 專用 SQL 集區

  2. Azure Synapse Analytics 是用於執行大型資料分析的分散式系統。 其支援大量平行處理 (MPP),因此適用於執行高效能分析。 Azure Synapse 專用 SQL 集區是持續從內部部署擷取資料的目標。 它可用於進一步處理,以及透過 DirectQuery 為 Power BI 提供資料。

  3. Azure Pipelines 是用來協調 Azure Synapse workspace 內的資料擷取和轉換。

分析和報告

元件

此案例使用以下元件:

簡化的架構

企業 BI 簡易架構的圖表。

案例詳細資料

該組織擁有儲存在 SQL 資料庫中的大型內部部署資料倉儲。 該組織要使用 Azure Synapse 來執行分析,然後使用 Power BI 提供這些深入解析。

驗證

Microsoft Entra 會驗證連接至 Power BI 儀表板和應用程式的使用者。 單一登入可用來連接到 Azure Synapse 佈建之集區中的資料來源。 授權會在來源上進行。

累加式載入

當您執行自動化擷取、轉換、載入 (ETL) 或擷取、載入、轉換 (ELT) 程序時,只載入自上一次執行後變更的資料最有效率。 此程序為累加式載入,而非載入所有資料的完整負載。 若要執行累加式載入,您需要有方法來識別哪些資料已變更。 最常見的方法是使用上限標準值,來追蹤來源資料表中某些資料行 (datetime 資料行或唯一的整數行) 的最新值。

從 SQL Server 2016 開始,您可以使用時態表,它們是系統版本設定的資料表,可保留資料變更的完整歷程記錄。 資料庫引擎會自動記錄個別記錄資料表中每項變更的歷程記錄。 您可以將 FOR SYSTEM_TIME 子句新增至查詢,以查詢歷程記錄資料。 資料庫引擎會從內部查詢記錄資料表,但這個查詢過程對應用程式是隱蔽的。

注意

針對舊版的 SQL Server,您可以使用異動資料擷取 (CDC)。 這種方法不如時態表方便,因為必須查詢個別的變更資料表,而且必須透過記錄序號而非時間戳記來追蹤變更。

時態表對於查詢會隨時間變更的維度資料很有用。 事實資料表通常代表不可變的交易,例如銷售,在這種情況下,保留系統版本歷程記錄並不合理。 相反地,交易通常會有一個代表交易日期的資料行,這可以用來做為上限標準值。 例如,在 AdventureWorks 資料倉儲中,SalesLT.* 資料表具有 LastModified 欄位。

以下是 ELT 管線的一般查詢流程:

  1. 針對來源資料庫中的每個資料表,追蹤上次執行 ELT 作業的截止時間。 將此資訊儲存在資料倉儲中。 在初始設定時,所有時間都會設定為 1-1-1900

  2. 在資料匯出步驟期間,截止時間會當做參數傳遞至來源資料庫中的一組預存程序。 這些預存程序會查詢在截止時間之後變更或建立的任何記錄。 對於該範例中的所有資料表,您可以使用 ModifiedDate 資料行。

  3. 當資料移轉完成時,請更新儲存截止時間的資料表。

資料管線

此案例使用的資料來源是 AdventureWorks 範例資料庫。 實作累加式資料載入模式,以確保我們只會載入最近一次管線執行之後修改或新增的資料。

中繼資料驅動的複製工具

Azure Pipelines 內的內建中繼資料驅動的複製工具,會以累加方式載入關聯式資料庫中所包含的所有資料表。 透過瀏覽精靈式體驗,您可以將「資料複製」工具連接至來源資料庫,並設定每個資料表使用累加式載入或完整載入。 資料複製工具接著會建立管線和 SQL 指令碼,以產生儲存累加式載入程序資料所需的控制資料表,例如,每個資料表的上限標準值/資料行。 執行這些指令碼之後,該管線即可將來源資料倉儲中的所有資料表載入 Synapse 專用集區。

Azure Synapse Analytics 中繼資料驅動的複製工具的螢幕擷取畫面。

此工具會建立三個管線,以在載入資料之前逐一查看資料庫中的所有資料表。

此工具所產生的管線:

  • 計算管線執行中要複製的物件數目,例如資料表。
  • 逐一查看要載入/複製的每個物件,然後:
    • 檢查是否需要差異載入;否則,請完成一般完整載入。
    • 從控制資料表擷取上限標準值。
    • 將資料從來源資料表複製到 Data Lake Storage Gen2 中的暫存帳戶。
    • 透過選取的複製方法 (例如 PolyBase、Copy 命令) 將資料載入專用 SQL 集區。
    • 更新控制資料表中的上限標準值。

將資料載入 Azure Synapse SQL 集區

複製活動會將資料從 SQL 資料庫複製到 Azure Synapse SQL 集區。 因為此範例的 SQL 資料庫位於 Azure,所以使用 Azure Integration Runtime 讀取 SQL 資料庫的資料,並將其寫入指定的預備環境。

接著使用複製陳述式將資料從預備環境載入 Synapse 專用集區。

使用 Azure Pipelines

Azure Synapse 中的管線可用來定義已排序的活動集,以完成累加式載入模式。 觸發程序可用來啟動管線 (可手動或在指定時間觸發)。

轉換資料

由於參考架構中的範例資料庫並不大,因此我們建立了沒有分割區的複寫資料表。 針對生產工作負載,使用分散式資料表可能會改善查詢效能。 有關詳細資訊,請參閱在 Azure Synapse 中設計分散式資料表的指引。 範例指令碼會使用靜態資源類別來執行查詢。

在生產環境中,請考慮使用循環配置資源散發來建立暫存表格。 然後將資料轉換並移至具有叢集資料行存放區索引的生產資料表,以提供最佳的整體查詢效能。 資料行存放區索引已針對掃描許多記錄的查詢進行最佳化。 資料行存放區索引對於單一查閱 (也就是查閱單一資料列) 的執行效能不佳。 如果需要頻繁的執行單一查閱,可以將非叢集索引新增至資料表。 使用非叢集索引,單一查閱的執行速度會更快。 然而,與 OLTP 工作負載相比,單一查閱在資料倉儲案例中通常不太常見。 有關詳細資訊,請參閱在 Azure Synapse 中的索引資料表

注意

叢集資料行存放區資料表不支援 varchar(max)nvarchar(max)varbinary(max) 資料類型。 在此情況下,請考慮堆積或叢集索引。 您可以將這些資料列放入個別的資料表。

使用 Power BI Premium 來存取、建模和視覺化資料

Power BI Premium 支援數個選項來連接到 Azure 上的資料來源,特別是 Azure Synapse 佈建的集區:

  • 匯入:資料會匯入 Power BI 模型。
  • DirectQuery:資料會直接從關聯式儲存體提取。
  • 複合模型:結合某些資料表的匯入,以及其他資料表的 DirectQuery

此案例使用 DirectQuery 儀表板傳遞,因為使用的資料量和模型複雜度並不高,因此我們可以提供良好的使用者體驗。 DirectQuery 會將查詢委派給下方功能強大的計算引擎,並在來源上使用廣泛的安全性功能。 此外,使用 DirectQuery 可確保結果總是與最新的來源資料一致。

匯入模式提供最快的查詢回應時間,而且當模型完全符合 Power BI 記憶體時,可以容許重新整理之間的資料延遲,而且來源系統與最終模型之間可能會有一些複雜的轉換。 在此情況下,終端使用者想要完整存取最新資料,且 Power BI 重新整理時不會延遲,而且所有歷程記錄資料都大於 Power BI 資料集可處理的資料 (視容量大小而定,介於 25-400 GB 之間)。 由於專用 SQL 集區中的資料模型已經位於星狀結構描述而且不需要轉換,因此 DirectQuery 是適當的選擇。

Power BI 儀表板的螢幕擷取畫面。

Power BI Premium Gen2 可讓您處理大型模型、編頁報告、部署管線和內建 Analysis Services 端點。 您也可以擁有具有獨特價值主張的專用容量

當 BI 模型成長或儀表板複雜度增加時,您可以切換至複合模型,然後透過 混合式資料表,以及一些預先彙總的資料,開始匯入查閱資料表的元件。 可在 Power BI 中為匯入的資料集啟用查詢快取,以及利用雙資料表作為儲存模式屬性。

在複合模型中,資料集會作為虛擬傳遞層。 當使用者與視覺效果互動時,Power BI 會根據效率,在 Synapse SQL 集區的雙重儲存體中選擇記憶體或直接查詢來產生 SQL 查詢。 引擎會決定何時從記憶體內部切換到直接查詢,並將邏輯推送至 Synapse SQL 集區。 根據查詢資料表的內容,它們可以當做快取的 (匯入) 或未快取的複合模型。 挑選和選擇要快取到記憶體中的資料表、結合一或多個 DirectQuery 來源的資料,以及/或結合混合 DirectQuery 來源和匯入資料的資料。

建議:透過 Azure Synapse Analytics 佈建集區使用 DirectQuery 時:

  • 使用 Azure Synapse 結果集快取 來快取使用者資料庫中的查詢結果以供重複使用、將查詢效能降低到毫秒,並減少計算資源使用量。 使用快取的結果集的查詢不使用 Azure Synapse Analytics 中的任何並行位置,因此不計入現有並行限制。
  • 使用 Azure Synapse 具體化檢視來預先計算、儲存和維護資料,就像資料表一樣。 在具體化檢視中使用所有資料或資料子集的查詢可以取得更快的效能,而且不需要直接參考定義的具體化檢視來使用它。

考量

這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構

安全性

安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性支柱的概觀

針對想要進行雲端現代化的公司,詳盡的安全性考量清單中經常包含資料缺口、惡意程式碼感染及惡意程式碼插入等頭條。 企業客戶需要雲端提供者或服務解決方案來解決其考量,因為他們無法承擔錯誤。

此案例使用分層式安全性控制的組合來解決最嚴苛的安全性考量:網路、身分識別、隱私權和授權。 大量資料會儲存在 Azure Synapse 佈建的集區中,Power BI 會透過單一登入使用 DirectQuery。 您可使用 Microsoft Entra ID 進行驗證。 佈建的集區的資料授權也有廣泛的安全性控制。

一些常見的安全性問題包括:

  • 如何控制誰可以查看哪些資料?
    • 組織必須保護其資料,以符合聯邦、當地和公司指導方針,以降低資料外洩的風險。 Azure Synapse 提供多個資料保護功能以達到合規性。
  • 驗證使用者身分識別的選項有哪些?
    • Azure Synapse 支援各種不同的功能,可以透過存取控制驗證來控制誰可以存取什麼資料。
  • 我可以使用何種網路安全性技術來保護網路和資料的完整性、機密性及存取?
    • 若要保護 Azure Synapse,有一系列網路安全性選項可供考量。
  • 有哪些工具可以偵測威脅並通知我?
    • Azure Synapse 提供了許多威脅偵測功能 (例如:SQL 稽核、SQL 威脅偵測和弱點評量) 以審核、保護和監視資料庫。
  • 如何保護儲存體帳戶中的資料?
    • Azure 儲存體帳戶非常適合需要快速且一致回應時間的工作負載,或是每秒輸入輸出作業 (IOP) 極高的工作負載。 儲存體帳戶包含您所有 Azure 儲存體資料物件,而且有許多儲存體帳戶安全性選項。

成本最佳化

成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化支柱的概觀

本節提供有關此解決方案中涉及的不同服務的定價資訊,並提及使用範例資料集為此案例做出的決策。

Azure Synapse

Azure Synapse Analytics 無伺服器架構可讓您獨立擴縮計算和儲存體層級。 計算資源會根據使用量收費,您可以視需要擴縮或暫停這些資源。 儲存體資源會以每 TB 計費,因此當您內嵌更多資料時,成本將會增加。

Azure Pipelines

您可以在 Azure Synapse 定價頁面的 [資料整合] 索引標籤下找到 Azure Synapse 中管線的定價詳細資料。 管線的價格受到三個主要元件的影響:

  1. 資料管線活動和整合執行階段時數
  2. 資料流程叢集大小和執行
  3. 作業費用

價格會因元件或活動、頻率和整合執行階段單位數目而有所不同。

對於範例資料集,標準 Azure 託管的整合執行階段、管線核心的複製資料活動,會依照每日排程針對來源資料庫中的所有實體 (資料表) 觸發。 此案例不包含任何資料流。 由於每月管線操作數量不到 100 萬次,因此沒有營運成本。

Azure Synapse 專用集區和儲存體

您可以在 Azure Synapse 定價頁面的 [資料倉儲] 索引標籤下找到 Azure Synapse 專用集區的定價詳細資料。 在專用使用量模型中,客戶按每小時執行時間佈建的資料倉庫單位 (DWU) 單元計費。 另一個影響因素是資料儲存體成本:待用資料的大小 + 快照集 + 異地備援,如果有的話。

針對範例資料集,您可以佈建 500DWU,這可確保獲得良好的分析負載體驗。 您可以在報告工作時間內保持計算正常運作。 如果投入生產,保留資料倉儲容量對於成本管理來說是一個有吸引力的選擇。 應使用不同的技術來最大化成本/效能計量,這在上一節中已介紹。

Blob 儲存體

請考慮使用 Azure 儲存體保留容量功能來降低儲存體成本。 使用此模型時,如果您保留固定儲存體容量一或三年,就會獲得折扣。 有關詳細資訊,請參閱使用保留容量來最佳化 Blob 儲存體的成本

此案例中沒有永續性儲存體。

Power BI Premium

您可以在 Power BI 定價頁面上找到 Power BI Premium 定價詳細資料。

此案例使用內建一系列效能增強功能的 Power BI Premium工作區,以滿足嚴苛的分析需求。

卓越營運

卓越營運涵蓋部署應用程式並使其持續在生產環境中執行的作業流程。 如需詳細資訊,請參閱卓越營運支柱的概觀 (部分機器翻譯)。

DevOps 建議

  • 為生產、開發和測試環境建立單獨的資源組。 單獨的資源群組可以更輕鬆地管理部署、刪除測試部署和指派存取權限。

  • 將每個工作負載放入單獨的部署範本中,並將資源儲存在來源控制系統中。 您可以將這些範本一起部署或單獨部署,作為持續整合和持續傳遞 (CI/CD) 流程的一部分,從而使自動化流程變得更加容易。 在此架構中,有四個主要工作負載:

    • 資料倉儲伺服器和相關資源
    • Azure Synapse 管線
    • Power BI 資產:儀表板、應用程式、資料集
    • 內部部署至雲端模擬案例

    目標是針對每個工作負載建立個別的部署範本。

  • 考慮在可行的情況下暫存您的工作負載。 部署到各個階段並在每個階段執行驗證檢查,然後再進入下一階段。 這樣您就可以透過受控的方式將更新推送到生產環境,並最大限度地減少意外的部署問題。 使用藍綠部署Canary 版本策略來更新即時生產環境。

  • 有良好的復原策略來處理失敗的部署。 例如,您可以從部署歷程記錄中自動重新部署先前成功的部署。 請參閱 Azure CLI 中的--rollback-on-error旗標。

  • 建議使用 Azure 監視器來分析資料倉儲的效能,以及整個 Azure 分析平臺,以取得整合式監視體驗。 Azure Synapse Analytics 在 Azure 入口網站中提供豐富的監視體驗,讓您可看到有關資料倉儲工作負載的深入解析。 Azure 入口網站是監視資料倉庫時的建議工具,因為它為指標和記錄提供可設定的保留期、警示、建議以及可自訂的圖表和儀表板。

快速入門

效能效益

效能效率可讓您的工作負載進行調整,以有效率的方式符合使用者對其放置的需求。 如需詳細資訊,請參閱效能效率支柱概觀

本節提供調整大小決策以容納此資料集的詳細資料。

Azure Synapse 佈建的集區

有一系列的資料倉儲組態可供選擇。

資料倉儲單位 計算節點的數量 # 每個節點的散發數量 #
DW100c 1 60
-- TO --
DW30000c 60 1

若要查看擴增的效能優點,特別是針對較大的資料倉儲單位,請至少使用 1-TB 的資料集。 若要為專用 SQL 集區找到最佳的資料倉儲單位數量,請嘗試擴大和縮小規模。 載入資料後,使用不同數量的資料倉儲單位執行一些查詢。 由於擴縮速度很快,因此您可以在一小時內嘗試各種效能等級。

尋找資料倉儲單位的最佳數量

針對開發中的專用 SQL 集區,請從選取較少的資料倉儲單位開始。 您不妨從 DW400cDW200c 開始著手。 監視您的應用程式效能,觀察所選取資料倉儲單位的數量與您觀察到之效能的比較。 假設線性擴縮,並確定需要增加或減少資料倉儲單位的數量。 繼續進行調整,直到達到滿足商務需求的最佳效能等級。

擴縮 Synapse SQL 集區

Azure Pipelines

如需 Azure Synapse 中管線的可擴縮性和效能最佳化功能,以及所使用的複製活動,請參閱 複製活動效能和可擴縮性指南

Power BI Premium

本文使用 Power BI Premium Gen 2 來示範 BI 功能。 Power BI Premium 的容量 SKU 範圍從 P1 (八個 v 核心) 到目前的 P5 (128 個 v 核心)。 選取所需容量的最佳方式是進行容量載入評估、安裝 Gen 2 Metrics App 以進行持續監視,並考慮使用使用 Power BI Premium 進行自動縮放

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主要作者:

其他投稿人:

若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。

下一步