SSIS:在SOQL查询中转换SSMS验证表中的数据类型

问题描述 投票:2回答:1

我正在使用一个使用SSIS引入SalesForce表的EDW。我正在编写CData Salesforce Source上的验证查询,该查询将在加载时返回CURRENT_DATEIME()以及列值的总和,以便稍后在我的验证策略中使用。我将这些列的结果导入到SSMS中的源验证表中。我遇到的问题是当我在两者上都需要NUMERIC时,CData将列默认为STRING数据类型,但显然你不能在SOQL查询中进行Parse,Convert或Cast。转换这些的最佳方法是什么?

这是我的查询因此远......

SELECT TABLE_NAME, SOURCE_COLUMN_VALUE, COLUMN_NUMBER, LOAD_DATE, LOAD_DATETIME 
FROM (
      SELECT 'TABLE' AS TABLE_NAME, COUNT(*) AS SOURCE_COLUMN_VALUE, 0 AS 
      COLUMN_NUMBER, CURRENT_DATE() AS LOAD_DATE, CURRENT_TIMESTAMP() AS 
      LOAD_DATETIME  
      FROM [TABLE] UNION ALL

      SELECT 'TABLE' AS TABLE_NAME, SUM(CASE WHEN Id IS NULL THEN 0 ELSE 1 
      END) AS SOURCE_COLUMN_VALUE,  1 AS COLUMN_NUMBER, CURRENT_DATE() AS 
      LOAD_DATE,CURRENT_TIMESTAMP() AS LOAD_DATETIME FROM [TABLE]
)

我需要使用SOQL将选定的列SOURCE_COLUMN_VALUE和LOAD_DATETIME转换为NUMERIC。

我已经尝试过TO_NUMBER()和NUMERIC.PARSE()了

这是我不断得到的错误

错误:位于BASS_USER_VALIDATION的0xC020901C,OLE DB目标[29]:OLE DB Destination.Inputs [OLE DB目标输入]。OLE DB Destination.Inputs [OLE DB目标输入]上的列[LOAD_DATE]出错。返回的列状态为:“由于可能丢失数据,无法转换该值。”

错误:位于BASS_USER_VALIDATION的0xC0209029,OLE DB目标[29]:SSIS错误代码DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “OLE DB Destination.Inputs [OLE DB目标输入]”失败,因为发生错误代码0xC0209077,并且“OLE DB Destination.Inputs [OLE DB目标输入]”上的错误行处置指定错误时失败。指定组件的指定对象发生错误。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

错误:位于BASS_USER_VALIDATION的0xC0047022,SSIS.Pipeline:SSIS错误代码DTS_E_PROCESSINPUTFAILED。组件“OLE DB目标”(29)上的ProcessInput方法在处理输入“OLE DB目标输入”(42)时失败,错误代码为0xC0209029。标识的组件从ProcessInput方法返回错误。该错误特定于组件,但错误是致命的,将导致数据流任务停止运行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。

validation ssis type-conversion cdata soql
1个回答
1
投票

我们最终使用Derived Column解决了这个问题,我们可以获取日期时间的字符串,将其解析为所需的字符串,并将其转换为数字类型。不是最有效的我确定,但它正在做需要做的事情! (SalesForce表将是我的死亡)

(DT_NUMERIC,12,4)(DT_DATE)(SUBSTRING(LOAD_DATETIME,1,4) + "-" + SUBSTRING(LOAD_DATETIME,FINDSTRING(LOAD_DATETIME,"-",1) + 1,2) + "-" + SUBSTRING(LOAD_DATETIME,FINDSTRING(LOAD_DATETIME,"-",2) + 1,2) + " " + SUBSTRING(LOAD_DATETIME,FINDSTRING(LOAD_DATETIME,"T",1) + 1,2) + ":" + SUBSTRING(LOAD_DATETIME,FINDSTRING(LOAD_DATETIME,":",1) + 1,2))

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.