Spark JDBC 写入 Teradata - 如何编写并行查询

问题描述 投票:0回答:2

我有一个大约 2000 万行和 5 列的数据框,我想将其写入 Teradata。我面临的问题是加载需要一定的时间,因为我们可以使用一个分区,因为表将锁定多个分区。我尝试过使用 FASTLOAD 参数,但它因 preparedStatement getNextException 而超时。不幸的是,我无权访问日志(按照我们组织的设置方式,我们使用使用 Spark 的内部 ETL 工具)

有人可以帮忙吗?

我当前使用的代码是

df.write.format("jdbc")
.option("url", "jdbc:teradata://<organisation_url>/Database=db,TYPE=FASTLOAD")
.option("dbtable", "tbl_name")
.option("user", "user")
.option("password","pword")
.option("driver","com.teradata.jdbc.TeraDriver")
.option("numPartitions",1)
.mode("overwrite").save()
scala apache-spark jdbc
2个回答
1
投票

在 JDBC 连接 URL 中指定

FLATTEN=ON
连接参数,以将链接的异常组合在一起形成单个异常:

.option("url", "jdbc:teradata://<organisation_url>/Database=db,TYPE=FASTLOAD,FLATTEN=ON")

您插入的数据可能包含数据库拒绝的错误数据值。希望通过

FLATTEN=ON
您能够看到问题。


0
投票

Spark 使用惰性求值,因此您需要提供有关从何处读取数据的更多详细信息。 如果您使用 JDBC 读取数据,则可以使用 numPartitions 触发多个线程读取数据,例如 100 个线程,因此在这种情况下 100 个线程将并行写入 Teradata

© www.soinside.com 2019 - 2024. All rights reserved.