logo头像

Edward.K Thinking

透過Azure Data Factory備份Cosmos DB到Data Lake

之前寫一篇[Azure Cosmos DB to Cosmos DB的資料轉移工具],可以透過工具去轉移Cosmos DB到其他地方,不過,如果資料量大時候,就必須讓電腦開很久去跑,如果透過服務就會更方便,所以,如果想要透過Azure服務備份Cosmos DB資料或是轉移,可以使用Azure Data Factory,下面是我跑出來的範例,這時候是分別分開備份五天的資料,備份時間長短也會取決你設定Cosmos DB的RU大小

要設定這機制,在Azure Data Factory中共分成三個步驟

  • 設定Cosmos DB的DataSet
  • 設定Azure Data Lake的DataSet
  • 設定Azure Data Dafactory Pipelines

設定Cosmos DB的DataSet


在這部分當然必須先要設定Connections到你要的Cosmos DB中,設定完後就可以開始設定DataSet,在Cosmos Db主要是以文件型態,當然也是json的格式,在這邊我們想要完整地把Cosmos DB的資料一模一樣的備份到Data Lake,甚至連儲存的格式也是採用Json格式。這樣好處是,當哪一天需要把這些資料換到另一個Cosmos DB,就可以直接複製過去,要到其他DB也只要須轉型就可以。


Connection設定,把連線DB和Collection名稱填好


Schema地方不需要設定,因為是要把整份文件備份過去


這樣就設定好Cosmos DB 的Data Set

設定Azure Data Lake的DataSet


在這部分當然必須先要設定Connections到你要的Azure Data Lake,並設定好要備份的路徑或是建立相關資料夾在Azure Data Lake裡面。


Connection設定,把連線Azure Data Lake和路徑填好,因為,這邊在備份模式,是針對Cosmos DB內的每天資料進行備份,所以,也希望備份到Azure Data Lake的檔案,可以用日期區分。所以,檔案名稱會用變數方式填入。而這邊變數@dataset().FileDateName是透過Pipeline傳入的。FileDateName則是要在DataSet的Parameters中加入FileDateName


在這DataSet另一個重點在於設定Format Setting,這部分務必選擇Json Format以及在File Patten中設定Array of objects,這樣儲存的資料格式才會與Cosmos DB內的文件格式相同


這裡的Schema同樣的是不需要去設定的

設定Azure Data Dafactory Pipelines


設定好兩邊的DataSet之後,就可以來設定Pipeline,需要透過Query去查詢一個要備份日期出來給CosmosDB找出對應日期的資料,給Azure Data Lake作為檔案名稱的規則


開始建立Pipeline的Source,選擇先前建立好的CosmosDB DataSet

在Slink部分,則設定對應的Azure Data Lake,這時候需要把檔案命名的參數放入

就如之前所說,因為要直接複製,所以在Pipline地方也不需要做Mapping的設定

這樣方式就可以直接把文件儲存到Azure Data Lake中。如果做每天備份則只需要設定相對應排程就可以,此外,感覺速度也會比用工具快一點

上一篇