【问题标题】:Import most recent data from CSV to SQL Server with SSIS使用 SSIS 将最新数据从 CSV 导入 SQL Server
【发布时间】:2011-11-30 20:29:29
【问题描述】:

这是交易;问题不在于将 CSV 导入 SQL Server,而是让它按我想要的方式工作……我想这始终是问题:)

我有一个 CSV 文件,其中包含如下列:DATE, TIME, BARCODE, etc... 我使用派生列转换将DATETIME 连接成DATETIME,以便我导入到 SQL Server 中,然后我将所有数据导入到数据库。问题是我们每 12 小时才获得一个新的 .CSV 文件,例如,我们会说 .CSV 在一分钟内更新四次。

按照我们每 15 分钟运行一次作业的逻辑,我们将获得大量重叠数据。我想我会使用一个变量,比如LastCollectedTime,它可以使用MAX(READTIME) 从我的SQL 数据库中提取。我的问题在于我只想收集读取时间比该变量更新的行。

目标表结构: ID, ReadTime, SubID, ...datacolumns..., LastModifiedTime 其中LastModifiedTime 在最后一次插入时的默认值为GETDATE()

有什么想法吗?请记住,我们的 readtime 是派生列,不确定是否重要。

【问题讨论】:

  • 不是这种情况,不。供应商将其设置为持续加载到 .csv 中 12 小时,然后启动一个新的 .csv——它超出了我们的控制范围

标签: business-intelligence ssis bids


【解决方案1】:

这是您可以使用的一种方法:

假设您在 SQL Server 中的目标表名为 BarcodeData

  1. 在您的数据库中创建一个暂存表(例如BarcodeStaging,该表的列结构与导入 CSV 数据的目标表 BarcodeData 具有相同的列结构。

  2. 在 SSIS 包中,在数据流任务前添加 Execute SQL Task 以截断暂存表 BarcodeStaging

  3. 将 CSV 数据导入暂存表BarcodeStaging导入实际目标表。

  4. 使用MERGE 语句(我假设您使用的是SQL Server 2008 或更高版本),比较暂存表BarCodeStaging 和实际目标表BarcodeData使用 DateTime 列作为连接键。如果存在不匹配的行,则从临时表中复制这些行并将它们插入到目标表中。

MERGE 声明的 Technet 链接:http://technet.microsoft.com/en-us/library/bb510625.aspx

希望对您有所帮助。

【讨论】:

  • 工作得很好,谢谢!希望这一切都可以在 SSIS 中完成,以减少出错的空间,但目前这是一个可行的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多