【问题标题】:SSIS - Is there a way to filter data from a flat table?SSIS - 有没有办法从平面表中过滤数据?
【发布时间】:2019-12-19 07:53:07
【问题描述】:

我有一个总分类帐交易记录到单个日记帐预订。我正在制定一个流程,使用位于其他地方的表格和其他信息自下而上重建这些预订。首先,我有一个 SSIS 包,它包含 3-4 个不同的“部门”数据。

在一种情况下,行数超过 600k,我最多需要 50k。将 600k 加载到表中需要一段时间。我一直在寻找一种方法来阻止这种情况。如果我在 SQL Server 中执行此操作,我会执行以下操作:

SELECT * FROM C601
WHERE (COST_CENTER = 5U AND ACCOUNT = 1100001)
OR (COST_CENTER = 5U AND ACCOUNT = 1300001)

我总共有大约 12-13 个 WHERE 项目,但会减少到原始项目的 10%。有没有办法在加载 SQL Server 表之前过滤 SSIS 中加载的平面文件,并像上面的 SQL 一样使用更少的项目?

【问题讨论】:

  • 您可以使用Conditional Split Transformation 过滤行,是的。整个文件仍然需要读取(您不能停止读取),但您可以使用拆分仅将您想要的行定向到目标源。
  • 这是一项工作还是一个周期性的过程?首先,您可以在 Notepad++ 中通过插件使用 CSV/SQL 过滤器函数。
  • Larnu - 这是我能在网上找到的唯一解决方案,也是我打算采用的方法,但希望有更简单的方法。您将所有您不关心的交易推送到哪里?我对存储它们没有兴趣,因为它们只会在数据库中增加 500 万不影响我的业务的事务。
  • @Vaslo... 您无需在任何地方引导您不想要的交易。从本质上讲,他们可以在条件分裂中死亡。
  • 如果您对条件拆分产生的流之一做某事,SSIS 会很高兴;您不使用的集合将被有效地丢弃。条件拆分通常用于过滤结果,可能比实际将数据“拆分”到多个目标更重要。

标签: sql-server csv ssis etl flat-file


【解决方案1】:

使用条件拆分转换

第一种方法

添加类似的表达式:

[COST_CENTER] = "5U" && ([ACCOUNT] = 1100001 || [ACCOUNT] = 1300001)

第二种方法

或者您可以添加两个拆分表达式,如下所示:

COST_CENTER]!= "5U" || [ACCOUNT]!= 1100001

[COST_CENTER] != "5U" || [ACCOUNT] != 1300001

然后你可以使用Conditional Split默认输出来得到想要的结果。

【讨论】:

  • 这个解决方案以及上面每个人提供的解决方案都有效。我没有意识到在条件拆分时该过程会快多少,并且在这种方法中执行此操作大大加快了该过程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多