使用SSIS脚本组件读取Azure Data Lake Store文件

时间:2018-09-06 03:27:48

标签: azure ssis azure-data-lake

感谢您的建议。
我的要求是,使用SSIS从ADLS读取json文件并加载到SQL表中

实施: 我已经实现了在.Net Console应用程序中读取json文件内容的代码。这在控制台应用程序中工作正常。我在SSIS脚本组件中复制了相同的代码,但是在 AdlsClient.CreateClient。

中引发了“'Microsoft.Azure.DataLake.Store.AdlsClient'的类型初始化程序引发异常”异常。
using Microsoft.Rest;
using Microsoft.Rest.Azure.Authentication;
using Microsoft.Azure.Management.DataLake.Store;
using Microsoft.Azure.DataLake.Store;
using Microsoft.Azure.DataLake.Store.AclTools;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

JObject results = new JObject();
        string applicationId = "<appid>;
        string secretKey = <secretekey>;
        string tenantId = <tenantid>;
        string adlsAccountName = "<ADLSNAME>.azuredatalakestore.net";
        ServiceClientCredentials creds = ApplicationTokenProvider.LoginSilentAsync(tenantId, applicationId, secretKey).Result;

AdlsClient adlsClient = AdlsClient.CreateClient(adlsAccountName, creds);
string srcPath = @"/InputFiles/1636274001230002_20180621_104427.json";
using (StreamReader readStream = new 
StreamReader(adlsClient.GetReadStream(srcPath)))
        {
            var p2Object = JsonConvert.DeserializeObject(readStream.ReadToEnd());
            results = JObject.Parse(p2Object.ToString());
        }

        date = ((string)results["eeData"][0]["startDate"]);
        machine = ((string)results["eeData"][0]["machineName"]);
        ppl = ((string)results["eeData"][0]["ppl"]);

1 个答案:

答案 0 :(得分:0)

问题出在第三者DLL的SSIS脚本组件中缺少参考路径。在控制台应用程序中,我可以安装NuGet软件包管理器。但是在SSIS脚本组件中,NuGet软件包安装失败,并且SSIS组件缺少参考。下面的代码将强制脚本组件编译器从给定路径引用DLL。

将此代码添加到PreExecute()/ Main()方法上方。

fetch("http://localhost:8090/recursosTotales")
  .then(response => response.json())
  .then(response => {
    this.setState({ products: response });
  });