【问题标题】:Conditional Data Validation In SSISSSIS 中的条件数据验证
【发布时间】:2021-02-05 13:33:19
【问题描述】:

我有一种情况,表有两个主要列 DataFieldName 和 DataFieldValue 以及一些标识符,例如 OrderNumber。

现在在 DataFieldName 中有一个名为“OrderDate”的值,并且相应的日期将出现在 DataFieldValue 中。

但是“OrderDate”的一些值是非日期值。我需要根据 DataFieldName 的值为“OrderDate”的条件验证此类非日期值,然后验证 DataFieldValue 在 SSIS 中的有效日期。

【问题讨论】:

  • 我建议你修复你的数据模型。就像现在一样,它更适合用于 noSQL 数据库或者可能作为未经验证的 JSON。
  • 首先,您可以添加条件拆分并将所有带有“OrderDate”的行传递给单独的处理任务。然后,您可以尝试添加数据类型转换并将转换失败的所有行重定向到单独的输出。或者,您可以在数据流中添加转换脚本组件,并在那里检查正确的日期值,然后再次将错误的行重定向到另一个输出。

标签: sql sql-server ssis etl


【解决方案1】:

您可以使用Conditional Split 拆分数据:

如果您使用的是 SQL,则为带有条件的查询:

SELECT DataFieldName, DataFieldValue FROM yourTable
WHERE DataFieldName LIKE 'OrderDate'

如果您使用的是 SQL Server:

SELECT   
    CASE WHEN TRY_CONVERT(date, DataFieldValue) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result 
FROM yourTable

如果您使用的是 Oracle:

SELECT cast(DataFieldValue AS NUMBER DEFAULT NULL ON CONVERSION ERROR) FROM yourTable

或者,您可以使用Data Conversion Transformation 组件:

然后您可以将输出重定向到一个平面文件,例如:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多