Чтение CSV из Azure Хранилище озера данных 1-го поколения в c#. net API - PullRequest
0 голосов
/ 10 июля 2020

Нам нужно прочитать CSV Файл размером около 2 ГБ , который хранится в Azure Хранилище озера данных Gen1 . Цель такая же, как у нас отображать данные в формате Grid (UI) с высокой производительностью по запросу пользователя. Мы используем . Net Core 2.1 (c#) для выполнения API для того же.

        var creds = new ClientCredential(applicationId, clientSecret);
        var clientCreds = ApplicationTokenProvider.LoginSilentAsync(tenantId, creds).GetAwaiter().GetResult();

        // Create ADLS client object
        AdlsClient client = AdlsClient.CreateClient(adlsAccountFQDN, clientCreds);

        string fileName = "/cchbc/sources/MVP/Data.csv";

        using (var readStream = new StreamReader(client.GetReadStream(fileName)))
        {

            while ((line = readStream.ReadLine()) != null)
            {
                content = content + line;
            }
        }

Я пробовал приведенный выше код, но не смог с ошибкой GETFILESTATUS не удалось HttpStatus: Forbidden RemoteException: AccessControlException GETFILESTATUS завершился ошибкой 0x83090aa2 (Запрещено. Проверка ACL не удалась. Либо ресурс не существует, либо пользователь не авторизован для выполнения запрошенной операции.)

Любое предложение будет очень полезным. Заранее спасибо

1 Ответ

0 голосов
/ 13 июля 2020

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

например, я обращаюсь к файлу / тесту / тесту .csv

  1. Настройте ACL, как показано ниже
Opreation    Object        /        test/      test.csv
Read         tets.csv      --X      --X        R-- 

enter image description here enter image description here

  1. Код
string appId = "service principal appId";
            string appSecret = "service principal appSecret";
            string domain = "service principal domain";

            var serviceSettings = ActiveDirectoryServiceSettings.Azure;
            serviceSettings.TokenAudience = new Uri(@"https://datalake.azure.net/");
            
            var creds = await ApplicationTokenProvider.LoginSilentAsync(domain, appId, appSecret, serviceSettings);

            string accountName = "testadls02";
            AdlsClient client = AdlsClient.CreateClient($"{accountName}.azuredatalakestore.net", creds);
            string fileName = "/test/test.csv";
            string line = null;
            using (var readStream = new StreamReader(client.GetReadStream(fileName)))
            {
                while ((line =  await readStream.ReadLineAsync()) != null) {

                    Console.WriteLine(line);
                }
               
            }

enter image description here

For more details, please refer to здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...