YugabyteDB YSQL中带事务大小的COPY FROM正确格式
YSQL中COPY FROM指定事务大小的正确语法
报错原因
语法错误由WITH子句参数书写不规范导致:FORMAT是独立参数,需要单独指定格式类型(可选值为csv/text/binary),delimiter是与FORMAT平级的独立参数,不能跟在FORMAT关键字后书写,因此触发了逗号位置的语法报错。
正确写法
ROWS_PER_TRANSACTION是YugabyteDB针对批量导入场景扩展的参数,用于指定单个事务处理的行数,避免大事务占用过多资源,适配千万级数据导入需求,正确语句格式如下:
COPY parking_violations FROM '/home/yugabyte/load_violations.csv' WITH ( FORMAT csv, HEADER, DELIMITER ',', ROWS_PER_TRANSACTION 10000 );
参数说明
FORMAT csv:指定导入文件的格式为CSVHEADER:声明CSV文件首行为列名,不会作为数据行导入DELIMITER ',':指定字段之间的分隔符为逗号ROWS_PER_TRANSACTION 10000:每导入10000行数据提交一次事务
导入优化建议
- 针对1200万行的导入规模,
ROWS_PER_TRANSACTION建议设置在5000~20000区间:数值过大会导致单事务内存占用过高,数值过小会频繁提交事务拉低导入效率 - 如果待导入文件存放在本地客户端,而非数据库服务器上,需要使用
\copy元命令执行导入,语法与上述COPY语句完全一致,且不需要数据库超级用户权限
内容的提问来源于stack exchange,提问作者dh YB
相关产品推荐
相关产品推荐

