使用SLT/数据服务将BSEG表提取到平面文件

2020-09-28 02:09发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


方案是ERP> SLT> DS>平面文件。

我们需要对SAP表BSEG进行初步提取,其中包含数十亿条记录。 SLT已设置为触发初始负载。 DS必须从SLT提取此数据并生成多个平面文件。

从SLT读取此数据时,DS会自动包含一个附加列DI_SEQUENCE_NUMBER(从0开始,int映射到查询输出,并且输出已经对此列进行了排序)。

我们想将前一千万条记录写入一个平面文件,然后将一千万条记录写入另一个,依此类推。 考虑到数十亿条记录,设计流程来处理此问题的最佳方法是什么? 无需对传入的数据进行分组或进行任何进一步的转换。

编辑:从SLT到DS的数据传输是使用RFC。

感谢您的宝贵意见。

Yogesh

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


方案是ERP> SLT> DS>平面文件。

我们需要对SAP表BSEG进行初步提取,其中包含数十亿条记录。 SLT已设置为触发初始负载。 DS必须从SLT提取此数据并生成多个平面文件。

从SLT读取此数据时,DS会自动包含一个附加列DI_SEQUENCE_NUMBER(从0开始,int映射到查询输出,并且输出已经对此列进行了排序)。

我们想将前一千万条记录写入一个平面文件,然后将一千万条记录写入另一个,依此类推。 考虑到数十亿条记录,设计流程来处理此问题的最佳方法是什么? 无需对传入的数据进行分组或进行任何进一步的转换。

编辑:从SLT到DS的数据传输是使用RFC。

感谢您的宝贵意见。

Yogesh

付费偷看设置
发送
3条回答
Violet凡
1楼-- · 2020-09-28 02:32

Yogesh Joshi

您可以使用循环来实现。 用源数据计数并将源计数除以1000万..这样就得到一个值,例如10,因此必须循环10次数据流。

在循环外初始化变量

$ G_Lo​​op = 1;

$ G_max_loop = 10; (您将来源数除以1000万后的价值)

$ G_INITIAL = 1;

$ G_MAX = 10000000;

并使用$ G_FILENAME ='filename_'|| $ G_Lo​​op;之类的变量指定目标文件名;

现在连接源----->查询----->目标文件

在条件允许的查询中

DI_SEQUENCE_NUMBER> = $ G_INITIAL和DI_SEQUENCE_NUMBER <= $ G_MAX(将是DI_SEQUENCE_NUMBER> = 1和DI_SEQUENCE_NUMBER <= 10000000)

这会将1000万条记录加载到文件(文件名_1 ---->,因为$ G_loop = 1)

现在在循环内,在数据流之后获取一个脚本,然后

$ G_INITIAL = $ G_MAX + 1; (该值为10000001)

$ G_MAX = $ G_MAX + $ 10000000; (该值为20000000)

$ G_Lo​​op = $ G_Lo​​op + 1(此值为2)

现在条件在哪里

DI_SEQUENCE_NUMBER> = $ G_INITIAL和DI_SEQUENCE_NUMBER <= $ G_MAX(将是DI_SEQUENCE_NUMBER> = 10000001和DI_SEQUENCE_NUMBER <= 20000000)

这会将接下来的1000万条记录加载到文件中(文件名_2 ----->,因为$ G_loop = 2)

每次文件名都会不同。 因此,一个循环中的1个数据流会为您创建多个文件,每个文件中有一千万条记录。

根据您的要求更改此逻辑。

谢谢

Ravi kiran

代楠1984
2楼-- · 2020-09-28 02:45

嗨,Ravi,

感谢您检查此问题和建议。 您建议的是使用过滤器反复读取ODP源,这似乎对我们不起作用。 我有两个问题:

1。 我相信,在查询的where子句中使用DI_SEQUENCE_NUMBER会使某些事情绊倒时,这些作业将无法执行,并且错误由ODP API返回。 您可以运行此程序而没有任何问题吗?

2。 与ODP Source类似的事情-在循环内,第一次迭代运行良好,我们获得了前一千万条记录,但是当第二次迭代开始时,我认为ODP API内又返回了错误。 您是否可以循环读取ODP源?

jovirus
3楼-- · 2020-09-28 02:33

您好 Yogesh Joshi

您可以使用循环来实现。 用源数据计数并将源计数除以1000万..这样就得到一个值,例如10,因此必须循环10次数据流。

在循环外初始化变量

$ G_Lo​​op = 1;

$ G_max_loop = 10; (您将来源数除以1000万后的价值)

$ G_INITIAL = 1;

$ G_MAX = 10000000;

并使用$ G_FILENAME ='filename_'|| $ G_Lo​​op;之类的变量指定目标文件名;

现在连接源----->查询----->目标文件

在条件允许的查询中

DI_SEQUENCE_NUMBER> = $ G_INITIAL和DI_SEQUENCE_NUMBER <= $ G_MAX(将是DI_SEQUENCE_NUMBER> = 1和DI_SEQUENCE_NUMBER <= 10000000)

这会将1000万条记录加载到文件(文件名_1 ---->,因为$ G_loop = 1)

现在在循环内,在数据流之后获取一个脚本,然后

$ G_INITIAL = $ G_MAX + 1; (该值为10000001)

$ G_MAX = $ G_MAX + $ G_MAX; (该值为20000000)

$ G_Lo​​op = $ G_Lo​​op + 1(此值为2)

现在条件在哪里

DI_SEQUENCE_NUMBER> = $ G_INITIAL和DI_SEQUENCE_NUMBER <= $ G_MAX(将是DI_SEQUENCE_NUMBER> = 10000001和DI_SEQUENCE_NUMBER <= 20000000)

这会将接下来的1000万条记录加载到文件中(文件名_2 ----->,因为$ G_loop = 2)

每次文件名都会不同。 因此,一个循环中的1个数据流会为您创建多个文件,每个文件中有一千万条记录。

根据您的要求更改此逻辑。

谢谢

Ravi kiran

一周热门 更多>