如何通过 Spack JDBC 选择特定列?
Posted
技术标签:
【中文标题】如何通过 Spack JDBC 选择特定列?【英文标题】:How to select specific columns through Spack JDBC? 【发布时间】:2016-10-04 03:04:34 【问题描述】:现在我正在使用 Spark 连接我的 oracle 数据库。但是,有一种名为“TIMESTAMP WITH TIMEZONE”的列类型,它是 Oracle 中的特定列。当我从表中加载数据而不是包含此类型列时,它会抛出错误“java.sql.SQLException: Unsupported type -101”。
有人知道如何从表中加载特定列吗?然后我可以避免选择“TIMESTAMP WITH TIMEZONE”列。如果有人能找出“java.sql.SQLException: Unsupported type -101”错误会更好。但我认为这可能是 Spark 的一个错误。
我的代码如下,非常感谢。
spark = SparkSession\
.builder\
.appName("TestSQL")\
.getOrCreate()
orc = spark.read \
.format("jdbc") \
.option("url", "jdbc:oracle:thin:xxx/xxx@IP:1521/database") \
.option("dbtable", "xxx.xxx") \
.load()
【问题讨论】:
【参考方案1】:在 options
中,您可以传递 sql query in dbtable
键。在sql查询中,您可以选择所需的列。
例如:
final String dbTable =
"(select emp_no, concat_ws(' ', first_name, last_name) as full_name from employees) as employees_name";
Dataset<Row> jdbcDF =
sparkSession.read().jdbc(CONNECTION_URL, dbTable, "emp_no", 10001, 499999, 10, connectionProperties);
*代码在java中
来源:Loading database data using Spark 2.0 Data Sources API
【讨论】:
非常感谢!它必须是java代码吗?我在 python 代码的 dbtable 参数中传递 SQL 查询,得到一个错误“无效的表名”。 非常感谢,我会尝试一点java。 @AndyNie:你可以从我提到的链接中获取帮助【参考方案2】:另一种方法是在 Oracle 上创建视图,以便您可以在数据库本身中处理 Oracle 特定的数据类型。
【讨论】:
以上是关于如何通过 Spack JDBC 选择特定列?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 JDBC 显示 Informix sysprocedures.paramtypes 列?