最近因为碰到一个大量数据传输到 SAP 的场景,在个人的 ECC 虚拟机上做了一个数据导入到 SAP 并且从 SAP 导出的测试,本文是对测试过程要点的记录。

导入

测试场景:将 具有 4 列 500 万条数据导入到 zemployee 表,zemployee 表的结构:

通过 Python 第三方模块 faker 生成模拟数据,4 列数据以 csv 格式存储,文件体积为 350 M。

from faker import Faker
import randomfake = Faker(locale="zh_CN")
MAX_ROW = 5000000def generate_random_info():    emp = {"name": fake.name(),"address":fake.address(),"phone":fake.phone_number()}return empif __name__ == "__main__":with open("fakeemployees.csv", mode="a", encoding="utf8") as f:for idx in range(0, MAX_ROW):info = generate_random_info()line = ",".join([str(idx+1), info.get("name"), info.get("address"), info.get("phone")])f.write(line+'\n')

一次性将所有这些数据导入到 SAP 是不合理的,所以我用分批的方式将这些数据导入,但也不是逐笔导入。在 SAP 中用 function module 实现数据的导入,一次传输导入的数据给 table 类型的参数,

创建一个 zemployee_insert 函数,employees 表参数为 importing 参数, ret 为返回值。


函数的代码如下:

zemployee_insert 允许远程调用,用 Python 的 PyRfc 模块来调用这个函数,不需要对文件进行分割,通过 Python 的 yield 关键字,实现数据分批。因为 yield 能在函数的调用者和函数之间反复交接控制权,减少内存的压力。每次以 1000 条为单位将数据传给 SAP zemployee_insert 函数。

from SAP.sap_systems import current_sap_connectionupload_file = "fakeemployees.csv"
batch_count = 1000def get_data_from_file(batch_max):employees = []with open(upload_file, mode="r",encoding="utf8") as f:batch = 0for line in f:(id, name, addr, phone) = line.split(sep=",")employees.append({"MANDT": "001","EMPID": id,"EMPNAME": name,"EMPADDR": addr,"PHONE": phone})batch += 1if batch == batch_max:yield employeesemployees =[]batch = 0if len(employees) > 0:yield employeesdef insert_employee():sap_conn = current_sap_connection()for employees in get_data_from_file(batch_count):     rv = sap_conn.call("ZEMPLOYEE_INSERT", EMPLOYEES=employees)print(rv["RET"])if __name__ == "__main__":insert_employee()

我的 ECC 虚拟机运行在个人笔记本上,运行 python 代码的过程中,内存占用不大,还可以一边愉快地做其它事情。

导出

如果想全部将这 500 万条数据导出到本地文件,我试过包括后台运行在内的几种方法,都失败了。所以我最后决定用 ABAP 代码实现分批式将数据导出到 application server,文件从服务器到本地就不是难事。sql 语句的 package size 关键字实现了数据的分批处理。

源码

github - bulk data upload and download

参考

  • How to download file from application server
  • SAP导出大数据表

记一次大量数据导入导出SAP系统实验相关推荐

  1. 蓝的成长记——追逐DBA(3):古董上操作,数据导入导出成了问题

    蓝的成长记--追逐DBA(3):古董上操作,数据导入导出成了问题 ***************************************声明************************** ...

  2. SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b ...

  3. [导入][转]精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换

    * 说明:复制表(只复制结构,源表名:a 新表名:b)       select * into b from a where 1<>1 * 说明:拷贝表(拷贝数据,源表名:a 目标表名:b ...

  4. hive数据导入导出

    Hive数据导入导出的几种方式 一,Hive数据导入的几种方式 首先列出讲述下面几种导入方式的数据和hive表. 导入: 本地文件导入到Hive表: Hive表导入到Hive表; HDFS文件导入到H ...

  5. [转载]在SQL Server数据库之间进行数据导入导出,OPENDATASOURCE

    需要在c盘下先建立一个data.txt文件,然后在文件的第一行写上你要导出的列,不如说要导出id和name这两列,就在第一行写上 id,name 然后保存,使用下列SQL就可以了,你如果要保持原有的I ...

  6. (转)资料收集,新手必备的sql数据导入导出知识

    转载自csdn SQL SERVER 与ACCESS.EXCEL的数据转换 熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact ...

  7. DB2数据导入导出的小结

    Db2的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机千变万化,这儿就工作中常用到的命令,小结了一下. 一.数据导入导出基础的格式知识 DEL:界定的ASCII文件,行分隔 ...

  8. oracle数据库数据导入导出步骤(入门)

    oracle数据库数据导入导出步骤(入门) 说明:  1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL  2.如果熟悉命令,建议用exp/i ...

  9. 使用Transact-SQL进行数据导入导出方法详解

    本文为原创,如需转载,请注明作者和出处,谢谢! 本文曾发表于IT168:http://tech.it168.com/db/s/2006-08-16/200608160913336_1.shtml    ...

  10. Oracle数据导入导出imp/exp

    功能:Oracle数据导入导出imp/exp就相当与oracle数据还原与备份.   大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的丢失).  Oracle有个好处,虽然 ...

最新文章

  1. 麻省理工学院的新系统TextFooler, 可以欺骗Google的自然语言处理系统及Google Home的音频...
  2. 【转自知乎】:localhost、127.0.0.1 和 本机IP 三者的区别?
  3. 集成算法中的Bagging
  4. 如何在Kubernetes里给PostgreSQL创建secret
  5. 为什么PostgreSQL比MongoDB还快之完结篇(深挖单点索引查询)
  6. 天池在线编程 2020国庆八天乐 - 7 进制
  7. TF-IDF的java实现(权重排序,可用来处理大数据集)
  8. Nginx 默认的日志类型
  9. 读书笔记∣元数据:用数据的数据管理你的世界 Ch.5-8
  10. 气象报告是什么计算机领域,计算机辅助翻译系统在亚运气象服务方面的应用报告...
  11. 00001__伊丽莎白福尔摩斯
  12. 3Ds Max 精简材质编辑器 一片黑问题
  13. App刷量刷友盟方案
  14. html雨滴状的图案代码,HTML_HTML5实现晶莹剔透的雨滴特效,复制代码代码如下: html - phpStudy...
  15. 线性代数_4、行列式按行展开,异乘变零,拉普拉斯定理
  16. Nginx 的配置和访问控制的理论实验操作详情
  17. 第十章分治算法(大数相乘)
  18. ubuntu一键卸载php
  19. VBA-基本的文件操作语句与文件加密(加密dog)
  20. 微信小程序项目源码ssm校园跑腿+后台管理系统|前后分离VUE含论文+PPT+源码

热门文章

  1. win7安装SQL2005图文教程
  2. java 认证考试题,2017年Java认证考试试题
  3. Python中终端彩色打印输出
  4. 染色问题 —— 扇形涂色
  5. Mac Eclipse 主题选择
  6. Python元组练习题
  7. J2ME-Loader 使用体验:在安卓上运行 Java 应用
  8. IATF16949认证辅导,IATF16949第六章容易发生的问题点及处理方案
  9. 软件测试对计算器的测试,软件测试计算器的测试用例
  10. Linux 系统镜像打包流程