【发布时间】:2018-06-29 06:52:30
【问题描述】:
这是上一个问题的后续:OData Source Component in SSIS Hanging
设置
我在 Visual Studio 2015 (17.4) 中使用 SSIS,并希望使用 OData 连接从该页面提取公共 NADAC 数据:https://data.medicaid.gov/Drug-Pricing-and-Payment/NADAC-National-Average-Drug-Acquisition-Cost-/a4y5-998d。
我已使用 Windows 身份验证成功创建了一个指向基本 URL:https://data.medicaid.gov/api/odata/v4/ 的 OData 源连接管理器。
我创建了一个包含 2 个组件的简单数据流。 OData 源和记录集目标。 Recordset Destination 指向一个数据类型为 Object 的变量。
在我的数据流中,我已经成功创建了一个 OData 源到资源路径 a4y5-998d 并且能够预览数据。
显示预览数据和数据流布局以及 OData 源编辑器配置的屏幕截图。
核心问题
一切看起来都不错,但是当我在 Visual Studio 中运行我的包时,我收到以下错误:
信息:0x4004300A 在数据流任务,SSIS.Pipeline:验证阶段开始。错误:数据流任务中的 0xC020801F,OData 源 [2]: 无法从运行时获取托管连接 连接管理器。 错误:数据流任务中的 0xC0047017, SSIS.Pipeline:OData 源验证失败并返回错误代码 0xC020801F。错误:数据流任务中的 0xC004700C,SSIS.Pipeline:一或 更多组件验证失败。错误:0xC0024107 在数据流任务: 任务验证期间出现错误。
我已将关键语句(无法从运行时连接管理器获取托管连接)加粗,但包含更多上下文消息。
因为这是一个验证错误,所以数据流甚至没有开始运行。
环顾互联网,许多地方表明这可能是 32 位/64 位驱动程序问题。但是,我打开和关闭了 Run64BitRuntime,每次都得到相同的结果。
无论是在 SQL Server 2016 还是 SQL Server 2017 模式下运行包,我都会得到相同的结果。
HTTP 与 HTTPS
当我将 OData 连接管理器编辑器中的 URL 更改为 http 而不是 https 时,事情似乎进展得更好一些。
包验证,我在 OData 源上方看到一个黄色旋转圆圈。但随后我收到一条消息:
信息:0x40043006 在数据流任务,SSIS.Pipeline:准备 执行阶段开始。信息:数据流任务中的 0x40043007, SSIS.Pipeline:预执行阶段开始。信息:0x4004300C 在数据流任务,SSIS.Pipeline:执行阶段开始。错误: 0xC02090F5 在数据流任务,OData 源 [2]:OData 源是 无法处理数据。底层连接已关闭:一个 发送时发生意外错误。 错误:数据流中的 0xC0047038 任务,SSIS.Pipeline:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED。这 OData 源上的 PrimeOutput 方法返回错误代码 0xC02090F5。 管道引擎调用时组件返回失败代码 素数输出()。故障代码的含义由 组件,但错误是致命的并且管道停止执行。 在此之前可能会发布带有更多信息的错误消息 关于失败。信息:数据流任务中的 0x40043008, SSIS.Pipeline:后执行阶段开始。信息: 0x4004300B 在数据流任务,SSIS.Pipeline:“记录集目标” 写了 0 行。信息:数据流任务中的 0x40043009, SSIS.Pipeline:清理阶段开始。任务失败:数据流任务
这里的关键句是:OData Source 无法处理数据。底层连接已关闭:发送时发生意外错误。
虽然使用 HTTP 而不是 HTTPS 时包的工作方式不同,但我知道这可能与根本问题完全无关。这是迄今为止唯一有所作为的事情。
总结
是否有人对使用 SSIS 中的 ODATA 源组件引入公共 OData 提要有任何建议?有没有人能让这个工作? (如果你想自己尝试,我的包是相当简单的。)
这是一个可公开访问的 OData 源,无需身份验证。 SSIS 中的 OData Source 组件非常简单:它真正需要的只是一个 URL。我能够很好地预览数据。
我很难理解为什么我无法实际加载数据。不应该这么难。 (例如,我将数据加载到 Power BI 中没有问题。)
您能提供的任何帮助将不胜感激。
【问题讨论】:
-
我不知道这是否是同一个数据源,但这个人说得很好:它是公共数据,为什么还要使用 HTTPS? social.technet.microsoft.com/Forums/sqlserver/en-US/…
-
我同意。我不介意我使用 HTTPS 还是 HTTP;问题是两者都不起作用。
-
HTTP 可能比 HTTPS 更有效(假设站点支持 HTTP)。对不起,我没有给你答案。我想知道如何获得有关“发送时发生意外错误”的更多详细信息。我打了个寒颤,发现这与正确版本的 HTTPS 更有关……我认为这不是您的问题stackoverflow.com/questions/22627977/…
-
这个也提到了正确的 SSL / 正确的密钥 social.technet.microsoft.com/Forums/en-US/… 但它仍然是一个非常普遍的错误
-
我在 oAuth 和 SSIS 方面遇到了困难。我最终编写了一个 C# exe 来将数据提取到本地 JSON 文件中并改为使用它们。我发现这个组件可以方便地执行所有令牌交换业务。 code.google.com/archive/p/devdefined-tools/wikis/OAuth.wiki
标签: sql-server ssis odata etl