【Azure Event Hub】Event Hub的Process Data頁面無法通過JSON格式預覽資料

2023-07-24 18:07:02

問題描述

在Event Hub的門戶頁面中,可以通過Process Data頁面檢視Event Hub中的資料,但是當使用JSON格式預覽時(View in JSON),卻出現錯誤。

訊息一: No data was found for preview from 'test01'. Make sure the input has recently received data and the correct format of those events has been selected. [SessionID: 6b15d63464bf41f9b6e6c758f58a26ef 

訊息二:Source '<unknown_location>' had 1 occurrences of kind 'InputDeserializerError.InvalidData' between processing times '2023-07-24T06:24:42.5057556Z' and '2023-07-24T06:24:42.5057556Z'. Could not deserialize the input event(s) from resource 'Partition: [0], Offset: [0], SequenceNumber: [0]' as Json. Some possible reasons: 1) Malformed events 2) Input source configured with incorrect serialization format

 

只是,在Event Hub中是存有資料的。如下圖左邊的Incoming Message中,有98條資料,但是在右邊的Query頁面中,卻無法正確顯示。

 

問題解答

在錯誤訊息二中,出現了「 Input source configured with incorrect serialization format 」指明瞭資料解析為JSON過程中出現了不正確的序列化格式。這裡就很明確的說明了無資料顯示的原因是資料格式錯誤引起。 為了進一步調查這個問題,就需要通過其他方式獲取出訊息的內容,然後檢查為什麼它不是一個正確的JSON格式。

方式一:在Process Data頁面中,選擇 View by CSV - comma(,) 可以看見內容,但是發現格式很不一致,無法準確判斷。

方式二:為了準確的獲取到Event Hub中的資料,可以使用Azure Event Hub官方推薦的一個工具 Service Bus Explorer(下載地址:https://sourceforge.net/projects/service-bus-explorer.mirror/)來獲取Event Hub中的資料。

操作動畫演示:

在上圖的工具中,直接檢視到JSON的格式中,存在兩個 Test/test, 雖然它們的首字母分別為大小寫。

但是從測試的結果證明: Event Hub Process Data頁面不識別大小寫。所以在進行格式轉換的時候丟擲了 「InputDeserializerError.InvalidData : Input source configured with incorrect serialization format 」

 

最後確認

由於Event Hub的Process Data頁面使用的是Azure中另一個服務ASA(流分析)來處理資料,在處理時識別不了有大小寫不敏感的JSON字串。由於ASA是大小寫不敏感的流處理工具,所以在轉換JSON時會忽略大小寫,如果有相同的欄位會解析失敗。

所以,如果要檢視資料,可以修改傳送到Event Hub中的資料內容,或者通過Service Bus Explorer工具,及其他使用SDK自行編寫的消費端程式碼。

 

參考資料

Service  Bus Explorer : https://sourceforge.net/projects/service-bus-explorer.mirror/

Use Service Bus Explorer to run data operations on Service Bus : https://learn.microsoft.com/en-us/azure/service-bus-messaging/explorer