最近需要向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 CopyInTest {
def main(args: Array[String]): Unit = {
val tableName = "copyIn_test"
val data: Array[Array

本文介绍了在面临百万级数据写入PostgreSQL和Greenplum时,传统方法如Spark和jdbc的性能不佳,而采用PG的copyIn方法实现了秒级写入。分享了相关pom依赖及demo代码,提醒Greenplum虽然能用PG依赖进行建表和写入,但超过30列查询会卡住,建议主要使用GP自己的依赖。
最低0.47元/天 解锁文章
2663

被折叠的 条评论
为什么被折叠?



