使用DBMS_CLOUD向ADB加载CSV报KUP-04020错误如何指定readsize解决
错误根因
KUP-04020报错本质是CSV文件中存在长度超过当前读取缓冲区大小的单行记录,DBMS_CLOUD默认的readsize参数值为10MB(对应报错中的10002432字节),当单行记录长度超过该值时就会触发缓冲区溢出错误。
修复步骤
- 首先确认CSV文件格式正常,不存在换行符丢失导致多行合并为单行的异常情况
- 计算你需要的缓冲区大小:取CSV最长单行记录的字节数,往上取整到合适的数值(单位为字节),取值范围为1MB~100MB
- 在调用DBMS_CLOUD加载数据的接口中,在format参数里添加
readsize配置项,传入你计算好的数值
场景1:使用DBMS_CLOUD.COPY_DATA直接加载数据到表
BEGIN DBMS_CLOUD.COPY_DATA( table_name => 'YOUR_TARGET_TABLE', -- 替换为实际目标表名 credential_name => 'YOUR_OSS_CREDENTIAL', -- 替换为实际对象存储访问凭证名 file_uri_list => '你的CSV文件对象存储地址', format => json_object( 'type' value 'csv', 'readsize' value 20971520, -- 示例设置为20MB,可根据实际调整 'skipheaders' value 1 -- 有表头的场景配置,无表头可删除 ) ); END; /
场景2:使用DBMS_CLOUD.CREATE_EXTERNAL_TABLE创建外部表后加载
BEGIN DBMS_CLOUD.CREATE_EXTERNAL_TABLE( table_name => 'YOUR_EXTERNAL_TABLE', -- 替换为实际外部表名 credential_name => 'YOUR_OSS_CREDENTIAL', -- 替换为实际对象存储访问凭证名 file_uri_list => '你的CSV文件对象存储地址', column_list => '列名1 类型1, 列名2 类型2...', -- 替换为实际表字段定义 format => json_object( 'type' value 'csv', 'readsize' value 20971520, -- 示例设置为20MB,可根据实际调整 'skipheaders' value 1 ) ); END; /
注意事项
- readsize参数单位为字节,最大值不能超过100MB(104857600字节),设置过大会导致不必要的内存占用
- 调整参数后如果仍报错,建议先校验CSV文件的换行符、字段封闭符配置是否正确,避免因数据格式异常导致的单行记录超长
内容的提问来源于stack exchange,提问作者Engin SENEL
相关产品推荐
相关产品推荐

