【问题标题】:SSIS quarter data freezeSSIS季度数据冻结
【发布时间】:2019-03-18 11:46:19
【问题描述】:

我有一个场景,我需要为下个季度加载数据,这个数据应该只插入并且从第二天开始 数据应该是增量负载。例如,1 月 1 日至 3 月 6 日的季度。1 月 1 日,我们加载了历史负载或第一次插入,并在 1 月 2 日开始以增量负载。现在在 3 月 7 日,我们想要新的插入,并且从 3 月 8 日开始,增量负载将在 3 月 7 日新插入的数据上运行。就像我们想锁定从 1 月 1 日到 3 月 6 日这一季度的数据,新插入应该在 3 月 7 日发生,3 月 8 日增量负载应该在 3 月 7 日加载的数据上运行。如何在 ssis 中实现这一点?

【问题讨论】:

  • 到目前为止你尝试过什么?你有定义这些时期的日历表吗?您是否有一个现有的 SSIS 包,它只是批量加载所有内容?源系统中的数据是否曾经过时?
  • 使用批量加载。我面临的主要问题是如何冻结季度数据?
  • 冻结只是意味着不刷新它。所以这真的取决于你已经拥有什么。一种方法是编写一个表达式来计算您想要刷新(删除和重新加载)的第一个日期。这将是一个包含“getdate()”和“datepart”的长表达式
  • 现在3个月的数据正在生产中,每天都在增加负载。现在的场景是我们必须在季度的第4-5周锁定季度数据,即4月4-9日左右.然后应该进行新插入,并且在对该新插入进行增量加载之后。如何使用 SSIS 或 SQL 服务器查询锁定季度数据。
  • 您需要定义“锁定”和“冻结”。你的意思是说你不应该再将任何数据重新加载到这些时期,它们应该保持静态吗?

标签: ssis


【解决方案1】:

最好的方法是创建一个日历表,并在该表中设置一个特殊列,将每个日期映射到“冻结日期”属性。

所以我让你对日历表进行一些研究。

与此同时,如果没有日历表,这里有一些东西可以帮助您入门。

首先,此表达式为您提供当前季度的第一个月。因此,如果今天在 1 月至 3 月之间的任何地方,则此表达式为您提供 1。如果今天在 10 月至 12 月之间的任何地方,则为您提供 10

SELECT (((MONTH(GETDATE()))-1)/3)*3+1 As FirstMonthInCurrentQuarter

现在我们将该数字转换为每月第一天的实际日期。

首先,生成一个数字表示:

SELECT 
   YEAR(GETDATE()) * 10000 +
   ((((MONTH(GETDATE()))-1)/3)*3+1) * 100 +
   1

我们只是将其转换为实际日期:

SELECT 
   CONVERT(
       DATE,
           CAST(
            YEAR(GETDATE()) * 10000 +
            ((((MONTH(GETDATE()))-1)/3)*3+1) * 100 +
            1
            AS VARCHAR(8)),
        112)

这是一个可怕的表达式,可以用日历表代替。

如果您现在运行它,您将获得 2019 年 1 月 1 日。如果您在 4 月 5 日运行它,您将获得 4 月 1 日。希望您了解它是如何自动随机播放的。

现在我们使用该日期来决定将什么加载到您的表格中。

DECLARE @LoadDate DATE

SET @LoadDate = 
   CONVERT(
       DATE,
           CAST(
            YEAR(GETDATE()) * 10000 +
            ((((MONTH(GETDATE()))-1)/3)*3+1) * 100 +
            1
            AS VARCHAR(8)),
        112)

-- Delete all the data in the target table after this date:
DELETE TargetTable WHERE TransactionDate >= @LoadDate;

-- Use your ETL tool to load this in:
INSERT INTO TargetTable (TransactionDate, Amount, Account)
SELECT TransactionDate, Amount, Account 
FROM SourceTable WHERE TransactionDate >= @LoadDate;

您的问题中没有足够的信息来提供有意义的答案,但也许这会给您一个想法

95% 的机会你永远不会回来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 2011-06-05
    • 2020-07-16
    • 2018-12-20
    • 2021-06-12
    • 2018-06-01
    • 2014-08-09
    相关资源
    最近更新 更多