В версии spark2.3 или выше имеется необязательный sessionInitStatement для поддержки настройки формата времени оракула и других функций (https://spark.apache.org/docs/2.3.0/sql-programming-guide.html#jdbc-to-other-databases),, но он не поддерживается в 2.2или более низкая версия. Есть ли другой способ поддержки этой опции, кроме обновления?
Я использую следующий код для запроса данных оракула, который обычно выполняется в версии 2.3.0, но в 2.2.1мне предлагается сообщить о следующей ошибке:
java.sql.SQLDataException: ORA-01861: literal does not match format string
Кроме того, поскольку это производственная среда, ему не разрешено напрямую изменять формат даты по умолчанию.
String initSql = "BEGIN " +
"EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=\"YYYY-MM-DD HH24:MI:SS\"';" +
"EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_TIMESTAMP_FORMAT=\"YYYY-MM-DD HH24:MI:SS\"';" +
"END;";
String exeSql="SELECT * FROM tableName WHERE dateField > '2019-09-21 11:30:52' OR timestampField > '2019-09-21 11:30:52'";
Dataset<Row> jdbcDf = spark.read()
.format("jdbc")
.option("url", url)
.option("user", userName)
.option("password", password)
.option("fetchsize", 200)
.option("driver", "oracle.jdbc.driver.OracleDriver")
.option("oracle.jdbc.mapDateToTimestamp", "false")
.option("sessionInitStatement", initSql)
.option("dbtable", exeSql).load();
}
jdbcDf.show();