ExecuteSQL не выбирает таблицу, если она имеет значение смещения dateTime?

Я создал таблицу с одним столбцом, имеющим значение типа данных -dateTimeOffset, и вставил несколько значений.

create table dto (dto datetimeoffset(7))
insert into dto values (GETDATE()) -- inserts date and time with 0 offset
insert into dto values (SYSDATETIMEOFFSET()) -- current date time and offset
insert into dto values ('20131114 08:54:00 +10:00') -- manual way

В Nifi я указал запрос «Выбрать * из dto» в «Выполнение SQL».

Это показывает ошибку ниже ..,

java.lang.IllegalArgumentException: createSchema: Unknown SQL type -155 cannot be converted to Avro type

Если я изменю этот столбец на dateTime, тогда ExecuteSQL работает правильно, но не работает в столбце DateTimeOffset.

Любая помощь приветствуется.

Большое спасибо


person Mister X    schedule 30.11.2016    source источник


Ответы (2)


datetimeoffset - это тип JDBC, специфичный для MSSQL, и он не поддерживается ExecuteSQL (который поддерживает стандартные типы JDBC). Вы можете попробовать преобразовать поле datetimeoffset в какой-либо другой стандартный тип, такой как datetime, как описано в здесь.

person mattyb    schedule 30.11.2016
comment
Спасибо, Мэттиб за ваш ответ - person Mister X; 01.12.2016

Я создал специальный процессор и адаптировал класс JdbcCommon.java для включения DATETIMEOFFSET SQL Server. Это всего лишь одна строчка кода. Я попробую посмотреть, могу ли я попросить их объединить это в официальном репо.

Это часть моего JdbcCommon.java:

                case TIMESTAMP:
                case TIMESTAMP_WITH_TIMEZONE:
                case -101: // Oracle's TIMESTAMP WITH TIME ZONE
                case -102: // Oracle's TIMESTAMP WITH LOCAL TIME ZONE
                case -155: // SQL Server's DATETIMEOFFSET <---- added this line
                    addNullableField(builder, columnName,
                            u -> options.useLogicalTypes
                                    ? u.type(LogicalTypes.timestampMillis().addToSchema(SchemaBuilder.builder().longType()))
                                    : u.stringType());
                    break;

person Felipe Martim    schedule 12.11.2020