[Pivotal] [Greenplum JDBC驱动程序] [Greenplum]准备好的语句“ PS1”已存在

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

我在Azure上有一个Greenplum群集,使用简单的JDBC连接时,可以从本地计算机访问它的数据。现在,我尝试在Spark SQL中使用相同的JDBC驱动程序,如下所示:

val url = s"jdbc:pivotal:greenplum://$server:$port;DatabaseName=$database"
Spark.sqlContext.read.format("jdbc")
  .options(Map(
    "url"->url, "user"-> user, "password"-> password,
    "dbschema" -> "public", "dbtable" -> table
  ))
  .load()

执行load()时,引发以下错误

Exception in thread "main" java.sql.SQLSyntaxErrorException: [Pivotal][Greenplum JDBC Driver][Greenplum]prepared statement "PS1" already exists. 
    at com.pivotal.jdbc.greenplumbase.ddcd.b(Unknown Source)
    at com.pivotal.jdbc.greenplumbase.ddcd.a(Unknown Source)
    at com.pivotal.jdbc.greenplumbase.ddcc.b(Unknown Source)
    at com.pivotal.jdbc.greenplumbase.ddcc.a(Unknown Source)
    at com.pivotal.jdbc.greenplum.wp.ddj.m(Unknown Source)
    at com.pivotal.jdbc.greenplum.ddg.c(Unknown Source)
    at com.pivotal.jdbc.greenplum.ddg.d(Unknown Source)
    at com.pivotal.jdbc.greenplum.ddg.a(Unknown Source)
    at com.pivotal.jdbc.greenplumbase.dddr.y(Unknown Source)
    at com.pivotal.jdbc.greenplumbase.dddr.x(Unknown Source)
    at com.pivotal.jdbc.greenplumbase.dddl.executeQuery(Unknown Source)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:61)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation$.getSchema(JDBCRelation.scala:210)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167)
    at dzlab.GreenplumSparkSample$.read1(GreenplumPropertyFactory.scala:21)
    at dzlab.GreenplumSparkSample$.main(GreenplumPropertyFactory.scala:35)
    at dzlab.GreenplumSparkSample.main(GreenplumPropertyFactory.scala)

如果我使用简单的JDBC连接并以Java方式读取/写入数据,则一切正常。所以不确定在这里出什么问题吗?

azure apache-spark jdbc apache-spark-sql greenplum
1个回答
0
投票

[Greenplum在云中的部署使用pgBouncer和交易的pool_mode。 pgBouncer在这种模式下不支持预备语句。

有一些解决方法。一个是recommended way,“针对JDBC的正确方法是添加prepareThreshold = 0参数来连接字符串。”

另一个解决方法是直接连接到Greenplum并绕过pgBouncer。数据库在端口6432上侦听,而pgBouncer在5432上侦听。

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