Ошибка: [Pivotal] [Greenplum JDB C Driver] [Greenplum] подготовленный оператор "PS1" уже существует - PullRequest
0 голосов
/ 26 марта 2020

У меня кластер Greenplum на Azure, к которому я могу получить доступ к его данным с локального компьютера при использовании простого соединения JDB C. Теперь я попытался использовать тот же драйвер JDB C в Spark SQL следующим образом:

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)

Если я использую простое соединение JDB C и считываю / записываю данные способом java, все работает нормально. ТАК не уверен, в чем здесь проблема?

1 Ответ

1 голос
/ 26 марта 2020

Развертывания Greenplum в облаке используют pgBouncer с pool_mode транзакции. pgBouncer не поддерживает подготовленные операторы в этом режиме.

Есть несколько обходных путей. Одним из них является рекомендуемый способ , «Правильный способ сделать это для JDB C - добавить параметр prepareThreshold = 0 для подключения строки.»

Другим обходным решением является прямое подключение к Greenplum. и обойти pgBouncer. База данных прослушивает порт 6432, а pgBouncer прослушивает 5432.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...