Неподдерживаемый тип: ВРЕМЕННАЯ МЕТКА (6) С МЕСТНЫМ ЧАСОВЫМ ПОЯСОМ, НЕ РАВНЫМ НУЛЮ

#postgresql #jdbc #apache-flink

#postgresql #jdbc #apache-flink

Вопрос:

Я считываю данные из базы данных PostgreSQL в Flink и использую Table API и SQL. По-видимому, мой столбец временной метки (называемый inserttime) имеет тип TIMESTAMP(6) WITH LOCAL TIME ZONE NOT NULL . Но когда я выполняю SQL-запрос типа SELECT inserttime FROM books , Flink жалуется, что это неподдерживаемый тип, с ошибкой Unsupported type:TIMESTAMP(6) WITH LOCAL TIME ZONE NOT NULL .

  • Это из-за NOT NULL в конце? Если да, то как я должен использовать его так, чтобы он мог быть прочитан Флинком?
  • Я пытался использовать UDF, чтобы преобразовать его во что-то читаемое с помощью Flink, как показано ниже:
 public static class TimestampFunction extends ScalarFunction {
    public java.sql.Timestamp eval (java.sql.Timestamp t) {
        // do some conversion
    }
}
 

Очевидно, что сигнатура функции eval неверна, но мне интересно, может ли это быть способом заставить Flink прочитать мой тип метки времени? Если да, то какой должна быть сигнатура функции eval?

  • Я также пытался это сделать CAST(inserttime as TIMESTAMP) , но возникает та же ошибка неподдерживаемого типа.

Есть идеи?

Комментарии:

1. Представление базы данных, определяющее тип данных, скорее всего, поможет…

2. Какая версия Postgres и откуда вы ее взяли? АФАИК нет TIMESTAMP() WITH LOCAL TIME ZONE . Использование клиента psql для чего d books отображается тип inserttime данных? Также версия и исходный код драйвера JDBC?

3. Я использую postgresql-42.2.10.jar . inserttime имеет JDBCType of TIMESTAMP .