首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAP批量插入SAP HANA

SAP批量插入SAP HANA
EN

Stack Overflow用户
提问于 2019-01-20 08:34:00
回答 1查看 6.3K关注 0票数 0

我们有SAPHANA1.0 SP11。我们有一个要求,我们需要计算当前库存在商店,物料水平的基础上,每天。预计不会有大约2.5亿行。

目前我们使用的程序是相同的。程序流程如下-

代码语言:javascript
复制
begin

t_rst = select * from <LOGIC of deriving current stock on tables MARD,MARC,MBEW>;

select count(*) into v_cnt from :t_rst;

v_loop = v_cnt/2500000;


FOR X in 0 .. v_loop  DO

INSERT INTO CRRENT_STOCK_TABLE
SELECT * FROM :t_rst LIMIT 2500000 OFFSET :count;
COMMIT;
count := count + 2500000;    
END FOR;

end;

结果集t_rst的行计数约为2.5亿,过程时间的总执行时间为,约为2.5小时。很少有过程进入长时间运行状态,从而导致错误。我们在非高峰时间运行这个过程,所以系统负载几乎是零。

是否有一种方法可以在并行线程中在目标表中加载数据,并减少加载时间。另外,是否有办法在HANA中有效地进行批量插入。

对t_rst的查询在5分钟内获取第一个1000行。

EN

回答 1

Stack Overflow用户

发布于 2019-01-22 05:58:04

正如Lars所指出的,总资源的使用不会有效地改变。

但是,如果您有有限的时间(非高峰时间),如果系统配置将克服并行执行的要求,也许您可以尝试使用

代码语言:javascript
复制
BEGIN PARALLEL EXECUTION 
   <stmt> 
END;

请参阅参考文献

计算v_loop值之后,您知道必须按照INSERT命令运行多少次

代码语言:javascript
复制
INSERT INTO CRRENT_STOCK_TABLE
SELECT * FROM :t_rst LIMIT 2500000 OFFSET :count;

我不知道如何将上述代码转换为并行执行的动态计算。

但是您可以假设我们假设有10个并行进程,并根据计算值修改偏移子句来运行多个INSERT命令

超过的行将运行零行,这不会损害整个进程。

作为对@LarsBr的回复。,正如他所提到的,有一些限制会阻止并行执行。

限制和限制

适用下列限制:

代码语言:javascript
复制
Modification of tables with a foreign key or triggers are not allowed

Updating the same table in different statements is not allowed

Only concurrent reads on one table are allowed. Implicit SELECT and SELCT INTO scalar variable statements are supported.

Calling procedures containing dynamic SQL (for example, EXEC, EXECUTE IMMEDIATE) is not supported in parallel blocks

Mixing read-only procedure calls and read-write procedure calls in a parallel block is not allowed.

这些限制--也就是说,从不同的执行中插入到同一个表是不可能的,而且也不能使用动态SQL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54274795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档