从SAP导出大数据表

在前一篇博文记一次大量数据导入导出SAP系统实验中,介绍了将大量数据导入到SAP,以及从SAP导出的方法,但对导出数据场景,在数据量比较大的时候,需要借助 SAP 应用程序服务器,方案不理想。为了解决将SAP表数据导出到本地,我仔细看了 RFC_READ_TABLE 函数,进一步了解到,该函数除了允许在查看数据的时候,选择部分列,还可以通过填写 rowskips 和 rowcount 两个参数,分批查看数据。有了这个灵活性,本人就基于 PyRfc 编写了通用的脚本,实现了数据方便导入到本地 csv 文件。测试了百万行的表数据,导出无压力。

首先,我们来看看如何使用 SapTableServie 类。下面的代码演示了导出 TSTCT表中所有语言(sprsl)为中文的记录。max_rows 为 -1 表示导出所有数据,如果为其他数字,则限定最大导出行数。分次导出,每次数量为 20,000 条。

SAP 系统配置参数

系统配置参数放在 cfg 文件中,通过 ConfigParse 模块读取配置文件的数据。

[D01]
ashost = sapecc6
client = 001
sysnr = 00
sid = D01
user = stone
passwd = 123456
lang = EN

获取表的字段

编写辅助方法,从数据表中获取字段名。rfc_read_table 函数 当 no_data 参数为空的时候,fields 参数即返回字段(内表格式)。如果需要更详尽的信息,可以调用 SAP DDIF_FIELDINFO_GET 函数。

在我们的程序中,我们只关心 field name,所以再编写一个私有方法获取:

获取表数据

调用 rfc_read_table 函数:

rfc_read_table 函数的 data 表参数,每行最多 512 个字符,所以为了避免 DATA_BUFFER_EXCEEDED 错误,每次读取 5 个字段,获取数据后再进行组合。

read_table() 方法解决了列的问题,如果行项目太多,不能一次全部读取,所以再编写 rows_by_batch() 方法,分次读取:

数据导出到 CSV 文件

基于上面的代码,轻松实现数据导出到 csv 文件:

关于 PyRFC 环境搭建,请参考我另外一篇博文:SAP 接口编程 - PyRFC

性能问题

rfc_read_table 采取每次读取一笔记录,符合条件则加入 data 表参数中。这种方式在分次读取的时候,如果表数据很大,会表现为性能越来越慢。如果追求性能,可改写 rfc_read_table 函数。下图说明了 rfc_read_table 读取数据的算法:

源码

PyRFC_SAP_Table_Service - Github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值