Пока включено иерархическое пространство имен, невозможно загрузить большой двоичный объект с метаданными hdi_isfolder

Я использую Azure Datastorage Gen2 и столкнулся с проблемой: я не могу создать виртуальный каталог, когда включен параметр иерархического пространства имен.

Если я попытаюсь это сделать

        const std::string blobContent= "";

        auto blockBlobClient= std::make_shared<Azure::Storage::Blobs::BlockBlobClient>(m_container->GetBlobClient(blobName).AsBlockBlobClient());

        std::vector<uint8_t> buffer(blobContent.begin(), blobContent.end());
        blockBlobClient->UploadFrom(buffer.data(), buffer.size());

        Azure::Storage::Metadata blobMetadata= {{"hdi_isfolder", "true"}};
        blockBlobClient->SetMetadata(blobMetadata);

Я получаю сообщение об ошибке *Ошибка: 400 Один из заголовков HTTP, указанных в запросе, не поддерживается. * Но разве это не способ создать виртуальный каталог? Может кто-нибудь объяснить мне, что я делаю неправильно?

Спасибо!

Я попытался создать виртуальный каталог в хранилище BLOB-объектов ADLS Gen2.

Я получил ошибку: 400. Один из HTTP-заголовков, указанных в запросе, не поддерживается.

Я ожидал, что папка создастся без проблем

Проверьте ответ ниже.

Venkatesan 23.07.2024 11:20
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
1
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

для создания виртуального каталога в хранилище BLOB-объектов ADLS Gen2.

Вы можете использовать приведенный ниже код для создания каталога в хранилище BLOB-объектов Azure Data Lake Gen2 с помощью C++.

Чтобы создать каталог, вам необходимо установить пакет Azure Datalake gen2, используя команду ниже.

vcpkg install azure-storage-files-datalake-cpp

Код:

#include <cstdio>
#include <iostream>
#include <stdexcept>
#include <azure/storage/files/datalake.hpp>


int main()
{
    using namespace Azure::Storage::Files::DataLake;

    const std::string fileSystemName = "test";
    const std::string directoryName = "sample-directory";
 
    const std::string connectionString = "DefaultEndpointsProtocol=https;AccountName=venkat78901;AccountKey=52ZxzzzEZCvozzzzzzzzzzAStAvgrmA==;EndpointSuffix=core.windows.net";

    auto fileSystemClient
        = DataLakeFileSystemClient::CreateFromConnectionString(connectionString, fileSystemName);
    fileSystemClient.CreateIfNotExists();

    // Create a directory.
    auto directoryClient = fileSystemClient.GetDirectoryClient(directoryName);
    directoryClient.Create();

    std::cout << "Directory created: " << directoryName << std::endl;

    return 0;
}

Вышеупомянутый выполненный и созданный каталог в моем контейнере.

Выход:

Directory created: sample-directory

Портал:

Ссылка: azure-storage-files-datalake: Клиентская библиотека Data Lake для файлов хранилища Azure для C++ (azuresdkdocs.blob.core.windows.net)

Это означает, что если включены параметры иерархического пространства имен, создание блока с метаданными с помощью BlobServiceClient не поддерживается? Или он просто не может создать объект с определенными метаданными (зарезервированными словами)?

Staša Sekulić 23.07.2024 17:43

Приведенный выше пакет предназначен для аутентификации с помощью учетных записей хранения Data Lake 2-го поколения (с включенным иерархическим пространством имен).

Venkatesan 23.07.2024 18:56

Обратитесь к этому адресу Learn.microsoft.com/en-us/dotnet/api/…, чтобы установить метаданные с помощью клиента службы datalake.

Venkatesan 23.07.2024 19:03

Вроде как получилось, но я все равно хочу использовать BlobServiceClient и BlockBlobClient. Есть ли способ прочитать этот заголовок, чтобы проверить, что в нем не поддерживается? Ошибка: 400 Один из HTTP-заголовков, указанных в запросе, не поддерживается. \ Один из HTTP-заголовков, указанных в запросе, не поддерживается. \ RequestId: 1327839e-201e-003a-13bd-ddb25c000000 \ Time: 2024-07-24T11:37:29.9697412Z \ Идентификатор запроса: 1327839e-201e-003a-13bd-ddb25c000000

Staša Sekulić 24.07.2024 13:41

Да. Используя клиент службы BLOB-объектов, вы не можете создать виртуальный каталог.

Venkatesan 24.07.2024 14:36

Можете ли вы прислать мне документ, где это написано? @Венкатесан

Staša Sekulić 24.07.2024 15:00

Клиент контейнера не имеет функции создания каталога, вместо этого вы можете создать каталог, загрузив его с именем файла.Learn.microsoft.com/en-us/azure/storage/blobs/…BlobClient blobClient = containerClient.GetBlobClient(<foldername>/file,txt);

Venkatesan 24.07.2024 15:16

Я никогда не пытался это сделать, но чтобы создать большой двоичный объект и добавить к нему определенные метаданные, которые не поддерживаются, и по всем этим ссылкам, которые вы мне прислали, нет официального заявления о добавлении тега метаданных «hdi_isfolder». поддерживается ADLS Gen2 с включенной опцией иерархического пространства имен. Я не виню тебя @Venkatesan, это просто наблюдение. Также я забыл упомянуть, что использую Azure SDK для cpp. Также следует добавить: этот параметр работал с устаревшей библиотекой azure.storage 7.5. А это значит, что он не поддерживает регрессию, верно?

Staša Sekulić 24.07.2024 19:36

пустой объект + метаданные (hdi_isfolder) = виртуальный каталог? Или я это совсем не так понял?

Staša Sekulić 24.07.2024 19:40

Да, я так думаю, вы пытались с моим кодом сделать то же самое?

Venkatesan 24.07.2024 19:56

Я попробовал ваш код, но он не работает «из коробки», мне нужно адаптировать URL-адрес к dfs, чтобы проверить, существует ли файловая система... Но он наверняка будет работать, это то же самое, что и пример adls2. Спасибо @Venkatesan В любом случае довольно сложно согласовать все эти «функции» Azure.

Staša Sekulić 24.07.2024 21:51

Это сработало, пришлось обновить ссылку с blob на dfs, и все работает нормально, спасибо!

Staša Sekulić 29.07.2024 11:48

Другие вопросы по теме

Похожие вопросы

Можете ли вы создать «Потоки пользователей» в Azure с помощью учетной записи с оплатой по мере использования?
Пользовательское утверждение Entra внешнего идентификатора в токене идентификатора клиента, а не в ClaimsPrincipal пользователя веб-API ASP.NET Core
SchemaColumnConvertNotSupportedException: столбец: [Col_Name], физический тип: INT64, логический тип: строка
Невозможно прочитать большие двоичные объекты через BlobContainerClient для больших двоичных объектов с пустыми префиксами папок
Создать секрет Azure Keyvault, не раскрывая значения
Как создать функцию Azure, которая развертывает мой сценарий бицепса из учетной записи хранения Azure
Как найти идентификатор DriveItem, учитывая только URL-адрес документа?
Индекс поиска Azure через консольное приложение .NET Core перезаписывает старый документ
Изменение адреса электронной почты по умолчанию в потоках пользователей Azure AD B2C без специальных политик
Возникает ошибка при попытке отключить конвейер Azure DevOps с помощью Powershell