Sql server 访问用于日常加载SQL Server的ETL数据

Sql server 访问用于日常加载SQL Server的ETL数据,sql-server,postgresql,tsql,data-warehouse,linked-server,Sql Server,Postgresql,Tsql,Data Warehouse,Linked Server,我需要您的专业知识,在数据用于DWH/ETL或直接从源代码使用数据并进行ETL之前,找出在数据库中存储数据的最佳可能选项 目前的情况是,我们在PostgreSQL数据库上运行事务系统。我们可以通过数据仓库所在的SQL server中的链接服务器访问该数据库 我们希望将数据从这个LinkedServer上传到数据仓库的过程自动化。以下是我们希望您的想法能够帮助我们的选项/挑战 我们希望每天晚上都能运行ETL 我们是否先将链接服务器中的数据存储到SQL表中,然后再对这些表编写具有多个联接的多个查询,

我需要您的专业知识,在数据用于DWH/ETL或直接从源代码使用数据并进行ETL之前,找出在数据库中存储数据的最佳可能选项

目前的情况是,我们在PostgreSQL数据库上运行事务系统。我们可以通过数据仓库所在的SQL server中的链接服务器访问该数据库

我们希望将数据从这个LinkedServer上传到数据仓库的过程自动化。以下是我们希望您的想法能够帮助我们的选项/挑战

我们希望每天晚上都能运行ETL

  • 我们是否先将链接服务器中的数据存储到SQL表中,然后再对这些表编写具有多个联接的多个查询,以准备将数据上载到数据仓库中
  • 如果我们将数据从LinkedServer存储到SQL Server中的表中,我更喜欢对所有这些表执行truncate和load操作,而不是将OLTP增量加载到SQL Server中的表(1到1),由于我们无法从跨国系统获得不同的负载,人们可以返回并更改事务系统中的数据,因此识别新的和更新的记录可能会变得很棘手

  • 我们只是通过LinkedServer直接使用源系统来编写多个联接,并动态准备数据,然后加载到某种预暂存表中?(使用此选项,我们当前面临的问题是,当我们直接在LinkedServer上写入多个联接时,无论结果/行的总数如何,我们只会得到一行,但如果我们将这些查询联接中使用的所有表存储到单个临时表中并从中运行查询,则会得到预期的结果)-请告知我们之前是否有人遇到过此问题,解决方案是什么?

    构建数据仓库的传统模式是遵循您的第一种选择

  • 从源系统中提取数据的副本
  • 在暂存表中本地操作数据
  • 将优化后的数据存放在仓库层以供使用
  • 坚持这种模式有几个原因。例如,当您在提取的同时进行操作时,通常会给源系统加载,这是您在构建数据仓库时试图避免的事情之一。此外,实际上我遇到的每个ETL工具都在ETL服务器上处理内存中的数据操作,这几乎总是比在SQL server机器上处理查询或存储过程的操作效率低。有时速度慢得惊人。当然还有更多的原因,但当我改变过去的标准做法时,这些都是让我痛苦的原因

    如果我是你,我会测试通过查询链接的服务器表来构建复制表的性能,而不是使用SSI直接从服务器到服务器拉复制表。对于这样的平面数据移动,SSI可能非常有效,而对于批量数据移动,链接服务器的效率可能更低

    也就是说,您不需要因为源系统没有任何可用的更改数据跟踪而放弃增量加载

    您可以每天刷新和填充副本表,但这样做后,您就有机会引入自己的更改跟踪。最常见的模式是在导入时引入行哈希,以及跟踪已加载记录的表。所有这些都远远超出了这个问题的范围,但在这两个问题中有更多的信息。不管怎么说,这足以刺激你自己的谷歌搜索


    构建数据仓库的传统模式是遵循第一种选择

  • 从源系统中提取数据的副本
  • 在暂存表中本地操作数据
  • 将优化后的数据存放在仓库层以供使用
  • 坚持这种模式有几个原因。例如,当您在提取的同时进行操作时,通常会给源系统加载,这是您在构建数据仓库时试图避免的事情之一。此外,实际上我遇到的每个ETL工具都在ETL服务器上处理内存中的数据操作,这几乎总是比在SQL server机器上处理查询或存储过程的操作效率低。有时速度慢得惊人。当然还有更多的原因,但当我改变过去的标准做法时,这些都是让我痛苦的原因

    如果我是你,我会测试通过查询链接的服务器表来构建复制表的性能,而不是使用SSI直接从服务器到服务器拉复制表。对于这样的平面数据移动,SSI可能非常有效,而对于批量数据移动,链接服务器的效率可能更低

    也就是说,您不需要因为源系统没有任何可用的更改数据跟踪而放弃增量加载

    您可以每天刷新和填充副本表,但这样做后,您就有机会引入自己的更改跟踪。最常见的模式是在导入时引入行哈希,以及跟踪已加载记录的表。所有这些都远远超出了这个问题的范围,但在这两个问题中有更多的信息。不管怎么说,这足以刺激你自己的谷歌搜索


    谢谢@Eric。以前在链接服务器中写入多个连接并仅获取一行,而不是将所有这些表存储在temp中。表,然后在其上写入联接,从而生成所有必需的行?再次感谢!谢谢你,埃里克。以前在链接服务器中写入多个联接的任何情况