2016-10-04 18 views
0

今、oracleデータベースに接続するためにSparkを使用しています。ただし、「TIMESTAMP WITH TIMEZONE」という名前の列タイプがあります。これはOracleの特定の列です。この型の列を含むよりもテーブルからデータをロードすると、エラー "java.sql.SQLException:Unsupported type -101"がスローされます。Spack JDBCを使用して特定の列を選択するにはどうすればよいですか?

誰かがテーブルから特定の列を読み込む方法を知っていますか?それから、「TIMESTAMP WITH TIMEZONE」列を選択するのを避けることができます。誰かが "java.sql.SQLException:Unsupported type -101"というエラーを見つけ出すことができる方が良いでしょう。しかし、私はそれがスパークのバグかもしれないと思う。

私のコードは次のとおりです、ありがとうございます。

spark = SparkSession\ 
    .builder\ 
    .appName("TestSQL")\ 
    .getOrCreate() 
orc = spark.read \ 
    .format("jdbc") \ 
    .option("url", "jdbc:oracle:thin:xxx/[email protected]:1521/database") \ 
    .option("dbtable", "xxx.xxx") \ 
    .load() 

答えて

0

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

+0

ありがとうございました!それはJavaコードでなければならないのですか?私は、PythonコードのdbtableパラメータにSQLクエリを渡し、 "invalid table name"というエラーが発生しました。 –

+0

私は確信していません、Javaで動作します –

+0

ありがとう、私は少しJavaを試してみます。 –

0

Oracleを扱うことができるように、オラクルのビューを作成することができます別のアプローチDB内の特定のデータ型

関連する問題