【问题标题】:Quarterly data load in SSIS packageSSIS 包中的季度数据加载
【发布时间】:2022-01-26 17:15:18
【问题描述】:

我刚开始使用 SSIS 工具,我需要快速帮助来按季度加载数据

这是我的场景:

我想出了一个查询(源数据库:DB2),它将提取 2010-01-01 到 2021-12-31 的数据,(11 年的数据)但是数据量太大(大约 300 M) ,所以我想拆分数据源查询以按季度加载数据。 我逐年尝试,但仍然获得了我的 SSIS 服务器无法处理的更多数据量。 我创建了一个年循环来循环它,在其中创建了一个脚本任务,然后是一个数据流任务。

例如,

select * from tab1 where start_date >= '2010-01-01' and end_Date <= '2010-12-31'

我想将其循环为(4 次加载,每季度 1 次)


select from tab1 where start_date >= '2010-01-01' and end_Date <= '2010-03-31'
select from tab1 where start_date >= '2010-04-01' and end_Date <= '2010-06-30'
select from tab1 where start_date >= '2010-07-01' and end_Date <= '2010-09-30'
select from tab1 where start_date >= '2010-10-01' and end_Date <= '2010-12-31'

按年完全可以正常工作,但是,我不知道如何将数据加载到季度中。 我想将每个季度的参数作为参数传递给源查询,所以总的来说我需要循环到 48 次(2010 年到 2021 年 = 11 年 * 4 个季度) 任何帮助是极大的赞赏。 我可以发送我为年度循环创建的屏幕截图,效果非常好。

【问题讨论】:

  • “数据量太大...我的 SSIS 服务器无法处理” - 基于什么指标?我之前通过 SSIS 一次性汇集了数十亿行,没有出现任何问题。
  • 你确定你必须过滤开始和结束日期,两者都在同一年/季度,否则你会错过一些行吗?我认为使用限制/偏移是一个更好的解决方案,但您可以使用 DB2 过滤四分之一,例如 this_quarter(start_date) = date '2018-04-01'
  • 通常您会针对单个列来获取范围内的值。 [@start] 和 [@end] 之间的 updateDate 之类的东西

标签: sql sql-server ssis db2 etl


【解决方案1】:

我认为解决方案是使用OFFSET FETCH 子句来迭代数据。为什么在使用多行时每季度循环一次数据更精确(每次迭代将处理相同数量的数据)。以下文章提供了分步指南:

值得一提的是,本文处理的是 SQL Server 源代码,而您正在使用 DB2。那么你应该在使用OFFSET FETCH 子句时考虑到任何语法差异:


类似问题:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多