Azure IoT 中樞 是裝載於雲端的受控服務,可作為IoT應用程式和所管理裝置之間雙向通訊的中央訊息中樞。 Azure 數據總管會使用其事件中樞相容的裝置到雲端訊息端點,從客戶管理的 IoT 中樞 持續擷取。
IoT 擷取管線會經過數個步驟。 首先,您會建立 IoT 中樞,並將裝置註冊至該裝置。 接著,您會在 Azure 數據總管中建立目標數據表,其中 特定格式的數據會使用指定的 擷取屬性來內嵌。 IoT 中樞連線必須知道 事件路由 ,才能連線到 Azure 數據總管數據表。 數據會根據 事件系統屬性對應,內嵌選取的屬性。 此程式可以透過 Azure 入口網站、以程序設計方式使用 C# 或 Python,或使用 Azure Resource Manager 範本來管理。
如需 Azure 數據總管中數據擷取的一般資訊,請參閱 Azure 數據總管數據擷取概觀。
資料格式
內嵌屬性
擷取屬性會指示擷取程式將數據路由傳送到何處,以及如何處理數據。 您可以使用 EventData.Properties 來指定事件的擷取屬性。 您可以設定下列屬性:
屬性 | 說明 |
---|---|
資料庫 | 目標資料庫的名稱(區分大小寫)。 如果您想要將數據傳送至與建立數據連接的資料庫不同的資料庫,可以使用這個屬性(預設資料庫)。 若要將數據路由傳送至多個資料庫,您必須先將連線設定為多資料庫連線。 如需詳細資訊,請參閱 事件路由。 |
Table | 現有目標數據表的名稱(區分大小寫)。 覆 Table 寫窗格上的 Data Connection 集合。 |
格式 | 資料格式。 覆 Data format 寫窗格上的 Data Connection 集合。 |
IngestionMappingReference | 要使用的現有 擷取對應 名稱。 覆 Column mapping 寫窗格上的 Data Connection 集合。 |
編碼方式 | 數據編碼,預設值為UTF8。 可以是任何 .NET 支援的編碼方式。 |
注意
只有在您建立數據連線之後才會加入佇列的事件才會內嵌。
事件路由
當您建立叢集的數據連線時,您可以指定要傳送內嵌數據的位置路由。 預設路由會傳送至與目標資料庫相關聯之 連接字串 中指定的目標數據表。 數據的預設路由也稱為 靜態路由。 您可以使用事件資料屬性來指定資料的替代路由。
將事件數據路由傳送至替代資料庫
默認會關閉將數據路由傳送至替代資料庫。 若要將數據傳送至不同的資料庫,您必須先將連接設定為多資料庫連接。 如需如何在 Azure 入口網站 中執行這項操作的範例,請參閱開啟多資料庫路由。 用來允許資料庫路由的使用者、群組、服務主體或受控識別,至少必須具有 叢集的參與者 角色和寫入許可權。
若要指定替代資料庫,請設定資料庫擷取屬性。
警告
指定替代資料庫而不將連接設定為多資料庫數據連線,會導致擷取失敗。
開啟多資料庫路由
您必須先允許將數據路由傳送至多個資料庫,才能設定替代目標資料庫。 使用下列步驟來允許將資料路由傳送至替代資料庫:
在 Azure 入口網站 中,流覽至您的叢集。
選取 [資料庫>數據連線]。
建立或編輯數據連線,然後在 [數據連線] 窗格的 [數據路由設定] 底下,開啟 [允許將數據路由至其他資料庫 (多資料庫數據連接) 選項]。
將事件數據路由傳送至替代數據表
您也可以使用事件屬性,為每個事件指定目標數據表屬性。 聯機會動態路由傳送 EventData.Properties 中指定的數據,並覆寫此事件的靜態屬性。 若要指定替代數據表,請設定 Table 擷取屬性。
注意
如果 [我的數據] 包含選取的路由資訊 ,您必須在事件屬性中提供必要的路由資訊。
事件系統屬性對應
系統屬性是一個集合,用來儲存 IoT 中樞 服務在收到事件時所設定的屬性。 Azure 數據總管 IoT 中樞 聯機會在數據表的數據登陸中內嵌選取的屬性。
注意
針對 csv
對應,屬性會依照下表所列的順序,在記錄的開頭加入。 針對 json
對應,會根據下表中的屬性名稱新增屬性。
系統屬性
IoT 中樞 針對裝置到雲端 IoT 中樞 訊息公開下列系統屬性:
屬性 | 說明 |
---|---|
message-id | 使用者可針對用於要求-回復模式之訊息設定的識別碼。 格式:區分大小寫的字串,最長為 128 個字元,可使用 ASCII 7 位元英數字元和 {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''} 。 |
iothub-enqueuedtime | IoT 中樞收到裝置到雲端訊息的日期和時間。 |
user-id | 用來指定訊息來源的識別碼。 當訊息由 IoT 中樞 產生時,這個值會設定為 {iot hub name} 。 |
iothub-connection-device-id | IoT 中樞在裝置到雲端的訊息上設定的識別碼。 它包含傳送訊息之裝置的 deviceId。 |
iothub-connection-module-id | IoT 中樞在裝置到雲端的訊息上設定的識別碼。 它包含傳送訊息之裝置的 moduleId。 |
iothub-connection-auth-generation-id | IoT 中樞在裝置到雲端的訊息上設定的識別碼。 包含傳送訊息之裝置的 connectionDeviceGenerationId (依據裝置身分識別屬性)。 |
iothub-connection-auth-method | IoT 中樞在裝置到雲端的訊息上設定的驗證方法。 此屬性包含用來驗證傳送訊息之裝置的驗證方法相關資訊。 |
iothub-app-iothub-creation-time-utc | 允許裝置在批次中傳送資料時傳送事件建立時間。 |
iothub-creation-time-utc | 允許裝置在依次傳送一封訊息時傳送事件建立時間。 |
dt-dataschema | 此值是由裝置到雲端訊息上的 IoT 中樞所設定。 其包含裝置連線中設定的裝置型號識別碼。 |
dt-subject | 傳送裝置到雲端訊息的元件名稱。 |
如果您在數據表的 [數據源] 區段中選取 [事件系統屬性],則必須在數據表架構和對應中包含屬性。
架構對應範例
數據表架構對應範例
如果您的資料報含三個資料列 (Timespan
、 Metric
和 Value
) 以及您包含的屬性是 iothub-connection-device-id
和 sequence-number
,請使用此命令來建立或改變資料表架構:
.create-merge table TestTable (TimeStamp: datetime, Metric: string, Value: int, IotHubDeviceId:long, IotHubSequenceNumber:long)
CSV 對應範例
執行下列命令,將數據新增至記錄的開頭。 請注意序數值。
.create table TestTable ingestion csv mapping "CsvMapping1"
'['
' { "column" : "TimeStamp", "Properties":{"Ordinal":"2"}},'
' { "column" : "Metric", "Properties":{"Ordinal":"3"}},'
' { "column" : "Value", "Properties":{"Ordinal":"4"}},'
' { "column" : "IotHubDeviceId", "Properties":{"Ordinal":"0"}},'
' { "column" : "IotHubSequenceNumber", "Properties":{"Ordinal":"1"}}'
']'
JSON 對應範例
數據會使用系統屬性對應來新增。 執行以下命令:
.create table TestTable ingestion json mapping "JsonMapping1"
'['
' { "column" : "TimeStamp", "Properties":{"Path":"$.timestamp"}},'
' { "column" : "Metric", "Properties":{"Path":"$.metric"}},'
' { "column" : "Value", "Properties":{"Path":"$.metric_value"}},'
' { "column" : "IotHubDeviceId", "Properties":{"Path":"$.iothub-connection-device-id"}},'
' { "column" : "IotHubSequenceNumber", "Properties":{"Path":"$.sequence-number"}}'
']'
事件使用者屬性對應
不支援使用使用者屬性擴充 IoT 中樞 事件承載。 請考慮在事件主體上游內嵌用戶屬性。
IoT 中樞 連線
注意
為了獲得最佳效能,請在與 Azure 數據總管叢集相同的區域中建立所有資源。
建立 IoT 中樞
如果您還沒有IoT中樞, 請建立IoT中樞。 您可以透過 Azure 入口網站、以程序設計方式使用 C# 或 Python,或使用 Azure Resource Manager 範本來管理與 IoT 中樞 的連線。
注意
- 計數
device-to-cloud partitions
不可變更,因此設定分割區計數時,您應該考慮長期調整。 - 取用者群組每個取用者都必須是唯一的。 建立專用於 Azure 數據總管連線的取用者群組。 在 Azure 入口網站 中尋找您的資源,然後移至新增
Built-in endpoints
取用者群組。 - 資料聯機會使用 IoT 中樞
Built-in endpoint
。 如果您設定任何其他Message routing endpoint
,除非路由建立至該端點,Built-in endpoint
否則訊息會停止流向 。 若要確保新增新的路由時,訊息會繼續流向內建端點,請設定端點的events
路由。 如需詳細資訊,請參閱 IoT 中樞 疑難解答訊息路由。