Как удалить запись из Hadoop AvroContainer в хранилище BLOB-объектов Azure? - PullRequest
1 голос
/ 18 октября 2019

Я хранил сообщения от разных устройств в формате 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?
                                    }
                                 }
                              }
                        }
                    }
              }
         }
  }

Над кодом, способным найти сообщение на основе идентификатора сообщения, нокак мне удалить это сейчас? reader может не помочь в удалении!

Примечание. Я не хочу удалять весь blob, поскольку он может содержать сообщения от других работающих устройств.

1 Ответ

1 голос
/ 22 октября 2019

У меня раньше была похожая проблема (но это не формат avro), после некоторых исследований и поиска в Google я обнаружил, что трудно изменить большой двоичный объект, когда он размещен в Azure.

Мое решение заключается в том, что загрузкафайл в локальный, затем измените его в соответствии с вашим кодом, наконец, вы можете загрузить измененный файл в хранилище BLOB-объектов Azure. Все шаги можно выполнить с помощью кода.

Надеюсь, это поможет.

...