最近需要向PG写入百万级的数据,分别尝试了Spark、jdbc写法,发现性能都不是特别好,差不多都得花上几分钟,有可能是PG本身没有进行优化,或者编程过程中有欠缺的地方。总之,达不到业务需求。后面改用PG的copyIn方法,发现写入百万数据只需要秒级别。下面将demo代码附上,与君共享,有不足的地方,万望指正。
pom依赖:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.6</version>
</dependency>
注意:虽然GP的依赖和PG有区别(具体区别请各位自行查阅资料),但是GP的依赖包里面并没有copyIn方法。所以如果要用copyIn方法向GP中写入数据,依赖要用PG的。
导入方法:
import java.io.{ByteArrayInputStream, InputStream}
import java.nio.charset.StandardCharsets
import java.sql.DriverManager
import org.postgresql.copy.CopyManager
import org.postgresql.core.BaseConnection
demo代码:
object CopyInTe