作為一款致力於成為數位化企業「最強大腦」的服務,Azure Synapse Analytics 高效高彈性的架構設計、簡單易用的操作、強大的功能和澎湃的資料處理和分析能力,能夠説明我們解決與資料準備、資料管理、資料倉庫、大數據和 AI 等方面有關的很多挑戰。

我們將通過《資料“科學家”必讀》系列文章帶領大家全面體驗 Azure Synapse Analytics。本系列共分為六期內容,本篇是其中的第二期:

  1. 第一次親密接觸:開箱初體驗,概括瞭解 Azure Synapse Analytics 的功能與價值;

  2. 圍繞 Cosmos DB 自行 DIY Azure Synapse Analytics 解決方案

  3. Azure Synapse Analytics 與 Azure Function 服務的配合使用;以及通過增量資料 CDC 對 Azure Synapse Analytics 中的資料進行更新;

  4. 借助 Azure Data Factory 工具實現資料處理水線的自動化操作;

  5. 借助 Synapse Link 的一鍵同步省略 ETL 過程,實現最新資料的直接訪問。

在上一期內容中,我們已經從整體角度,概括介紹了 Azure Synapse Analytics 的功能和價值,尤其是該服務中包含的 Synapse Link 功能。同時在上期末尾,我們提出了一種適合資料科學家的解決方案架構。從本期開始,我們將深入介紹這個架構的一些技術細節。本篇,重點將會介紹其中的 Cosmos DB Change Feed。

首先,回顧一下這個架構:

再聯想一下大家平時接觸的各類 OLTP 系統,當我們需要讓此類系統中的資料向下游資料服務進行同步時,通常會有兩種做法,全量同步增量同步
如果將 Cosmos DB 作為 OLTP 資料來源,其內置的 ChangeFeed 功能可以説明使用者捕捉資料庫中增量變化的資料,從而提升同步效率。ChangeFeed 通過將增量資料通過 SDK 暴露訪問節點,用戶可以通過 SDK 獲取增量變化資料,同時其支援中斷點(CheckPoint),這也使得用戶可以自由選擇獲取增量資料的起始位置。
Cosmos DB 資料庫支援多種資料庫引擎 API 介面,如 SQL、Mongo、Cassandra 等。過去一年間,Cosmos DB 對 ChangeFeed 的支持範圍進行了更新,從最開始只支持 SQL API 和 .NET SDK,發現到現在已經可以支援多種資料庫引擎 API 及多種開發語言,這也為開發人員提供了一致的體驗,使產品獲得更好的相容性。

為了幫助大家快速入手,本文我們選擇了 SQL API + Python 的方式為大家進行演示。
在整個演示過程中,我們先來設計一下原始資料表格的 Schema,為此創建了一個結構如下所示的商品價目表,其中包含商品 ID、QUANTITY 數量、PRICE 價格資訊。

下面我們開始準備 Cosmos DB 環境。大致上,需要分別執行如下操作:

1、創建 Cosmos DB,可參考這裡,注意在創建時需要選擇 API 為 Core(SQL)。

2、開啟 Synapse Link 後續使用,詳情可參考這裡

3、記錄 Cosmos DB 訪問金鑰,詳情可參考這裡。請按照文檔獲取 Master Key 並替換後續代碼中 Config.py 的 Master_key 參數。

4、準備 Config.py 設定檔。其中 Host 在 Azure 門戶中選中你所創建的 Cosmos DB,在 Overview 頁面 URI 中獲取。Master_key 替換為步驟 3 記錄的金鑰,database_id 和 container_id 可自行設定,例如可命名為“demo”。

5.創建 Database 和 Container:

6、生成模擬演示資料,演示中插入了 10 條 demo 資料:

7、通過 ChangeFeed SDK 讀取增量變更資料,在 query_items_change_feed 函數中帶入了參數 is_start_from_beginning 表示從頭開始讀取增量變化資料。

8、通過中斷點讀取 ChangeFeed 增量變更資料,通過獲取簽署 ChangeFeed 返回中的 etag 來標記下一次讀取的起始位置,演示中通過再次插入兩條記錄來出發變更。

至此,我們通過 SDK 獲取增量變化資料的基本方式已經走通了。

回到開篇的架構中,我們還需要將增量資料持續的更新到下游 OLAP 資料倉庫中。一種做法是,將上述代碼邏輯進一步完善將其跑在虛擬機器中持續執行;另一種方法可直接通過 Azure Functions 來託管上述抽取增量變化資料邏輯。
下期文章將會介紹如何通過 Azure Functions 服務實現這一目標。借助 Azure Functions 服務,我們可以實現代碼運行環境的託管,按需執行(通過定期輪詢的方式),以及通過內置連接器簡化代碼開發。
最後需要注意,上述演示中只是簡單介紹了 Cosmos ChangeFeed 功能,大家可以參考下述連結進一步瞭解該功能。此外需要注意,Cosmos DB ChangeFeed 目前還不支持捕獲 Delete 條目,目前只能通過一些比較間接的方式來實現,這裡不做贅述,感興趣的小夥伴可訪問下列 ChangeFeed 介紹連結。
不過對 Delete 的支持目前已經在支持計畫中,詳見這裡

其他資料參考:

熱門新聞

Advertisement