IoT Hub数据连接

Azure IoT Hub是托管在云中的托管服务,充当 IoT 应用程序与所管理设备之间的双向通信的中心消息中心。 Azure Data Explorer使用客户管理的 IoT 中心,通过其与设备到云消息兼容的事件中心内置终结点持续引入。

IoT 引入管道需要完成几个步骤。 首先,创建 IoT 中心并向其中注册设备。 然后,在Azure Data Explorer中创建一个目标表,使用给定的数据引入属性,以特定格式将数据引入其中。 IoT Hub连接需要知道事件路由才能连接到 Azure Data Explorer表。 根据事件系统属性映射,使用选定的属性嵌入数据。 可以通过 Azure portalC#Python 或使用 Azure Resource Manager 模板来管理此过程。

有关Azure Data Explorer中的数据引入的一般信息,请参阅 Azure Data Explorer 数据引入概述

数据格式

摄取属性

引入属性通过指定数据路由位置以及如何处理数据来指导引入过程。 可以使用 EventData.Properties 为事件指定引入属性。 设置以下属性:

属性 说明
数据库 目标数据库的名称(区分大小写)。 如果要将数据发送到与在 (默认数据库)上创建的数据连接的数据库不同的数据库,请使用此属性。 若要将数据路由到多个数据库,必须先将连接设置为多数据库连接。 有关详细信息,请参阅事件路由
现有目标表的名称(区分大小写)。 替代“Table”窗格上设置的“Data Connection”。
格式 数据格式。 替代“Data format”窗格上设置的“Data Connection”。
IngestionMappingReference 要使用的现有引入映射的名称。 替代“Column mapping”窗格上设置的“Data Connection”。
编码 数据编码,默认值为 UTF8。 可以是任何.NET支持的编码

注意事项

只有在创建数据连接之后排入队列的事件才会被引入处理。

事件路由

在与群集建立数据连接时,请指定要将引入的数据发送到何处的路由。 默认路由将数据发送到与目标数据库关联的connection string中指定的目标表。 数据的默认路由也称为静态路由。 可以使用事件数据属性为数据指定备用路由。

将事件数据路由到备用数据库

默认已禁用将数据路由到备用数据库。 若要将数据发送到其他数据库,请先将连接设置为多数据库连接。 有关如何在 Azure 门户 中启用此功能的示例,请参阅 启用多数据库路由。 用于进行数据库路由的用户、组、服务主体或托管身份必须至少具备群集的参与者角色和写入权限。

若要指定备用数据库,请设置数据库引入属性

警告

如果指定备用数据库但未将连接设置为多数据库数据连接,则引入将失败。

启用多数据库路由

必须先允许将数据路由到多个数据库,然后才能设置备用目标数据库。 使用以下步骤允许将数据路由到备用数据库:

  1. 在 Azure portal 中,浏览到集群。

  2. 选择数据库>数据连接

  3. 创建或编辑数据连接。 在 “数据连接 ”窗格中的“ 数据路由设置”下,打开 允许将数据路由到其他数据库(多数据库数据连接) 选项。

    Azure Data Explorer Web UI 的屏幕截图,显示数据路由设置选项被设置为“允许”。

将事件数据路由到备用表

还可以使用事件属性指定每个事件的目标表属性。 连接动态路由 EventData.Properties 中指定的数据,重写此事件的静态属性。 若要指定备用表,请设置表导入属性

注意事项

如果选择 “我的数据”包括路由信息,则必须在事件属性中提供必要的路由信息。

事件系统属性映射

使用系统属性存储IoT Hub服务在收到事件时设置的属性。 Azure Data Explorer IoT Hub连接将所选属性嵌入到表中接收的数据中。

注意事项

对于 csv 映射,请按照下表中列出的顺序在记录的开头添加属性。 对于 json 映射,请根据下表中的属性名称添加属性。

系统属性

IoT Hub公开设备到云IoT Hub消息的以下系统属性:

属性 说明
message-ID 用户可设置的消息标识符,用于请求-响应模式。 格式:ASCII 7 位字母数字字符 + {'-', ':', '.', '+', '%', '_', '#', '*', '?', '!', '(', ')', ',', '=', '@', ';', '$', '''} 的区分大小写字符串(最长为 128 个字符)。
iothub-enqueuedtime IoT Hub接收Device-to-Cloud消息的日期和时间。
user-ID 用于指定消息的源的 ID。 当消息由IoT Hub生成时,此值设置为 {iot hub name}
iothub-连接-设备-id 云设备消息上由 IoT Hub 设置的 ID。 它包含发送消息的设备的 deviceId
iothub-connection-module-id 云设备消息上由 IoT Hub 设置的 ID。 它包含发送消息的设备的 moduleId
iothub-connection-auth-generation-id 云设备消息上由 IoT Hub 设置的 ID。 它包含发送消息的设备的 connectionDeviceGenerationId(根据设备标识属性)。
iothub-connection-auth-method IoT Hub在设备到云消息上设置的身份验证方法。 此属性包含用于验证发送消息的设备的身份验证方法的相关信息。
iothub-app-iothub-creation-time-utc 允许设备在批量发送数据时发送事件创建时间。
iothub-创建时间-UTC 允许设备在一次发送一条消息时发送事件创建时间。
dt-dataschema 此值由 IoT Hub 在设备到云的消息中设置。 它包含在设备连接中设置的设备型号 ID。
dt-subject 发送设备到云消息的组件的名称。

如果在表的“数据源”部分选择“事件系统属性”,请在表架构和映射中包含这些属性。

架构映射示例

表架构映射示例

如果数据包含三列(TimespanMetricValue)并且包含的属性是 iothub-connection-device-idsequence-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 Hub事件有效负载。 请考虑在事件正文上游中嵌入用户属性。

IoT Hub连接

注意事项

为了获得最佳性能,请在与Azure Data Explorer群集相同的区域中创建所有资源。

创建IoT Hub

如果还没有IoT Hub,创建 Iot Hub。 可以通过 Azure portal,使用 C#PythonAzure Resource Manager 模板管理到IoT Hub的连接。

注意事项

  • 一旦设置了 device-to-cloud partitions 计数,就无法更改,因此在设置分区计数时请考虑长期的扩展性。
  • 每个消费者必须拥有唯一的消费者组。 创建专用于 Azure Data Explorer 连接的消费者组。 在Azure portal中找到你的资源,然后转到 Built-in endpoints 添加新的消费者组。
  • 数据连接使用 IoT Hub Built-in endpoint。 如果配置任何其他 Message routing endpoint,消息将停止流向 Built-in endpoint,除非已创建到该终结点的路由。 若要确保在添加新路由时,消息继续流向内置终结点,请配置到 events 终结点的路由。 有关详细信息,请参阅IoT Hub消息路由疑难解答

发送事件

请参阅一个可以模拟设备并生成数据的示例项目sample project

下一步