logo头像

Edward.K Thinking

ASA送資料避免在Azure Cosmos DB產生重複資料


在IoT解決方案中,會透過IoT Hub搭配Azure Stream Analytics把資料送到Storage Table或是Cosmos DB,如果今日Output的地方,如果是Azure SQL DB,在Azure SQL DB設定主鍵,則可以避免重複資料被寫入資料庫中,為什麼要這樣做這動作,在一般情境上不太可能會有重複資料被塞入到資料庫中,大都可以在程式面被處理。不過,在IoT方案中,畢竟資料量很大且快速,再加上很多現場狀況是很難處理(設備不一定可以改成你要的接收資料方式),所以,在某些情況如果有遺失資料,只好補送一個範圍資料(其實也不知道缺甚麼資料),這時候就要避免重複資料被寫入到Cosmos DB。


要設定這件事情,主要是在Azure Stream Analytics這邊進行設定,在output的地方設定,主要是設定文件識別碼


這主要是說在Cosmos DB中,哪個是主要Key,在這Key相同時候,就不需要再把資料寫入,其實,它在背後機制是用Update的,就是相同Key資料,就用更新方式去更新物件。通常在IoT方案中,重複送的資料大部分不會有前後時間點不同造成資料內容異常的,所以,這個Key設定就很重要。在這邊設定基本上只能設定一組欄位。如果今日你的Key是複合式欄位才能表達唯一值的時候,可以在Azure Stream Analytics的規則內建置,如下:


把欄位複合起來變成一個欄位,然後放到文件識別碼中,這樣就可以避免有重複資料被寫入。此外,既然它背後是透過更新文件方式進行,換句話說,如果你把一份資料分成兩份去發送,只要這兩份資料具有相同的Key,在Cosmos DB中,就會被整合成一份檔案,在某些情境下是很好用的一個作法

上一篇