salesforce-jdbc icon indicating copy to clipboard operation
salesforce-jdbc copied to clipboard

Getting SOQLParsingException while trying to use this jar to connect to salesforce from spark

Open ronyx18 opened this issue 6 years ago • 3 comments

Spark version = 2.2 spark-shell --jars salesforce-jdbc-1.1-20180403.104727-1-single.jar val jdbcurl="jdbc:ascendix:salesforce://;user=;password=;loginDomain=" val df=spark.read.format("jdbc").option("driver","com.ascendix.jdbc.salesforce.ForceDriver").option("url",jdbcurl).option("dbtable","select Name from account limit 10").load()

Error: ( I dont have an asterix in my soql ) java.sql.SQLException: org.mule.tools.soql.exception.SOQLParsingException: There was a SOQL parsing error close to '' (line:1,position:7). at com.ascendix.jdbc.salesforce.ForcePreparedStatement.query(ForcePreparedStatement.java:123) at com.ascendix.jdbc.salesforce.ForcePreparedStatement.executeQuery(ForcePreparedStatement.java:99) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:62) at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation.(JDBCRelation.scala:114) at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:52) at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:309) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178) at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146) at org.apache.spark.sql.DataFrameReader.jdbc(DataFrameReader.scala:193) ... 50 elided Caused by: org.mule.tools.soql.exception.SOQLParsingException: There was a SOQL parsing error close to '' (line:1,position:7). at org.mule.tools.soql.SOQLParserHelper.createParsingRecognitionException(SOQLParserHelper.java:115) at org.mule.tools.soql.SOQLParserHelper.createParsingException(SOQLParserHelper.java:90) at org.mule.tools.soql.SOQLParserHelper.createSOQLParserTree(SOQLParserHelper.java:71) at org.mule.tools.soql.SOQLParserHelper.createSOQLData(SOQLParserHelper.java:34) at com.ascendix.jdbc.salesforce.SoqlQueryAnalyzer.getQueryData(SoqlQueryAnalyzer.java:191) at com.ascendix.jdbc.salesforce.SoqlQueryAnalyzer.getFieldDefinitions(SoqlQueryAnalyzer.java:162) at com.ascendix.jdbc.salesforce.ForcePreparedStatement.getFieldDefinitions(ForcePreparedStatement.java:264) at com.ascendix.jdbc.salesforce.ForcePreparedStatement.query(ForcePreparedStatement.java:113) ... 58 more Caused by: org.antlr.runtime.NoViableAltException at org.mule.tools.soql.parser.SOQLParser.select_spec(SOQLParser.java:4853) at org.mule.tools.soql.parser.SOQLParser.select_clause(SOQLParser.java:2961) at org.mule.tools.soql.parser.SOQLParser.soql_query_(SOQLParser.java:2680) at org.mule.tools.soql.parser.SOQLParser.soql_query(SOQLParser.java:2587) at org.mule.tools.soql.SOQLParserHelper.createSOQLParserTree(SOQLParserHelper.java:56) ... 63 more

ronyx18 avatar Sep 25 '19 18:09 ronyx18

I have the same issue. Did you ever figure out a fix?

friendofasquid avatar May 26 '20 00:05 friendofasquid

I figured out why this happens, spark puts in quotes in your fields when it tries to select. I went to the SoqlQueryAnalyzer file and did a soql.replace(""", "") and it did the trick.

tglstory avatar Sep 21 '21 20:09 tglstory

Also please note Databricks doesn't like array types and other types, so i cast them all to String /shrug

tglstory avatar Sep 21 '21 23:09 tglstory