是否可以向天蓝色斑点添加过滤器

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();
  }
}