如何像我们在Connection setClientInfo中那样在Spark JDBC中设置客户端信息

时间:2018-12-09 10:55:42

标签: scala apache-spark jdbc

使用Java / Scala java.sql.Connection时,我可以在连接顶部添加一些客户端信息,例如:

Row, Header1, Header2, Header3, Header4
1, 1.23, 5.67, 6.55, N/A
2, N/A, 19.67, 9.55, N/A
3, N/A, 19.67, 9.55, 16.88

现在我想将我的信息添加到Spark jdbc连接中吗?

  val con: Connection = DriverManager.getConnection(jdbcHelper.finalUrl, jdbcHelper.getUser, jdbcHelper.getPass)
  con.setClientInfo("ClientName", "JobAppStateManager")
  con.prepareStatement(SOME_STATEMENT) 
  .....

有可能以一种干净的方式吗?

1 个答案:

答案 0 :(得分:0)

目前尚不可能以干净的方式进行; spark-redshift不添加该属性: https://github.com/databricks/spark-redshift/blob/8adfe95a25d6bbe8aedc2010a756ccf3615eab24/src/main/scala/com/databricks/spark/redshift/RedshiftJDBCWrapper.scala#L228

但是,有一个困难的解决方法:创建自己的JDBC驱动程序包装程序,该包装程序将覆盖driver.connect(url, properties)函数以添加所需的属性。然后在Redshift上使用Spark之前,通过调用Class.forName(my.package.Driver)来告诉spark使用它。