Как реализовать параметр sessionInitStatement в Spark2.1 или 2.2 в sparksql - PullRequest
0 голосов
/ 23 сентября 2019

В версии 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...