hive SSIS包上的ODBC连接仅在循环时失败

siotufzp  于 2023-02-08  发布在  Hive
关注(0)|答案(1)|浏览(262)

我们最近尝试在服务器上从SQL Server 2016迁移到SQL Server 2019,包括升级目录中的所有SSIS包。迁移向导没有出现任何问题,迁移了所有包,没有出现任何错误,表面上看一切正常。甚至在Visual Studio上进行了测试运行,一切都正常。但是一旦我们在目录上部署了所有的包,并尝试通过那里运行,我们就开始得到以下错误:
无错误:加载ODI_PaymentDevice时出现0xC 0014020,ODBC源[14]:SQLSTATE:HY 010,消息:[Microsoft][ODBC驱动程序管理器]函数序列错误;
加载ODI_PaymentDevice时出现错误:0xC 0209029,ODBC源[14]:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。由于出现错误代码0xC 020 F450,“ODBC源.Outputs[ODBC源输出]”失败,并且“ODBC源”的错误行处置指定出错时失败。指定组件的指定对象出错。在此之前可能已发布错误消息,提供了有关失败的详细信息。错误:0xC 0047038加载ODI_支付设备,SSIS。管道:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。ODBC源的PrimeOutput方法返回了错误代码0xC 0209029。当管道引擎调用PrimeOutput()时,组件返回了失败代码。失败代码的含义由组件定义,但该错误是致命的,管道已停止执行。在此之前可能已发布错误消息,提供了有关失败的详细信息。
这仅适用于与配置单元建立连接的包,在SSIS上使用ODBC连接器,然后在数据流上使用ODBC数据源
根据错误代码,可以将范围缩小到我们与Hadoop-Hive集群的ODBC连接,我们在Windows的ODBC源代码工具上测试了连接,该连接确实可以正常工作,在Visual Studio上也可以正常工作。我们已经研究了很多关于此错误的信息以及不同的解决方案。因此,我们尝试了很多不同的方法。

  • 删除数据源,然后创建新数据源(更新元数据的步骤)
  • 在32位模式下运行
  • 更新Microsoft的配置单元ODBC驱动程序
  • 切换到其他供应商的驱动程序(CDATA)
  • 改为切换到ADO .NET连接
  • 与驱动程序的配置,几乎所有的组合可能左右

在尝试了所有这些都无济于事之后,我们在Visual Studio上又试了一次,令我们惊讶的是,它在那里也开始失败。
在尝试了几种不同的方法后,我们可以再次重现软件包工作的条件,这是最奇怪的事情,到目前为止,我们在互联网上找不到任何有类似问题的人。
因此,如前所述,连接正常工作,包本身也正常工作,但是,我们有一个For Each循环容器,它遍历日期,以加载我们拥有的最后X个日期的数据,因此,如果有任何类型的循环容器(例如For Each循环)包含对ODBC源的查询,它在第二个循环中大约100%的时间失败。
这就是它在Visual Studio上运行的原因,因为它只运行了一次(作为测试只有一个日期要处理),但是在部署时,它必须获取真实的数据,有一堆不同的日期。为了确认这确实是问题所在,部署了包,并用要加载的日期更新了表,只有1天可用。并且包运行通过。也排除了部署/服务器/目录上的任何参数问题。
在这个发现之后,我们尝试了几种不同的方法:

  • 在每列上传递NULL,以查看循环之间的元数据是否存在问题
  • 还激活了Hive ODBC驱动程序上的LOG_TRACE,以获得正在发生的事情的非常详细的日志,我们在日志上看到查询在第二个循环中发出,它也出现在TEZ(我们的Hive执行引擎)上,但非常短暂,只有几分之一秒。然后它取消了自己,所以查询正在到达集群,但不知何故SSIS自己删除了连接。

如前所述,我们之前找不到类似的东西,也想不出其他解决问题的方案,而不需要直接更换软件包,或者根本不升级到2019年,知道已经在主流支持周期之外,这并不理想。
有人知道如何解决这个问题,或者是什么导致了这个问题吗?

cs7cruho

cs7cruho1#

请确保将SQL Server目标版本设置为SQL Server 2019。这可以从项目属性中找到。此错误通常是目标服务器不匹配造成的,因为此问题仅在部署过程中出现,在开发过程中不会出现。

相关问题