点击此处---> 群内免费提供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
Yogesh Joshi ,
您可以使用循环来实现。 用源数据计数并将源计数除以1000万..这样就得到一个值,例如10,因此必须循环10次数据流。
在循环外初始化变量
$ G_Loop = 1;
$ G_max_loop = 10; (您将来源数除以1000万后的价值)
$ G_INITIAL = 1;
$ G_MAX = 10000000;
并使用$ G_FILENAME ='filename_'|| $ G_Loop;之类的变量指定目标文件名;
现在连接源----->查询----->目标文件
在条件允许的查询中
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_Loop = $ G_Loop + 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
嗨,Ravi,
感谢您检查此问题和建议。 您建议的是使用过滤器反复读取ODP源,这似乎对我们不起作用。 我有两个问题:
1。 我相信,在查询的where子句中使用DI_SEQUENCE_NUMBER会使某些事情绊倒时,这些作业将无法执行,并且错误由ODP API返回。 您可以运行此程序而没有任何问题吗?
2。 与ODP Source类似的事情-在循环内,第一次迭代运行良好,我们获得了前一千万条记录,但是当第二次迭代开始时,我认为ODP API内又返回了错误。 您是否可以循环读取ODP源?
您好 Yogesh Joshi ,
您可以使用循环来实现。 用源数据计数并将源计数除以1000万..这样就得到一个值,例如10,因此必须循环10次数据流。
在循环外初始化变量
$ G_Loop = 1;
$ G_max_loop = 10; (您将来源数除以1000万后的价值)
$ G_INITIAL = 1;
$ G_MAX = 10000000;
并使用$ G_FILENAME ='filename_'|| $ G_Loop;之类的变量指定目标文件名;
现在连接源----->查询----->目标文件
在条件允许的查询中
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_Loop = $ G_Loop + 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
一周热门 更多>