问题描述
IoT Hub 从设备端如何向IOT发送海量数据,可以使用从设备到IOT连接的直接传输吗?还是需要另外开启连接。另外,消息路由和上传文件使用的连接是否就是设备到IOT建立的连接?还是需要额外再创建一个连接?
如何把IoT Hub中的数据存储到Azure Storage中?
问题答案
从设备端发送数据时,通过设备注册时候的链接字符串连接到IoT Hub并发送数据。所以以上问题答案为,使用从设备到IoT的连接直接传输数据。不需要额外建立另一个连接。
(Source:https://docs.azure.cn/zh-cn/iot-hub/quickstart-send-telemetry-dotnet)
如何把IoT Hub中的数据存储到Azure Storage中? 有以下两种办法:
- 可以使用IoThub的消息路由功能,将数据路由至storage中:https://docs.azure.cn/zh-cn/iot-hub/tutorial-routing#route-to-a-storage-account
Azure 存储作为路由终结点
IoT 中心可将消息路由到以下两个存储服务:Azure Blob 存储和 Azure Data Lake Storage Gen2 (ADLS Gen2) 帐户。 Azure Data Lake Storage 帐户是在 Blob 存储之上构建的启用分层命名空间的存储帐户。 这两个存储服务都使用 blob 作为其存储。
IoT 中心支持将数据以 Apache Avro 格式和 JSON 格式写入 Azure 存储。 默认值为 AVRO。 使用 JSON 编码时,必须在消息系统属性中将 contentType 设置为 application/json,将 contentEncoding 设置为 UTF-8。 这两个值都不区分大小写。 如果未设置内容编码,则 IoT 中心将以 base 64 编码格式写入消息。
- 可以借助Azure StreamAnalytics,将设备端发送到IotHub的数据,传输至Storage。关于流分析的介绍,可以参考此文档:https://docs.azure.cn/zh-cn/stream-analytics/stream-analytics-introduction
Azure 流分析的输出
Azure 流分析作业由输入、查询和输出构成。 可以将转换后的数据发送到多个输出类型。 本文列出了支持的流分析输出。 设计流分析查询时,使用 INTO 子句引用输出的名称。 可针对每个作业使用单个输出,也可通过向查询添加多个 INTO 子句,针对每个流式处理作业使用多个输出(如果需要)。
部分输出类型支持分区,并且输出批大小可变化以优化吞吐量。 下表显示了每种输出类型支持的功能:
表 1
输出类型 | 分区 | 安全 |
Azure SQL 数据库 | 是,可选。 | SQL 用户身份验证, 托管标识(预览版) |
Blob 存储和 Azure Data Lake Gen 2 | 是 | 访问密钥, 托管标识(预览版) |
Azure 事件中心 | 是,需要在输出配置中设置分区键列。 | 访问密钥, 托管标识(预览版) |
Azure 表存储 | 是 | 帐户密钥 |
Azure 服务总线队列 | 是 | 访问密钥 |
Azure 服务总线主题 | 是 | 访问密钥 |
Azure Cosmos DB | 是 | 访问密钥 |
Azure Functions | 是 | 访问密钥 |
参考文档:
关于将IotHub中的数据流向Storage,可以参考如下文档进行测试:https://docs.azure.cn/zh-cn/stream-analytics/stream-analytics-quick-create-portal