是否可以向天蓝色斑点添加过滤器
Is it possible to add filter to azure blobs
我正在尝试基于我的过滤器检索 blob,因为我在 iot-hub 中创建了一个设备,该设备正在接收遥测数据并将其作为 blob 路由到存储帐户。
现在我想使用 Nodejs 检索 blob。
有没有可能我可以写一个 API 在过滤器的基础上过滤掉我的 blob 而无需遍历整个 blob 容器?
默认情况下,Azure storage routing creates the blobs with the convention {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}
inside the selected container. So, you have a predictable blob prefix which can be used in the query filter (more on that later). One thing to note here {partition}
is the zero-indexed partition id of the partition 消息被提取。例如,如果您在创建 IoT 中心实例时选择了 4 个分区(默认),则分区 ID 将为 0、1、2 和 3。
现在进入过滤器查询部分。通常,您很可能希望根据时间范围列出 blob(并进一步阅读内容),因为这在冷路径分析中非常实用。遗憾的是,您将无法按设备 ID 过滤 blob,因为同一个 blob 可能包含来自多个设备的消息。因此,假设您的冷路径分析将在滑动时间范围内处理批处理(很可能是一些连续作业),下面是一个使用 @azure/storage-blob
包(v12 JavaScript SDK)。您应该检查 API reference 是否需要即兴创作。
const blobServiceClient = BlobServiceClient.fromConnectionString('myStorageConnectionString');
const containerClient = blobServiceClient.getContainerClient('myContainer');
// Add logic here to select time range.
// For simplicity I am selecting a hardcoded time range of 2020-1-1 5:45 pm to 2020-1-1 5:46 pm
// (just 1 minute range)
// assuming IoT hub has 4 partitions
for (partition = 0; partition < 4; partition++) {
// note below the prefix is picking up all blobs written at 17:45:00 to 17:45:59.xxx
let iter = containerClient.listBlobsByHierarchy("/", { prefix: `myIotHub/${partition}/2020/01/01/17/45` });
let entity = await iter.next();
while (!entity.done) {
let item = entity.value;
if (item.kind === "prefix") {
console.log(`\tBlobPrefix: ${item.name}`);
} else {
// At this point you might want to to read the blob content here. For simplicity I am just printing few blob properties below
console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`);
}
entity = await iter.next();
}
}
我正在尝试基于我的过滤器检索 blob,因为我在 iot-hub 中创建了一个设备,该设备正在接收遥测数据并将其作为 blob 路由到存储帐户。 现在我想使用 Nodejs 检索 blob。
有没有可能我可以写一个 API 在过滤器的基础上过滤掉我的 blob 而无需遍历整个 blob 容器?
默认情况下,Azure storage routing creates the blobs with the convention {iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}
inside the selected container. So, you have a predictable blob prefix which can be used in the query filter (more on that later). One thing to note here {partition}
is the zero-indexed partition id of the partition 消息被提取。例如,如果您在创建 IoT 中心实例时选择了 4 个分区(默认),则分区 ID 将为 0、1、2 和 3。
现在进入过滤器查询部分。通常,您很可能希望根据时间范围列出 blob(并进一步阅读内容),因为这在冷路径分析中非常实用。遗憾的是,您将无法按设备 ID 过滤 blob,因为同一个 blob 可能包含来自多个设备的消息。因此,假设您的冷路径分析将在滑动时间范围内处理批处理(很可能是一些连续作业),下面是一个使用 @azure/storage-blob
包(v12 JavaScript SDK)。您应该检查 API reference 是否需要即兴创作。
const blobServiceClient = BlobServiceClient.fromConnectionString('myStorageConnectionString');
const containerClient = blobServiceClient.getContainerClient('myContainer');
// Add logic here to select time range.
// For simplicity I am selecting a hardcoded time range of 2020-1-1 5:45 pm to 2020-1-1 5:46 pm
// (just 1 minute range)
// assuming IoT hub has 4 partitions
for (partition = 0; partition < 4; partition++) {
// note below the prefix is picking up all blobs written at 17:45:00 to 17:45:59.xxx
let iter = containerClient.listBlobsByHierarchy("/", { prefix: `myIotHub/${partition}/2020/01/01/17/45` });
let entity = await iter.next();
while (!entity.done) {
let item = entity.value;
if (item.kind === "prefix") {
console.log(`\tBlobPrefix: ${item.name}`);
} else {
// At this point you might want to to read the blob content here. For simplicity I am just printing few blob properties below
console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`);
}
entity = await iter.next();
}
}