如何从azure blob存储中的hadoop avrocontainer中删除记录?

cedebl8k  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(464)

我一直在存储来自不同设备的消息 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 因为它可能包含来自其他工作设备的消息。

sycxhyv7

sycxhyv71#

我以前也遇到过类似的问题(但不是avro格式),经过google的研究和搜索,我发现在azure中托管blob很难修改。
我的解决方案是将文件下载到本地,然后根据您的代码进行修改,最后您可以将修改后的文件上传到azure blob存储中。所有的步骤都可以通过代码来完成。
希望有帮助。

相关问题