从SAP提取数据到SQL Server

时间:2019-05-15 15:09:08

标签: sql-server ssis sap

我正在使用SSIS包将数据从SAP数据库表提取到SQL Server表中。我正在使用OLEDB源/目标连接来实现此目的。

现在的问题是,SAP中的一个表有500万条记录,大约需要2个小时才能将这些数据提取到我的SQL Server表中。我已经使用了trunc-dump方法(在sql server中将表截断并将数据从SAP表中转储到其中),并且还尝试使用Multiple Hash键引入更新/新记录。

哈希键的问题在于,它仍然必须扫描整个表以查找更改/新记录,因此与trunc-dump方法花费的时间几乎相同。

我正在寻找一种新方法或更改现有方法,以减少完成提取所需的时间。

1 个答案:

答案 0 :(得分:1)

正如您提到的那样,您正在使用OLEDB源连接来访问SAP,如果这意味着您正在直接访问SAP的基础数据库,则应出于三个原因而暂停这样做,直到获得IT部门的明确批准为止。

  1. 您跳过了SAP的应用程序层安全性。可能存在企业安全合规性问题;
  2. 您公司的SAP许可可能不允许您这样做。如果您的公司仅具有SAP间接访问许可证,则您可能必须停留在应用程序层;
  3. 直接访问基础数据库将不会获得SAP的官方支持。

您可以通过SAP应用程序层使用SSIS来获取数据的多种选择:

  1. 为此任务使用商业化的SSIS定制组件(免责声明:AecorSoft是提供此类连接组件的领先供应商之一)
  2. 查看SAP自己的OData Gateway接口以使用数据。
  3. 请您的SAP ABAP团队编写自定义ABAP程序,以将SAP数据转储到CSV文件中,然后使用SSIS提取它们。

现在让我们看一下性能方面:

SAP ETL性能取决于许多因素,但总的来说,即使对于具有100多个列的SAP事务表,每两小时提取500万行也很慢。例如,我们已经看到了以每1-2分钟1M行的一致性能提取标准SAP General Ledger标头表BKPF(近100列)的情况。当然,这样的性能是通过商业组件和SSIS实现的,但是即使对于上面的#3选项,通过中间CSV文件,您也应该期望每10分钟至少有1M。在后台,通过SAP应用程序层,所有这三个选项都将利用SAP Open SQL(与基础数据库提供的“本地SQL”相反)来访问SAP表,因此,如果遇到应用程序层性能问题,则可以分析Open SQL端。

正如您还提到的有关更新/新记录的情况,这是一个典型的增量提取问题。通常,在SAP事务表中,有“创建日期”和“更改日期”字段可以帮助您捕获增量。在这种情况下,为了避免全表扫描,请通过SAP应用程序层在那些“增量字段”上应用索引。例如,如果您需要提取Sales Document Header VBAK表,则可以按ERDAT(创建于)和AEDAT(更改于)进行过滤。 Delta是SAP中的一个复杂主题。由于SAP数据模型非常复杂,并且各个功能模块之间存在很大差异,因此没有简单的说法来描述增量解决方案。增量分析始终是个案研究。有些人可能只是建议使用“三角洲提取器”,但不要将其视为“灵丹妙药”,因为提取器有其自身的问题。简而言之,如果您研究基于表的提取,请专注于此,并尝试与SAP功能团队合作确定合适的增量字段。尝试避免执行全表扫描和散列。进行增量加载,并与先前提取的内容进行一些可选的重叠(例如,加载今天和昨天的记录),然后进行合并以吸收更改。

在少数情况下,您可能找不到任何增量字段,并且一直都无法进行满负载是不现实的。一个很好的例子是地址主数据表ADRC。在这种情况下,如果需要在此表上进行增量加载,则您必须要求您的SAP功能团队为您找出增量(这意味着他们将自定义逻辑注入到可以创建,更新或修改地址主数据的每个位置。删除),或者您必须请求SAP Basis团队在基础数据库表上创建数据库触发器,并在应用程序层公开触发器表。这样,您可以在主表和触发器表上创建应用程序层视图以执行增量。不过,您的解决方案无法直接访问数据库。数据库层触发器由您的SAP Basis团队完全管理和控制,他们也支持数据库。

希望这会有所帮助!