繁体   English   中英

Read CSV From Azure Data lake storage Gen 1 in c# .net API

[英]Read CSV From Azure Data lake storage Gen 1 in c# .net API

我们需要读取一个大约2 GB的 CSV 文件,该文件存储在Azure 数据湖存储 Gen1中。目的就像我们必须在用户请求时以高性能的网格格式 (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 failed with HttpStatus:Forbidden RemoteException: AccessControlException GETFILESTATUS failed with error 0x83090aa2 (Forbidden. ACL 验证失败。资源不存在或用户无权执行请求的操作。 )

任何建议都会非常有益。在此先感谢

如果要使用服务主体访问存储在 Azure 数据湖 gen 1 中的文件,我们需要为服务主体配置ACL ACL 具有三个权限读取(读取文件的内容)写入(写入或 append 到文件)和执行(遍历文件夹的子项)。

例如我访问文件 /test/test.csv

  1. 如下配置ACL
Opreation    Object        /        test/      test.csv
Read         tets.csv      --X      --X        R-- 

在此处输入图像描述 在此处输入图像描述

  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);
                }
               
            }

在此处输入图像描述

更多详情,请参考这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM