[ https://issues.apache.org/jira/browse/SPARK-37021?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Valery Meleshkin updated SPARK-37021: ------------------------------------- Description: If {{sessionInitStatement}} is required to grant permissions or resolve an ambiguity, schema resolution will fail when reading a JDBC table. Consider the following example running against Oracle database: {code:scala} reader.format("jdbc").options( Map( "url" -> jdbcUrl, "dbtable" -> "FOO", "user" -> "BOB", "sessionInitStatement" -> """ALTER SESSION SET CURRENT_SCHEMA = "BAR"""", "password" -> password )).load {code} Table {{FOO}} is in schema {{BAR}}, but default value for {{CURRENT_SCHEMA}} for the JDBC connection will be {{BOB}}. Therefore, the code above will fail with an error ({{ORA-00942: table or view does not exist}} if it's Oracle). It happens because [resolveTable |https://github.com/apache/spark/blob/9d061e3939a021c602c070fc13cef951a8f94c82/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JDBCRDD.scala#L67] that is called during planning phase ignores {{sessionInitStatement}}. This might sound like an artificial example, in a simple case like the one above it's easy enough to specify {{"BOB.FOO"}} as {{dbtable}}. But when {{sessionInitStatement}} contains a more complicated setup it might not be as straightforward. was: If {{sessionInitStatement}} is required to grant permissions or resolve an ambiguity, schema resolution will fail when reading a JDBC table. Consider the following example running against Oracle database: {code:scala} reader.format("jdbc").options( Map( "url" -> jdbcUrl, "dbtable" -> "SELECT * FROM FOO", "user" -> "BOB", "sessionInitStatement" -> """ALTER SESSION SET CURRENT_SCHEMA = "BAR"""", "password" -> password )).load {code} Table {{FOO}} is in schema {{BAR}}, but default value for {{CURRENT_SCHEMA}} for the JDBC connection will be {{BOB}}. Therefore, the code above will fail with an error ({{ORA-00942: table or view does not exist}} if it's Oracle). It happens because [resolveTable |https://github.com/apache/spark/blob/9d061e3939a021c602c070fc13cef951a8f94c82/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JDBCRDD.scala#L67] that is called during planning phase ignores {{sessionInitStatement}}. > JDBC option "sessionInitStatement" does not execute set sql statement when > resolving a table > -------------------------------------------------------------------------------------------- > > Key: SPARK-37021 > URL: https://issues.apache.org/jira/browse/SPARK-37021 > Project: Spark > Issue Type: Bug > Components: Spark Core > Affects Versions: 3.0.2 > Reporter: Valery Meleshkin > Priority: Major > > If {{sessionInitStatement}} is required to grant permissions or resolve an > ambiguity, schema resolution will fail when reading a JDBC table. > Consider the following example running against Oracle database: > {code:scala} > reader.format("jdbc").options( > Map( > "url" -> jdbcUrl, > "dbtable" -> "FOO", > "user" -> "BOB", > "sessionInitStatement" -> """ALTER SESSION SET CURRENT_SCHEMA = "BAR"""", > "password" -> password > )).load > {code} > Table {{FOO}} is in schema {{BAR}}, but default value for {{CURRENT_SCHEMA}} > for the JDBC connection will be {{BOB}}. Therefore, the code above will fail > with an error ({{ORA-00942: table or view does not exist}} if it's Oracle). > It happens because [resolveTable > |https://github.com/apache/spark/blob/9d061e3939a021c602c070fc13cef951a8f94c82/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JDBCRDD.scala#L67] > that is called during planning phase ignores {{sessionInitStatement}}. > This might sound like an artificial example, in a simple case like the one > above it's easy enough to specify {{"BOB.FOO"}} as {{dbtable}}. But when > {{sessionInitStatement}} contains a more complicated setup it might not be as > straightforward. -- This message was sent by Atlassian Jira (v8.3.4#803005) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org For additional commands, e-mail: issues-h...@spark.apache.org