將IoT數據匯出至 Azure 資料總管
本文說明如何設定數據匯出以將數據傳送至 Azure 數據總管。
使用這項功能,從IoT Central 應用程式持續匯出篩選和擴充的IoT數據。 資料匯出會即時將變更推送至雲端解決方案的其他部分,以進行經常性路徑深入解析、分析和儲存體。
例如,您可以:
- 以近乎即時的方式持續匯出遙測、屬性變更、裝置連線、裝置生命週期、裝置範本生命週期,以及以 JSON 格式稽核記錄數據。
- 篩選資料流以匯出符合自訂條件的資料。
- 使用來自裝置的自訂值和屬性值來擴充資料流。
- 轉換數據流 以修改其圖形和內容。
提示
當您開啟數據匯出時,您只會從該刻起取得數據。 若要保留更多歷程記錄數據,請提早開啟數據匯出。 若要在關閉數據匯出時手動匯出數據,請參閱 如何使用IoT Central REST API來查詢裝置。
注意
在某些情況下,導出訊息最多可能需要 60 秒的時間。 此時間是從IoT Central 從基礎IoT中樞接收訊息到傳遞至目的地端點時所測量。
必要條件
若要使用資料匯出功能,您必須具有 數據匯出 許可權。
設定 Azure 數據總管匯出目的地
您可以使用 Azure 資料總管叢集 或 Azure Synapse 數據總管集區。 若要深入瞭解,請參閱 Azure Synapse 數據總管與 Azure 數據總管之間的差異為何?。
IoT Central 會近乎即時地將數據匯出至 Azure 數據總管叢集中的資料庫數據表。 數據位於訊息本文中,並以 JSON 格式編碼為 UTF-8。 您可以在IoT Central中新增 轉換 ,以匯出符合資料表架構的數據。
若要在 Azure 數據總管入口網站中查詢匯出的數據,請流覽至資料庫並選取 [ 查詢]。
下列影片將逐步引導您將數據匯出至 Azure 數據總管:
連線選項
Azure 數據總管目的地可讓您設定與 服務主體 或 受控識別的連線。
受控識別更安全,因為:
- 您不會將資源的認證儲存在 IoT Central 應用程式中的 連接字串 中。
- 認證會自動系結至IoT Central 應用程式的存留期。
- 受控識別會定期自動輪替其安全性密鑰。
IoT Central 目前使用 系統指派的受控識別。
當您設定受控識別時,組態會包含 範圍 和 角色:
- 範圍會定義您可以使用受控識別的位置。 例如,您可以使用 Azure 資源群組作為範圍。 在此情況下,IoT Central 應用程式和目的地都必須位於相同的資源群組中。
- 角色會定義IoT Central 應用程式在目的地服務中授與的許可權。 例如,若要讓IoT Central 應用程式將數據傳送至事件中樞,受控識別需要 Azure 事件中樞數據傳送者角色指派。
下列影片提供有關系統指派受控識別的詳細資訊:
警告
若要匯出至 Blob 記憶體,請勿使用 儲存體 帳戶參與者,如影片所示。 請改用 儲存體 Blob 數據參與者角色。
建立 Azure 數據總管目的地
本文說明如何使用 Azure CLI 建立受控識別。 您也可以使用 Azure 入口網站 來建立受控識別。
如果您沒有要導出的現有 Azure 數據總管資料庫,請遵循下列步驟。 您有兩個選項可建立 Azure 資料總管資料庫:
- 建立新的 Azure 數據總管叢集和資料庫。 若要深入瞭解,請參閱 Azure 數據總管快速入門。 記下叢集 URI 和您建立的資料庫名稱,您需要下列步驟中的這些值。
- 建立新的 Azure Synapse 數據總管集區和資料庫。 若要深入瞭解,請參閱 Azure 數據總管快速入門。 記下集區 URI 和您建立的資料庫名稱,您需要下列步驟中的這些值。
若要設定可讓 IoT Central 應用程式安全地將資料匯出至 Azure 資源的受控識別:
建立IoT Central應用程式的受控識別,以用來連線到您的資料庫。 使用 Azure Cloud Shell 來執行下列命令:
az iot central app identity assign --name {your IoT Central app name} \ --resource-group {resource group name} \ --system-assigned
記下 命令的
principalId
和tenantId
輸出。 您可以在下列步驟中使用這些值。設定資料庫許可權以允許來自IoT Central 應用程式的連線。 使用 Azure Cloud Shell 來執行下列命令:
az kusto database-principal-assignment create --cluster-name {name of your cluster} \ --database-name {name of your database} \ --resource-group {resource group name} \ --principal-assignment-name {name of your IoT Central application} \ --principal-id {principal id from the previous step} \ --principal-type App --role Admin \ --tenant-id {tenant id from the previous step}
提示
如果您使用 Azure Synapse,請參閱
az synapse kusto database-principal-assignment
。在資料庫中建立數據表,其中包含您要匯出之數據的合適架構。 下列範例查詢會建立名為 的
smartvitalspatch
數據表。 若要深入瞭解,請參閱 在IoT Central 應用程式中轉換資料以進行匯出:.create table smartvitalspatch ( EnqueuedTime:datetime, Message:string, Application:string, Device:string, Simulated:boolean, Template:string, Module:string, Component:string, Capability:string, Value:dynamic )
(選擇性)若要加速將數據內嵌至 Azure 資料總管資料庫:
流覽至 Azure 資料總管叢集的 [設定] 頁面。 然後啟用 [ 串流擷取 ] 選項。
執行下列查詢來改變數據表原則,以啟用串流擷取:
.alter table smartvitalspatch policy streamingingestion enable
若要在 IoT Central 的 [數據匯出 ] 頁面上建立 Azure 數據總管目的地:
選取 [+ 新增目的地]。
選取 [Azure 數據總管 ] 作為目的地類型。
輸入您的 Azure 資料總管叢集或集區 URL、資料庫名稱和數據表名稱。 選取 [系統指派的受控識別 ] 作為授權類型。
提示
獨立 Azure 資料總管的叢集 URL 看起來像
https://<ClusterName>.<AzureRegion>.kusto.windows.net
。 Azure Synapse 資料總管集區的叢集 URL 看起來像https://<DataExplorerPoolName>.<SynapseWorkspaceName>.kusto.azuresynapse.net
。
如果您沒有看到抵達目的地服務的數據,請參閱 針對來自 Azure IoT Central 應用程式的數據匯出問題進行疑難解答。
設定數據匯出
既然您有要匯出數據的目的地,請在IoT Central 應用程式中設定資料匯出:
登入IoT Central 應用程式。
在左窗格中,選取 [數據匯出]。
提示
如果您沒有在左窗格中看到 [資料匯出 ],則您沒有在應用程式中設定數據導出的許可權。 與系統管理員交談以設定數據匯出。
選取 [+ 新增匯出]。
輸入新導出的顯示名稱,並確定數據匯出已啟用。
選擇要匯出的數據類型。 下表列出支援的數據匯出類型:
資料類型 描述 資料格式 遙測 近乎即時地從裝置導出遙測訊息。 每個導出的訊息都包含原始裝置訊息的完整內容,標準化。 遙測訊息格式 屬性變更 近乎即時地導出裝置和雲端屬性的變更。 若為唯讀裝置屬性,則會匯出報告值的變更。 針對讀寫屬性,會匯出報告和所需值。 屬性變更訊息格式 裝置連線 匯出已連線和中斷連線的裝置事件。 裝置連線訊息格式 裝置生命週期 匯出已註冊、刪除、布建、啟用、停用、displayNameChanged 和 deviceTemplateChanged 事件的裝置。 裝置生命週期變更訊息格式 裝置範本生命週期 匯出已發佈的裝置範本變更,包括已建立、更新和刪除。 裝置範本生命週期變更訊息格式 稽核記錄 應用程式內實體的使用者起始更新記錄。 若要深入瞭解,請參閱 使用稽核記錄來追蹤IoT Central應用程式中的活動 稽核記錄訊息格式 選擇性地新增篩選,以減少匯出的數據量。 每個資料匯出類型都有不同類型的篩選:
資料類型 可用的篩選條件 遙測 - 依裝置名稱、裝置標識碼、裝置範本篩選,以及裝置是否模擬
- 篩選數據流,只包含符合篩選條件的遙測
- 篩選數據流,只包含符合篩選條件之屬性的裝置遙測
- 篩選數據流,只包含包含 符合篩選條件之訊息屬性 的遙測。 訊息屬性 (也稱為 應用程式屬性)會在每個遙測訊息的索引鍵/值組袋中傳送。 若要建立訊息屬性篩選,請輸入您要尋找的訊息屬性索引鍵,並指定條件。 只會匯出具有符合指定篩選條件之屬性的遙測訊息。 深入瞭解來自 IoT 中樞 檔案的應用程式屬性
屬性變更 - 依裝置名稱、裝置標識碼、裝置範本篩選,以及裝置是否模擬
- 篩選數據流,只包含符合篩選條件的屬性變更
裝置連線 - 依裝置名稱、裝置標識碼、裝置範本、組織,以及模擬裝置的篩選
- 篩選數據流,只包含符合篩選條件之屬性的裝置變更
裝置生命週期 - 依裝置名稱、裝置標識碼、裝置範本進行篩選,以及裝置是否已布建、啟用或模擬
- 篩選數據流,只包含符合篩選條件之屬性的裝置變更
裝置範本生命週期 - 依裝置範本篩選
稽核記錄 N/A 或者,使用額外的索引鍵/值組元數據擴充導出的訊息。 下列擴充適用於遙測、屬性變更、裝置連線能力,以及裝置生命周期數據匯出類型:
- 自訂字串:將自定義靜態字串新增至每個訊息。 輸入任何索引鍵,然後輸入任何字串值。
- 屬性,它會新增至每個訊息:
- 裝置元數據,例如裝置名稱、裝置範本名稱、已啟用、組織、布建和模擬。
- 目前裝置向每個訊息報告屬性或雲端屬性值。 如果導出的訊息來自沒有指定屬性的裝置,則導出的訊息不會取得擴充。
設定匯出目的地:
選取 [+ 目的地 ] 以新增您已建立的目的地,或選取 [ 建立新的目的地]。
若要在匯出資料之前轉換您的數據,請選取 [+ 轉換]。 若要深入瞭解,請參閱 在IoT Central應用程式中轉換資料以進行匯出。
選取 [+ 目的地 ] 以將最多五個目的地新增至單一導出。
完成匯出設定后,請選取 [ 儲存]。 幾分鐘后,您的數據會出現在目的地中。
監視導出
在 IoT Central 中, [資料匯出 ] 頁面可讓您檢查匯出的狀態。 您也可以使用 Azure 監視器 來查看您要匯出的數據量,以及任何匯出錯誤。 您可以使用 REST API、PowerShell 中的查詢或 Azure CLI,來存取 Azure 入口網站 圖表中的匯出和裝置健康情況計量。 目前,您可以在 Azure 監視器中監視下列資料匯出計量:
- 套用篩選之前要導出的訊息數目。
- 通過篩選的訊息數目。
- 成功匯出至目的地的訊息數目。
- 找到的錯誤數目。
若要深入了解,請參閱監視應用程式健康情況。
資料格式
下列各節說明匯出資料的格式:
遙測格式
每個導出的訊息都包含裝置在訊息本文中傳送的完整訊息正規化形式。 訊息採用 JSON 格式,並編碼為 UTF-8。 每個訊息中的資訊包括:
applicationId
:IoT Central 應用程式的標識碼。messageSource
:訊息的來源 -telemetry
。deviceId
:傳送遙測訊息之裝置的標識碼。schema
:承載架構的名稱和版本。templateId
:指派給裝置之裝置範本的標識符。enqueuedTime
:IoT Central 收到此訊息的時間。enrichments
:在匯出上設定的任何擴充。module
:傳送此訊息的IoT Edge模組。 只有當訊息來自IoT Edge模組時,才會顯示此欄位。component
:傳送此訊息的元件。 只有在訊息中傳送的功能已模型化為裝置範本中的元件時,才會顯示此欄位messageProperties
:裝置與訊息一起傳送的其他屬性。 這些屬性有時稱為 應用程式屬性。 請從 IoT 中樞 檔深入瞭解。
訊息屬性
遙測訊息具有元數據的屬性,以及遙測承載。 上一個代碼段顯示系統訊息的範例,例如 deviceId
和 enqueuedTime
。 若要深入了解系統訊息屬性,請參閱 D2C 的系統屬性 IoT 中樞 訊息。
如果您需要將自定義元數據新增至遙測訊息,您可以將屬性新增至遙測訊息。 例如,當裝置建立訊息時,您需要新增時間戳。
下列代碼段示範如何在裝置上建立屬性時,將 屬性新增 iothub-creation-time-utc
至訊息:
重要
此時間戳的格式必須是UTC,且沒有時區資訊。 例如, 2021-04-21T11:30:16Z
有效, 2021-04-21T11:30:16-07:00
無效。
async function sendTelemetry(deviceClient, index) {
console.log('Sending telemetry message %d...', index);
const msg = new Message(
JSON.stringify(
deviceTemperatureSensor.updateSensor().getCurrentTemperatureObject()
)
);
msg.properties.add("iothub-creation-time-utc", new Date().toISOString());
msg.contentType = 'application/json';
msg.contentEncoding = 'utf-8';
await deviceClient.sendEvent(msg);
}
屬性變更格式
每個訊息或記錄都代表裝置和雲端屬性的變更。 匯出訊息中的資訊包括:
applicationId
:IoT Central 應用程式的標識碼。messageSource
:訊息的來源 -properties
。messageType
cloudPropertyChange
:、devicePropertyDesiredChange
或devicePropertyReportedChange
。deviceId
:傳送遙測訊息之裝置的標識碼。schema
:承載架構的名稱和版本。enqueuedTime
:IoT Central 偵測到此變更的時間。templateId
:指派給裝置之裝置範本的標識符。properties
:已變更的屬性陣列,包括屬性的名稱和變更的值。 如果屬性是在元件或IoT Edge模組內建立模型,則會包含元件和模組資訊。enrichments
:在匯出上設定的任何擴充。
裝置連線能力變更格式
每個訊息或記錄都代表來自單一裝置的連線事件。 匯出訊息中的資訊包括:
applicationId
:IoT Central 應用程式的標識碼。messageSource
:訊息的來源 -deviceConnectivity
。messageType
connected
:或disconnected
。deviceId
:已變更之裝置的標識碼。schema
:承載架構的名稱和版本。templateId
:指派給裝置之裝置範本的標識符。enqueuedTime
:此變更發生在IoT Central的時間。enrichments
:在匯出上設定的任何擴充。
裝置生命周期變更格式
每個訊息或記錄都代表單一裝置的一項變更。 匯出訊息中的資訊包括:
applicationId
:IoT Central 應用程式的標識碼。messageSource
:訊息的來源 -deviceLifecycle
。messageType
:發生的變更類型。 其中一個:、、、provisioned
enabled
、disabled
、displayNameChanged
、 和deviceTemplateChanged
。deleted
registered
deviceId
:已變更之裝置的標識碼。schema
:承載架構的名稱和版本。templateId
:指派給裝置之裝置範本的標識符。enqueuedTime
:此變更發生在IoT Central的時間。enrichments
:在匯出上設定的任何擴充。
裝置範本生命週期變更格式
每個訊息或記錄都代表單一已發佈裝置範本的一項變更。 匯出訊息中的資訊包括:
applicationId
:IoT Central 應用程式的標識碼。messageSource
:訊息的來源 -deviceTemplateLifecycle
。messageType
created
:、updated
或deleted
。schema
:承載架構的名稱和版本。templateId
:指派給裝置之裝置範本的標識符。enqueuedTime
:此變更發生在IoT Central的時間。enrichments
:在匯出上設定的任何擴充。
稽核記錄檔格式
每個稽核記錄訊息代表IoT Central應用程式內可稽核實體的使用者起始變更。 匯出訊息中的資訊包括:
actor
:修改實體之使用者的相關信息。applicationId
:IoT Central 應用程式的標識碼。messageSource
:訊息的來源 -audit
。messageType
:發生的變更類型。 的其中一個:updated
、created
deleted
、 。updated
:只有在 是updated
時才messageType
存在。 提供有關更新的詳細數據。resource
:已修改實體的詳細數據。schema
:承載架構的名稱和版本。deviceId
:已變更之裝置的標識碼。enqueuedTime
:此變更發生在IoT Central的時間。enrichments
:在匯出上設定的任何擴充。
下一步
既然您已瞭解如何匯出至 Azure 數據總管,建議的下一個步驟是瞭解如何 匯出至 Webhook。