【发布时间】:2019-01-20 08:34:00
【问题描述】:
我们有 SAP HANA 1.0 SP11。我们有一个要求,我们需要每天计算商店的当前库存和物料水平。预计行数约为 2.5 亿。
目前我们使用相同的程序。流程如下-
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 行。
【问题讨论】:
-
这个批处理构造的原因是什么?您的系统是否缺乏资源来支持简单的
INSERT ...(SELECT ...))?另外,您是否以任何方式在数据加载期间控制目标表的增量合并? -
您考虑过EXPORT/IMPORT SQL 语句吗?可能不太理想,但 il 允许您管理线程、锁等?缺点是您将在服务器上物理创建一个文件,但运行没有数据的导出将允许您摆脱它(如果我没记错的话)。
-
@LarsBr。如果我在单个语句中插入,插入2.2亿条记录后会不会Delta合并导致大量重做日志和巨大的内存消耗
-
您需要所有列吗?而不是所有列都使用“*”,也许您只能将所需的数据复制到目标表中。
-
@Eralper t_rst 仅包含必需的列
标签: sap bulkinsert hana