点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好,我正在做一个python脚本,该脚本生成并将随机数据插入表中。
属性是随机字符串和整数(我已经完成了一个生成随机字符串的函数,对于使用随机库的整数)。 我填写表的函数将各种属性放入INSERT(...)语句(它是一个字符串)。 然后将执行此字符串(Cursor.execute(string))。
问题是我需要用百万行填充表。 大约需要30秒。 执行10.000 INSERT语句。 我试图在字符串中执行多个INSERT语句以减少对Cursor.execute()的调用。 之后程序崩溃了:/为了调试,我将Statement打印到控制台,将其ant粘贴到sap hana SQL控制台中-> Statement没错,但是为什么在我的python脚本上不起作用?
还有其他优化性能的可能性吗? 我还尝试了带有线程的版本和具有多个连接器的版本,但是实际上并没有提高性能……
实际上没有看到您的代码,很难确定这里发生了什么。
但是,根据您的描述,您的代码会这样做:
如果是这种情况,则很可能导致性能下降的原因是步骤2)和步骤4)
通过为每个集合创建一个新语句 对于应插入的值,您可以强制HANA(和其他所有DBMS)重新解析该语句。 这会花费很多时间。
要解决此问题,请在语句中使用主机变量,然后准备一次该语句并为要插入到其中的每个新行绑定新值。 这样,数据库所需要做的就是将新值分配给语句变量并立即执行插入操作。
另一个问题是HANA python驱动程序hdbcli的默认值为autocommit = on。 请确保在插入循环之前在连接上使用setautocommit(false),并仅在完成后提交一次。
对此非常简单易懂的介绍可以在此博客文章https://blogs.sap.com/2017/07/ 26/sap-hana-2.0-sps02-new-feature-updated-python-driver/。
一周热门 更多>