如何从Azure blob存储中的Hadoop AvroContainer删除记录?

时间:2019-10-18 02:11:22

标签: c# azure hadoop azure-storage-blobs avro

我一直以Azure Blob Storage的格式将来自不同设备的消息以AVRO格式存储。

其中一台设备出现故障,最终转储了“垃圾”消息。现在有一个任务可以搜索和删除特定设备中的消息。因此,我写了下面的代码。

遍历Blob中的每个containers并找到消息

  foreach (var container in client.ListContainers(null, ContainerListingDetails.All))
  {
         if (permissions.PublicAccess == BlobContainerPublicAccessType.Blob || permissions.PublicAccess == BlobContainerPublicAccessType.Container)
         {
              //for each blob
              foreach (var blobItem in container.ListBlobs(null, true))
              {
                     if (blobItem is CloudBlockBlob)
                     {
                         string blobname = ((CloudBlockBlob)blobItem).Name;
                         var blob = container.GetBlockBlobReference(blobname);

                          using (var myBlob = blob.OpenRead())
                          {
                             using (var reader = AvroContainer.CreateGenericReader(myBlob))
                             {
                                 while (reader.MoveNext())
                                 {
                                    foreach (dynamic avroRecord in reader.Current.Objects)
                                    {
                                          var eventData = new AvroEventData(avroRecord);
                                          var jsonString = Encoding.UTF8.GetString(eventData.Body);

                                           JObject _json = JObject.Parse(jsonString);

                                           //DeserializeObject and check the device ID
                                           // if found, then delete
                                           // but how do I delete? do I get reference here?
                                    }
                                 }
                              }
                        }
                    }
              }
         }
  }

以上代码,能够基于消息ID查找消息,但是现在如何删除它? reader可能无法删除!

注意:我不想删除整个blob,因为它可能包含来自其他工作设备的消息。

1 个答案:

答案 0 :(得分:1)

我之前也遇到过类似的问题(但它不是avro格式),经过谷歌的研究和搜索后,我发现在以天蓝色托管时,很难修改blob。

我的解决方案是将文件下载到本地,然后根据您的代码对其进行修改,最后您可以将修改后的文件上传到Azure Blob存储中。所有步骤都可以通过代码完成。

希望有帮助。