Лазурь.Исключение RequestFailedException: ‘Сбой запроса на обслуживание. Статус: 404 (Указанный большой двоичный объект не существует.) Код ошибки: BlobNotFound

#c# #azure #azure-blob-storage #azure-data-lake

Вопрос:

Здравствуйте уважаемые разработчики,

Я столкнулся с проблемой, из-за которой я не могу прочитать/получить доступ к своему файлу blob-объектов в своей учетной записи хранения Azure. Я использую C# в качестве языка программирования. В конце концов, я хочу прочитать свой файл blob-объектов, чтобы найти определенное значение и проверить, верно ли оно. Заранее спасибо

Вот как выглядит мой код.

             //Get a reference to the edc(1.3) container
            string containerName = "edc/rchexport/rch-bu-party-dd/1.3";
            string connectionString = "DefaultEndpointsProtocol=https;AccountName=adlse3.....";
        
        Log.Information($"C# Timer trigger function executed at: {DateTime.Now}");
        BlobContainerClient blobContainerClient = new BlobContainerClient(connectionString, containerName);
        

        //Acces to parquet blob file. Getting the sample structure of the blob to create the final table. 
        string edcRchBuParty = "rchtestdata.parquet";
        BlobClient st5BobClient = blobContainerClient.GetBlobClient(edcRchBuParty);
        var sampleStream = st5BobClient.OpenRead();   **<<<<<<<<< This where the error pops up**.
        var sampleReader = new ParquetReader(sampleStream);

        Table sampleTable = sampleReader.ReadAsTable();
        DataField[] datafields = sampleTable.Schema.GetDataFields();
        Table finalTable = new Table(datafields);
        //looping through the container for getting the blobs and read the file and add the rows to the final table 
        await foreach (BlobItem blobItem in blobContainerClient.GetBlobsAsync())
        {
            if (blobItem.Name.Contains("15b0251556c74fd693ca1f3cb4ce4d6e")) //for testing
            {
                Log.Information("t"   blobItem.Name);
                BlobClient blobClient = blobContainerClient.GetBlobClient(blobItem.Name);
                var stream = blobClient.OpenRead();  
                var reader = new ParquetReader(stream);
                Table table = reader.ReadAsTable();
                Console.WriteLine("Step 3 : Check");
                foreach (Row row in table)
                {
                    finalTable.Add(row);
                }
                Log.Information(finalTable.Count.ToString());
            }
 

Ответ №1:

Проблема в том, как вы указываете имя контейнера.

Глядя на ваш код, я предполагаю, что ваше имя контейнера edc и ваш blob ( rchtestdata.parquet ) присутствует в иерархии папок, например rchexport/rch-bu-party-dd/1.3 .

Если это так, то, пожалуйста, измените следующую строку кода:

 string containerName = "edc/rchexport/rch-bu-party-dd/1.3";
 

Для

 string containerName = "edc";
 

и измените следующую строку кода:

 string edcRchBuParty = "rchtestdata.parquet";
 

Для

 string edcRchBuParty = "rchexport/rch-bu-party-dd/1.3/rchtestdata.parquet";
 

Тогда вы не должны получать эту ошибку.